我很难尝试从脚本外部访问和调用脚本的功能。
-----这是一个附加到动画精灵的c#脚本
public class example : MonoBehaviour {
void RunZebra() {
Zebra other = GetComponent<Zebra>();
other.RunIt();
}
}
------斑马脚本附加到精灵动画
public class Zebra : MonoBehaviour {
public void RunIt() {
// action starting animation
}
}
但是由于某些原因它没有执行?
我需要访问并设置ScriptName的变量,以便更改动画状态。
任何帮助,我都会是一个快乐的人。
答案 0 :(得分:1)
如果你问题中的RunZebra
脚本是完整的脚本,那么你就会遗漏一些重要内容。
必须从某个地方调用RunZebra
函数。来自Start()
,Update()
函数或其他脚本。
public class example : MonoBehaviour {
void Start()
{
RunZebra();
}
void RunZebra() {
Zebra other = GetComponent<Zebra>();
other.RunIt();
}
}
如果这不能解决您的问题并且Debug.Log
仍未显示,那么您只是忘记将example
脚本附加到GameObject。因此,将example
脚本附加到 enabled
的GameObject。
修改强>:
对于新的null错误,请替换
GetComponent<Zebra>();
带
Zebra other = GameObject.Find("NameOfGameObjectZebraIsAttachedTo").GetComponent<Zebra>();
答案 1 :(得分:0)
我想我现在遇到了问题。因此,您将一些名为example
的脚本附加到某些GameObject man
以及一个或多个附加了脚本Zebra
的GameObject。您希望通过Zebra.RunIt
对象的Zebra
方法为每个RunZebra
对象执行man
方法。
要实现这一点,您必须调整example
脚本。
我建议你在Zebra
游戏对象附带的example
脚本中使用公共数组的man
变量。然后,您可以通过Unity3d编辑器UI将每个Zebra
GameObject拖放到man
对象的example
脚本的数组属性字段中。 (我将其命名为ZebraGameObject
。您可能必须先在UI中将Size
属性的ZebraGameObject
属性设置为Zebra
个对象的数量。
然后Unity3d引擎自动从先前设置的对象获取Zebra
脚本的每个example
脚本的引用,以便可以调用RunIt
方法。
假设Zebra
中的代码正确,// action starting animation
脚本无需更改。
这是example
脚本,需要进行必要的修改。
using UnityEngine;
public class example : MonoBehaviour {
public Zebra[] ZebraGameObject = null;
void RunZebra() {
if (ZebraGameObject != null){
for (int i=0; i<ZebraGameObject.Length; i++){
ZebraGameObject[i].RunIt();
}
}
}
}
如果Zebra
对象没有动态生成但是在设计时创建,那么该方法很有用。如果您需要处理动态创建的Zebra
个对象,那么您可能需要查看GameObject.FindObjectsOfType
method或GameObject.FindObjectsOfTypeAll
method。
答案 2 :(得分:0)
感谢帮助!!!
我做了以下设置Zebra的Var(因此它应该设置动画):
GameObject objectIs = GameObject.Find("Zebra");
//print (objectIs.name);
Animator zanimation;
zanimation = objectIs.GetComponent<Animator> ();
zanimation.SetBool("zebraLaugh", true);
这就是诀窍。谢谢&#34;程序员&#34; - 你真的帮了!
干杯