Question by
Mad_Mark · Sep 09, 2019 at 11:40 PM ·
level load
Load Scene and move player to start position
This seems a basic requirement for multi-scene games. All I want to do is have my player collide with an invisible object and change to a new scene at a specific vector3 position.
Here is the code that I have tried, attached to an invisible box collider.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LevelChanger : MonoBehaviour
{
static int prevLevel = 0;
public static int currentLevel = 0;
public int toLevel;
public GameObject playerObject;
private Transform startingTransform;
private void Start()
{
startingTransform = playerObject.transform;
if(playerObject == null)
{
playerObject = GameObject.FindGameObjectWithTag("Player");
}
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
if (SceneManager.GetActiveScene().buildIndex == 1)
{
prevLevel = SceneManager.GetActiveScene().buildIndex;
startingTransform.position = new Vector3(-152.6352f, 163.67f, 242.283f);
SceneManager.LoadSceneAsync(toLevel);
if (playerObject == null)
{
playerObject = GameObject.FindGameObjectWithTag("Player");
}
return;
}
else if (SceneManager.GetActiveScene().buildIndex == 2)
{
prevLevel = SceneManager.GetActiveScene().buildIndex;
startingTransform.position = new Vector3(501f, 1f, 537.209f);
SceneManager.LoadScene(toLevel);
if (playerObject == null)
{
playerObject = GameObject.FindGameObjectWithTag("Player");
}
return;
}
else if (SceneManager.GetActiveScene().buildIndex == 3)
{
prevLevel = SceneManager.GetActiveScene().buildIndex;
startingTransform.position = new Vector3(-891f, -57f, 332f);
SceneManager.LoadScene(toLevel);
if (playerObject == null)
{
playerObject = GameObject.FindGameObjectWithTag("Player");
}
return;
}
}
}
void OnLevelWasLoaded(int level)
{
if (playerObject == null)
{
playerObject = GameObject.FindGameObjectWithTag("Player");
}
playerObject.transform.position = startingTransform.position;
}
}
Yes, I know all of those FindGameObjectWithTag entries are costly, and switches might be more efficient, however I am not interested in pretty, just functional. This is all attempts to by-pass null refs and/or get it working on a basic level.
Does anyone have a simple script to change levels and specify where the player should start?
Mark
Comment