2017-10-23 6 views
0

프리 팹 개체에 첨부 된 내 스크립트에 이상한 문제가 있습니다. 나는이 문제를 탐색하려했지만 성공하지는 못했다.프리 팹 스크립트의 변수가 내 방식으로 변경되지 않습니다

아주 간단한 예를 설명 할 것입니다. 게임이 시작되면

Instantiate (playerPrefab, transform.position, Quaternion.identity); 

가 그래서, PlayerPrefab의 새로운 인스턴스를 만들 때 : 는 내가 명령을 통해 스크립트 PlayerSpawn하여 만든 조립식 PlayerPrefab 있습니다. 그런 다음

public class ShipClass : MonoBehaviour { 
    float speed; 
    int count; 

    void Start() { 
     speed = 0; 
     count = 0; 
     Debug.Log ("Start executed, speed = " + speed); 
    } 
    void Update() { 
     Debug.Log("speed in Update = " + speed); 
    } 
    public void Push() 
    { 
     speed = 50; 
     count++; 
     Debug.Log("speed in Push = " + speed); 
     Debug.Log("count = " + count); 
    } 
} 

나는 조립식 객체를 부착, OnClick 이벤트와 더불어, UI 버튼을 생성 : 조립식에 부착

(편의상 나는 간단한 스크립트 코드를 작성) 개인의 약간의 변수로 스크립트가 메서드 호출 Push().

동작이 매우 이상합니다. 처음 게임을 시작하면 Update() 및 Push() 메서드의 인쇄 속도는 0입니다. 그러나 UI에서 단추를 클릭하면 속도 Push() 메서드는 50이되지만 Update()는 여전히 0을 출력합니다. 두 개의 다른 변수가있는 것처럼 말입니다.

두 번째로 버튼을 누르면 카운트 변수가 증가합니다. 게임을 중단하고 다시 시작하면 Start 변수 (Start()가 실행 되어도 인쇄 로그가 표시 되더라도)가 Count 변수가 Start 메서드에서 재설정되지 않지만 이전 실행의 마지막 값부터 시작됩니다. 또한, 우리는 속도 변수와 같은 동작을합니다 : Update()에서는 Count가 0으로 유지되고, 두 개의 다른 "count"변수가있는 것처럼 Push() 수는 계속 증가합니다.

나는 그것이 prefab 객체로 인한 것임을 알고 있지만, 변수가 Update()에서 어떻게 다르게 동작하는지 직접 작성하지는 못했습니다.

도움을 미리 감사드립니다.

+0

스냅 사진이 도움이 될 수 있습니다. 첨부하십시오. 그리고 변수에 관해서는 float : speed = 50.0f; 속도 = 0.0f. – joreldraw

답변

1

지금 바로 ShipClass의 인스턴스를 Push이라고 부릅니다. 원하는 것은 ShipClass 인스턴스가 인스턴스화 된 오브젝트에 첨부 된 것입니다.

GameObject player = Instantiate(playerPrefab, transform.position, Quaternion.identity); 
ShipClass shipClass = player.GetComponent<ShipClass>(); 
button.onClick.AddListener(shipClass.Push); 

또한 검사기에서 버튼의 OnClick() 목록에서 프리 팹을 제거해야합니다.

+0

예, OP에 부착 부분이 포함되어 있으면 문제가있는 곳이 분명합니다. 그의 경우에는 객체를 인스턴스화 할 때 ShipClass 인스턴스 인스턴스를 두 개만 만듭니다 (버튼을 통해 액세스하는 구성 요소 ShipClass도 생성되며 두 번째 ShipClass를 새로 만들 때). Pluto가 맞습니다. 필요한 것은 프리폼을 인스턴스화 할 때 이미 생성 된 ShipClass 인스턴스에 대한 참조를 얻기 위해 GetComponent 메소드를 사용하는 것입니다. –