2014-03-06 55 views
0

在Unity3D中,我有一个脚本将变量'eaten'添加为组件。使用AddComponent调用自定义属性

using UnityEngine; 
[AddComponentMenu("My game/IsEaten")] 
public class IsEaten : MonoBehaviour 
{ 
    public bool Eaten; 
} 

耶!然后我可以添加另一个脚本来访问'吃过'

using UnityEngine; 
using System.Collections; 

public class Test : MonoBehaviour 
{ 
    private Eaten someScript; 

    // Use this for initialization 
    void Start() 
    { 
     someScript = GetComponent<IsEaten>(); 
     bool temp = someScript.Eaten; 
     print(temp); // false 
    } 
} 

这工作正常。从另一个脚本中用点符号访问变量需要做些什么?即

if (myCube.eaten == true) 
{ 
    // do something 
} 
+0

myCube的类型是什么?它是一个游戏对象还是一个脚本实例? – David

+0

我真的不知道这里的问题。您刚刚演示了如何访问它。哪里有问题? – Bart

+0

#David myCube是一个gameObject(一个多维数据集) –

回答

0

您知道,在Unity中,很少创建将某个属性添加到某个对象的整个脚本。通常的做法是将脚本视为“组件”(事实上它们就是它们)。让我来解释一下,一个组件是一段代码,它可以为你的动画添加某些功能,比如动画能力或者物理定律。所以,也许,最好是改革你的IsEaten类来形成一个真正的组件,比如Pickup(我假设你需要Eaten属性来获取某种类型的东西),这些属性可以被玩家吃掉,或者一些东西。

// You will actually need to attach a collider (and check the 'IsTrigger' checkbox on it) to your GameObject 
// Then this method will be called whenewer some game object with a collider (e. g. player, npc's, monsters) will enter the trigger of this object 
void OnTriggerEnter(Collider other) 
{ 
    // Check whether this object was eaten before and if the actor entering our trigger is actually the player 
    if (!Eaten && other.tag == "Player") 
    { 
     // Make shure that we will not get eaten twice 
     Eaten = true; 
     // Apply some effect to the player that has devoured us 
     other.GetComponent<Player>().AddHp(25); 
    } 
} 

除此之外,我个人以为,这让你的出路,以仅启用一个小甜语法不值得冒这个险,但是,如果你提供的东西,你实际上是想一些见解落实,我可能会尝试帮助你吧:)

0

一个方式,它可能会使用获取/设置做:

using UnityEngine; 
using System.Collections; 

public class Test : MonoBehaviour 
{ 


    private Eaten someScript; 

    // start new! 
    public bool eaten 
    { 

     get 
     { 
      return someScript.Eaten; 
     } 

     set 
     { 
      someScript.Eaten = value; 
     } 
    } 
    // end new! 

    // Use this for initialization 
    void Start() 
    { 
     someScript = GetComponent<IsEaten>(); 
     bool temp = someScript.Eaten; 
     print(temp); // false 
    } 
} 

然后你就可以访问测试类属性:

Test t = GetComponent<Test>(); 
t.eaten = true; 

ath。