Question by
Heatherrr · Apr 11, 2018 at 08:52 PM ·
positioncharacterscene-loading
Help! With player positions after scene change!!
Hello, I never post here but I've been stuck on the same damn problem for two days and I'm pulling my hair out!!
Basically, it has recently snowballed into two problems: 1) After I load the next scene (I'm testing it with 4 to 5) it doesn't update quickly enough or something as my if statement isn't triggering to set the position? 2) The latter half of the code is devoted to loading a menu scene (8) when the player presses 'e'. It does this, but I need the player to be in the same position when they come back!!! I've tried the dontdestroyonload thing and it worked but then it wouldn't set the corect position when I changed scenes normally (like, 4 to 5)!!!!
please help!!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class sceneManage : MonoBehaviour {
//private string currentScene;
private GameObject player;
//private Vector3 playerPosition;
private float x;
private float y;
private float z;
private Vector3 posVec;
//string X = "";
//string Y = "";
//string Z = "";
void Start ()
{
player = GameObject.Find("userPlayer");
}
void Update ()
{
//sceneSwitch ();
//player = GameObject.Find("userPlayer");
}
void OnTriggerEnter2D(Collider2D changeScene)
{
if (gameObject.tag == "levelForwardTransition") {
SceneManager.LoadScene ((SceneManager.GetActiveScene ().buildIndex) + 1);
if ((SceneManager.GetActiveScene ().buildIndex) == 5) {
player.transform.position = new Vector3 (-0.79f, -1.89f, 0f);
Debug.Log("pos ran");
}
}
if (gameObject.tag == "levelBackTransition") {
SceneManager.LoadScene ((SceneManager.GetActiveScene ().buildIndex) - 1);
//currentScene = (SceneManager.GetActiveScene ().buildIndex);
}
}
void sceneSwitch()
{
if (Input.GetKey (KeyCode.E)) {
if (SceneManager.GetActiveScene ().buildIndex != 8) {
PlayerPrefs.SetString ("previousScene", SceneManager.GetActiveScene ().name);
x = player.transform.position.x;
PlayerPrefs.SetFloat("x", x);
y = player.transform.position.y;
PlayerPrefs.SetFloat("y", y);
z = player.transform.position.z;
PlayerPrefs.SetFloat("z", z);
SceneManager.LoadScene (8);
x = PlayerPrefs.GetFloat("x");
y = PlayerPrefs.GetFloat("y");
z = PlayerPrefs.GetFloat("z");
posVec = new Vector3(x,y,z);
Debug.Log (x);
Debug.Log (y);
Debug.Log (z);
Debug.Log (posVec);
Debug.Log ("yes save");
}
if (SceneManager.GetActiveScene ().buildIndex == 8) {
string lastScene = PlayerPrefs.GetString ("previousScene");
SceneManager.LoadScene (lastScene);
SceneManager.LoadScene (lastScene);
Debug.Log ("yes change");
Debug.Log ("yes back");
}
positionn ();
}
}
void positionn () {
if (SceneManager.GetActiveScene ().buildIndex != 8) {
player.transform.position = (posVec);
Debug.Log ("yes position");
}
}
void OnSceneLoded (){
if ((SceneManager.GetActiveScene ().buildIndex) == 5) {
player = GameObject.Find ("userPlayer");
player.transform.position = new Vector3 (-0.79f, -1.89f, 0f);
Debug.Log ("pos ran");
}
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612160545im_/https://answers.unity.com/themes/thub/images/avi.jpg)