Unity C#,如何从另一个脚本调用函数来启动动画?

时间:2015-12-23 13:09:49

标签: c# unity3d

using UnityEngine; using System.Collections;

public class ClickToMoveScript : MonoBehaviour  
{
    public string Chopping = "Chopping";

    public void PlayWoodCuttingAnim()   
    {       
        //Play Woodcutting Animation        
        gameObject.GetComponent<Animation>().CrossFade (Chopping);  
    }     
}

继承我的另一个剧本

using UnityEngine; 
using System.Collections;

public class WoodCuttingScript: MonoBehaviour  
{
    ClickToMoveScript ClickToMove;

    void Start()
    {
        ClickToMove.PlayWoodCuttingAnim();  
    }  
}

http://i.stack.imgur.com/wt0mN.png

正如您可以看到上面的链接^我已经在动画组件中添加了动画。

我发现的另一件事是,如果我在ClickToMove脚本中调用PlayWoodCuttingAnim()函数它可以正常工作,但在另一个脚本中它可以工作。

错误控制台&gt; NullReferenceException:未将对象引用设置为对象的实例。

非常感谢任何帮助

5 个答案:

答案 0 :(得分:5)

嗯,很少有常见的方法可以这样做。

与从另一个脚本调用方法一样,您需要附加(到gameObject)脚本实例而不是简单的脚本实例。

你可以通过,

来做到
void Start()
    {
        ClickToMove = FindObjectOfType<ClickToMoveScript>();
        ClickToMove.PlayWoodCuttingAnim();  
    }  

答案 1 :(得分:2)

尝试使用.GetComponent<YourScriptName>.YourFunction()

您的功能将(我相信)必须公开才能在另一个脚本中使用:)

答案 2 :(得分:0)

您应该使用GetComponent来获取另一个脚本的实例。

    ClickToMove= gameObject.GetComponent("ClickToMoveScript") as ClickToMoveScript;
    ClickToMove.PlayWoodCuttingAnim();

答案 3 :(得分:0)

这是我使用的:

FindObjectOfType<Sliding_Door>().Open_Door(1);

您也可以使用:

Sliding_Door door = FindObjectOfType<Sliding_Door>();
door.Open_Door(1);

这是你的版本

FindObjectOfType<ClickToMoveScript>().PlayWoodCuttingAnim();

ClickToMoveScript init = FindObjectOfType<ClickToMoveScript>();
init.PlayWoodCuttingAnim();

答案 4 :(得分:-3)

您需要像ClickToMoveScript ClickToMove = new ClickToMoveScript();

那样创建一个新的clicktomove