У меня установлен public string startPoint
в моем PlayerController.Я получаю доступ к этой строке из другого скрипта PortalController, и я устанавливаю и читаю ее, которая работает по большей части.
Моя проблема:
Я читаю Debug.Log(thePlayer.startPoint);
, когда первая стартовая сцена загружается из PortalController. Я могу установить startPoint
и загрузить вторую сцену, и я могу подтвердить это из Unity.панель, которая действительно установлена для PlayerController во второй сцене.Однако я не могу прочитать Debug.Log(thePlayer.startPoint);
из второй сцены.Он получается пустым и имеет длину 0. Нет ошибок.
PlayerController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
float speed = 2f;
Vector2 targetPos;
private Rigidbody2D myRigidbody;
private Animator myAnim;
private static bool playerExists;
public string startPoint;
private void Start()
{
startPoint = "startValue";
myRigidbody = GetComponent<Rigidbody2D>();
myAnim = GetComponent<Animator>();
if(!playerExists){
playerExists = true;
DontDestroyOnLoad(transform.gameObject);
} else {
Destroy(gameObject);
}
targetPos = transform.position;
}
PortalController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PortalController : MonoBehaviour {
[SerializeField]
private string sceneToLoad;
public string portalName;
public string spawnPortal;
private PlayerController thePlayer;
private CameraController theCamera;
// Use this for initialization
void Start () {
thePlayer = FindObjectOfType <PlayerController>();
//works in the first scene but not in the second
Debug.Log(thePlayer.startPoint);
if (thePlayer.startPoint == portalName)
{
thePlayer.transform.position = transform.position;
//Debug.Log(thePlayer.startPoint);
}
}
// Update is called once per frame
void Update () {
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.name == "Player"){
thePlayer.startPoint = spawnPortal;
SceneManager.LoadScene(sceneToLoad);
}
}
}
Объект Player не уничтожается между сценами исоздается новый портал gameObject.Похоже, что когда новый портал gameObject с PortalController создается во второй сцене, он не может получить доступ к строке startPoint
в PlayerController, который может иметь PortalController в сцене.
Если я загружу сцену два напрямую Debug.Log(thePlayer.startPoint);
работает отлично.Он только перестает переключаться