简体   繁体   中英

Spawning Player at certain Point in Unity

I am making a small 2d click'n'point in Unity, and what I want to do is: I want to move towards the door and when my Player steps on a game Object with an attached SceneSwitcher Script he shall go through the door, into another scene. That works fine so far. Now I don't want him to appear in the middle of the room, but on the door, where he entered the room.

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

}

That is my code, it does change Scenes, but not change the position. I would appreciate any help :)

On your ChangePosition() method you are passing hardcoded values to player position and it will assume always (12,12,0) on your scene space.

You need to define a spawn manager where you will get dynamically witch spawn point in your scene you want to use.

edited:

1: Try to create a singleton GameManager ( you can find singleton pattern examples here ) (IMPORTANT: Add DontDestroyOnLoad on your GameManager Awake).

2: In your GameManager define a Vector3 NextPosition property or something like this.

3: Declare a public Vector3 Destination on your "teleport" script to set it per teleport on inspector/editor.

4: Before this line levelManager.LoadLevel (SceneName) of code set GameManager.NextPosition = this.Destination;

5: If you are not persisting your character between scenes just call on one of hes behaviours Awake() or, if he persists create a method void OnLevelWasLoaded(int level) and chage players position setting GameManager.NextPosition ( wisely testing if it is valid for the current level before ;) ).

I cant try or do better coding now because I don't have access to unity editor so I hope it helps at last start a good research to solve your problem =/.

I would think the loadLevel function destroys the current script so changePosition does not get executed? I could be wrong.

Even if it is getting executed, there is a good chance it is executed before the level load and the properties for the next scene override where it got moved to.

I forget the exact syntax but look into getting GameObjects to not be destroyed on scene change.

EDIT

Object.DontDestroyOnLoad

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM