Unity C # 스크립트에는 게임 변수가 저장된 싱글 톤 게임 컨트롤러 개체가 있지만 멤버 함수에서 액세스 할 때 이상한 동작이 발생합니다. 현재 값이 아닌 초기화 된 값을 인쇄합니다. 그러나 업데이트 기능에서는 각 프레임마다 올바른 값을 인쇄합니다. 아래에 수업을 요약했습니다. 컨트롤러 클래스에는 자체에 대한 정적 참조가 있습니다. 추가 세부 정보가 필요하면 요청할 수 있습니다. 저는 C # 및 Unity를 처음 사용하므로 명확한 답변이 부족할 수 있습니다.
감사
public class controller : MonoBehaviour {
public int[] star = new int[64];
void Start(){ /* calls another function to set 0 for each star index */ }
void Update(){ // during gameplay star[0] gets a value of 1
print(star[0]); // prints correct value which is 1
}
public void checkValue(){
print(star[0]); // prints 0 incorrectly which should be 1
}
}
나는 약간의 예를 들었습니다. 버튼과 빈 게임 오브젝트를 만들었습니다 GameController
. 이 코드를 다음에 추가했습니다 GameController
.
using UnityEngine;
using System.Collections;
public class GameController : MonoBehaviour {
public static GameController instance;
[System.NonSerialized] public int[] star = new int[64];
private void Awake()
{
if(instance == null)
instance = this;
else if(instance != this)
Destroy(gameObject);
DontDestroyOnLoad(gameObject);
}
private void Start()
{
StartCoroutine(SetAllTo(1));
}
// for simulating some changes during the game
private IEnumerator SetAllTo(int value)
{
yield return new WaitForSeconds(2.0f);
for(int i = 0; i < star.Length; i++)
star[i] = value;
Debug.Log("Setting done");
}
public void PrintFirst()
{
Debug.Log(star[0]);
}
}
이제 OnClick
버튼에 이벤트를 추가 하고 GameController
게임 오브젝트를 슬롯으로 드래그 한 다음 PrintFirst
.
게임을 시작하고 Coroutine 로그 이전에 한 번, 이후에 한 번 버튼을 클릭하면 콘솔이 다음을 제공합니다.
0
Setting Done
1
편집 : 이벤트에
대한 게임 오브젝트 는 장면에 있어야하며 자산 폴더의 프리 팹일 수 없습니다.OnClick
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다