我有一个MarkBehaviour
类,其中包含一个名为markCount
的属性。根据{{1}},我将在markCount
函数中选择精灵。
但是当我从其他行为类调用Update()
函数时,我在下面的2个函数中记录了setMark()
属性,但markCount
函数上的markCount
属性是没有改变。它仅在Update()
函数中更改。
setMark()
如何更改?
调用public class MarkBehaviour : MonoBehaviour {
public int markCount;
void Start(){
markCount = 0;
}
void Update () {
Debug.Log ("mark setted from other class" + markCount);
int cal = calculate (markCount);
gameObject.GetComponent<SpriteRenderer>().sprite = numberSpriteArray[cal];
}
public void setMark(int mark){
Debug.Log ("manual set mark from other class, set " + markCount);
markCount = mark;
}
}
函数的其他类的代码:
setMark()
答案 0 :(得分:2)
当你运行这行代码时:
MarkBehaviour mBS = (MarkBehaviour) mark.GetComponent<MarkBehaviour>();
您实际上是这样说,请在预制件mark
中找到MarkBehaviour。这不起作用,因为预制件尚未实例化,只有预制件的克隆。
你有两种很好的方法可以做到这一点。
您可以实例化对象,然后SendMessage:
GameObject g = Instantiate(mark, new Vector3(2.3f,-0.5f,0), gameObject.transform.localRotation) as GameObject;
g.SendMessage("setMark", markCount);
注意我保留了对实例化对象的引用g
,以便我可以在其上使用SendMessage。
您可以存储对附加到GameObject的Component MarkBehaviour
的引用。
private MarkBehaviour markObj;
GameObject g = Instantiate(mark, new Vector3(2.3f,-0.5f,0), gameObject.transform.localRotation) as GameObject;
获得GameObject g
的引用后,您可以使用GetComponent()
函数。
markObj = g.GetComponent<MarkBehaviour>();
markObj.setMark(markCount);
答案 1 :(得分:1)
我认为问题在于您没有创建对标记实例化的正确引用。
替换这个:
Instantiate (mark, new Vector3(2.3f,-0.5f,0), gameObject.transform.localRotation);
用这个:
mark = Instantiate (mark, new Vector3(2.3f,-0.5f,0), gameObject.transform.localRotation) as GameObject;