2014-04-08 2 views

답변

0

당신은에 액세스 할 수 있습니다 : 나는 HealthBarGUI1이 MonoBehaviour 스크립트의 이름입니다 있으리라 믿고있어

HealthBarGUI1.currentLife 

.

당신의 변수가 정적 아니고,이 스크립트는이 같은 것을 할 수있는 같은 게임 오브젝트에있는 경우 : currentLife 플레이어보다 더 관련이 있기 때문에,

gameObject.GetComponent<HealthBarGUI1>().varname; 
+0

그들이 두 개의 분리 된 객체에있는 경우? 사용할 것인가 : gameObject.GetComponent .varname; – MickyD47

+0

var가 정적 인 경우 첫 번째 변형을 사용할 수 있습니다. var는 정적이 아니며 두 번째 게임 개체에 대한 참조를 추가해야합니다. 그러면 firstGameObject.GetComponent () .varname –

8

당신은 이런 일을 할 수를 to gui :

class Player { 

    private int currentLife = 100; 

    public int CurrentLife { 
    get { return currentLife; } 
    set { currentLife = value; } 
    } 

} 

그리고 HealthBar는 두 가지 방법으로 currentLife에 액세스 할 수 있습니다.

1) GameObject 유형의 공용 변수를 사용합니다. 여기에서 플레이어를 계층 구조에서 드래그하여 속성의 스크립트 구성 요소에있는 새 필드로 드래그하십시오.

class HealthBarGUI1 { 

    public GameObject player; 
    private Player playerScript; 

    void Start() { 
    playerScript = (Player)player.GetComponent(typeof(Player)); 
    Debug.Log(playerscript.CurrentLife); 
    } 

} 

2) 자동 검색은 찾기를 통해 수행됩니다. 조금 느리지 만 너무 자주 사용하지 않는다면 괜찮습니다.

플레이어 나 다른 생물의 currentLife 변수를 정적으로 만들지 않겠습니다. 그것은 그러한 대상의 모든 경우가 동일한 currentLife를 공유한다는 것을 의미합니다. 하지만 그들은 모두 자신의 삶의 가치를 지녔다고 생각합니다. 맞죠?

대부분의 변수는 보안을 유지하고 단순하게하기 위해 개인용이어야합니다. 그런 다음 getter 및 setter 메서드를 사용하여 액세스 할 수있게 만들 수 있습니다.

내가 맨위로 의미 한 바는, 당신도 매우 자연스러운 방법으로 물건을 그룹화하려는 것입니다. 플레이어는 평생 가치가 있습니까? 플레이어 클래스에 글을 씁시다! 나중에 다른 개체에 대해 값에 액세스 할 수있게 만들 수 있습니다.

출처 :

https://www.youtube.com/watch?v=46ZjAwBF2T8 http://docs.unity3d.com/Documentation/ScriptReference/GameObject.Find.html http://docs.unity3d.com/Documentation/ScriptReference/GameObject.GetComponent.html

+0

Entity-Component-System 패턴을 사용하는 것도 고려해 볼 가치가 있습니다. 이것으로 Player 클래스를 전혀 가지지 않고 Player가 구성하는 속성 (또는 Unity3D 용어의 구성 요소)을 얻을 수 있습니다. 예를 들어 상태 구성 요소. 이것은 또한 적과 파괴 가능한 물건에 재사용 될 수 있습니다. https://en.wikipedia.org/wiki/Entity%E2%80%93component%E2%80%93system – Wipster

관련 문제