在Unity中生成玩家

本文关键字:玩家 Unity | 更新日期: 2023-09-27 18:04:06

我在Unity中制作一个小的2d点击点,我想做的是:我想向门移动,当我的玩家踩到带有附加SceneSwitcher脚本的游戏对象时,他将穿过门,进入另一个场景。到目前为止,这还行。现在我不想让他出现在房间中间,而是在他进入房间的门上。

using UnityEngine; 
using System.Collections; 
using PixelCrushers.DialogueSystem;
public class ScenSwitcher : MonoBehaviour {
 public string SceneName = "";
 void OnTriggerEnter2D(Collider2D other) {
     SwitchScene();
 }
 void SwitchScene(){
     LevelManager levelManager = DialogueManager.Instance.GetComponent<LevelManager>();
     levelManager.LoadLevel (SceneName);
     changePosition ();
     Debug.Log ("Scene Wechseln nach: " + SceneName);
 }
 void changePosition(){
     GameObject player = GameObject.Find("Player");
     player.transform.position = new Vector3(12,12,0);
 }
}

这是我的代码,它改变场景,但不改变位置。我将非常感谢任何帮助:)

在Unity中生成玩家

在你的ChangePosition()方法中,你将硬编码值传递给玩家位置,它将在你的场景空间中始终假设(12,12,0)。

你需要定义一个刷出管理器,你将在你想要使用的场景中动态地获得刷出点。

编辑:

1:尝试创建一个单例GameManager(你可以在这里找到单例模式的例子)(重要:在你的GameManager Awake上添加DontDestroyOnLoad)。

2:在你的GameManager中定义一个Vector3 NextPosition属性或类似的东西

3:在你的"传送"脚本上声明一个公共的Vector3目的地,以便在检查器/编辑器上设置它。

4:在这行代码的levelManager.LoadLevel (SceneName)之前设置GameManager。NextPosition = this.Destination;

5:如果你没有在场景之间持久化你的角色,只需调用他的行为之一Awake(),或者,如果他坚持创建一个方法void OnLevelWasLoaded(int level)并改变玩家的位置设置GameManager。NextPosition(明智地测试它是否对当前级别有效;)).

我不能尝试或做更好的编码现在,因为我没有访问统一编辑器,所以我希望它有助于在最后开始一个很好的研究来解决你的问题=/。

我认为loadLevel函数会破坏当前脚本,因此changePosition不会执行?我可能错了。

即使它被执行,它也很有可能在关卡加载和下一个场景的属性覆盖它被移动到的地方之前被执行。

我忘记了确切的语法,但看看如何让GameObjects在场景变化时不被破坏。

编辑

对象。DontDestroyOnLoad