我在Unity中做了一个小的2d click'n'point,我想要做的是:我想走向门,当我的玩家踩到带有附加的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);
}
}
这是我的代码,它确实改变了场景,但没有改变位置。我将不胜感激任何帮助:)
答案 0 :(得分:1)
在你的ChangePosition()方法中,你将硬编码的值传递给玩家位置,它将假设你的场景空间总是(12,12,0)。
你需要定义一个spawn管理器,你将在你想要使用的场景中获得动态生成点。
<强>编辑:强>
1:尝试创建一个单独的GameManager(您可以找到单例模式示例here)(重要提示:在GameManager Awake上添加DontDestroyOnLoad)。
2:在你的GameManager中定义一个Vector3 NextPosition属性或类似的东西。
3:在你的&#34; teleport&#34;上声明一个公共Vector3目的地脚本在检查员/编辑器上为每个传送设置它。
4:在此代码行levelManager.LoadLevel (SceneName)
之前设置GameManager.NextPosition = this.Destination;
5:如果你没有在场景之间坚持你的角色,只需要调用他的一个行为Awake(),或者,如果他坚持创建一个方法void OnLevelWasLoaded(int level)并且让玩家定位设置GameManager.NextPosition(明智地测试是否它适用于current level之前;))。
我现在无法尝试或做更好的编码因为我无法访问统一编辑器,所以我希望它有助于最后开始一个很好的研究来解决你的问题= /。
答案 1 :(得分:0)
我认为loadLevel函数会破坏当前脚本,因此不会执行changePosition吗?我错了。
即使它被执行,也很有可能在级别加载之前执行它,并且下一个场景的属性会覆盖它被移动到的位置。
我忘记了确切的语法,但是考虑让GameObjects在场景变化时不被破坏。
修改强>