在另一个脚本中运行函数/脚本

时间:2016-09-17 13:32:31

标签: c# unity3d

我很难尝试从脚本外部访问和调用脚本的功能。

-----这是一个附加到动画精灵的c#脚本

    public class example : MonoBehaviour {
    void RunZebra() {
            Zebra other = GetComponent<Zebra>();
            other.RunIt();
        }
     }

------斑马脚本附加到精灵动画

    public class Zebra : MonoBehaviour {
        public void RunIt() {
            // action starting animation

         }
     }

但是由于某些原因它没有执行?

我需要访问并设置ScriptName的变量,以便更改动画状态。

任何帮助,我都会是一个快乐的人。

3 个答案:

答案 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").GetComp‌​onent<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 methodGameObject.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; - 你真的帮了!

干杯