Unity не может прочитать строковую переменную из PlayerController - PullRequest
0 голосов
/ 22 ноября 2018

У меня установлен 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); работает отлично.Он только перестает переключаться

1 Ответ

0 голосов
/ 23 ноября 2018

Я только что попробовал ваш код с PlayerController и PortalController в 1-й сцене и Only PortalController во 2-й сцене, и на выходе получается то, что вы ожидаете, без ошибок и идеальное получение значения startPoint.

Но убедитесь, что при запускеПлеер 2-й сцены не сталкивается с portalController, иначе он вызовет triggerEnter в другой раз и установит значение SpawnPortal для PortalController 2-й сцены, которое может быть пустым, и поэтому вы получаете эту проблему.

Вы можете проверить это с помощьюотладка в triggerEnter ..

private void OnTriggerEnter2D(Collider2D collision)
{
    Debug.Log("OnTriggerEnter " + collision.gameObject.name);
    if (collision.gameObject.name == "Player")
    {
        thePlayer.startPoint = spawnPortal;
        SceneManager.LoadScene(sceneToLoad);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...