在Unity的某个点产生玩家

时间:2015-07-22 13:59:56

标签: c# unity3d

我在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);
 }

}

这是我的代码,它确实改变了场景,但没有改变位置。我将不胜感激任何帮助:)

2 个答案:

答案 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在场景变化时不被破坏。

修改

Object.DontDestroyOnLoad