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

Unity C#,如何从另一个脚本调用函数来启动动画?,c#,unity3d,C#,Unity3d,我已经在动画组件中添加了动画 我发现的另一件事是,如果我在ClickToMove脚本中调用PlayWoodCuttingAnim()函数,它可以正常工作,但在另一个脚本中它不工作 错误控制台>NullReferenceException:对象引用未设置为对象的实例 非常感谢任何帮助您需要创建一个新的clicktomove距离,如ClickToMoveScript clicktomove=new ClickToMoveScript()尝试使用.GetComponent.YourFunction()

我已经在动画组件中添加了动画

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

错误控制台>NullReferenceException:对象引用未设置为对象的实例


非常感谢任何帮助

您需要创建一个新的clicktomove距离,如
ClickToMoveScript clicktomove=new ClickToMoveScript()

尝试使用
.GetComponent.YourFunction()


您的函数(我相信)必须是公共的,才能在另一个脚本中使用:)

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

using UnityEngine; 
using System.Collections;

public class WoodCuttingScript: MonoBehaviour  
{
    ClickToMoveScript ClickToMove;

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

好吧,有几个常用的方法可以做到这一点

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

你可以通过

    ClickToMove= gameObject.GetComponent("ClickToMoveScript") as ClickToMoveScript;
    ClickToMove.PlayWoodCuttingAnim();
void Start()
{
单击ToMove=FindObjectOfType();
单击移动。播放木刻动画();
}  
以下是我使用的:

void Start()
{
    ClickToMove = FindObjectOfType<ClickToMoveScript>();
    ClickToMove.PlayWoodCuttingAnim();  
}  
FindObjectOfType()。打开门(1);
您还可以使用:

FindObjectOfType<Sliding_Door>().Open_Door(1);
推拉门=FindObjectOfType();
门。打开门(1);
这是你的版本

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

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

您是否指定了ClickToMove from inspector?在Unity中执行此操作的标准方法是1。使您的ClickToMove变量公开,2。在Unity的层次结构中选择具有WoodCuttingScript的对象,然后在inspector的ClickToMove插槽中放置具有ClickToMoveScript的对象。(始终选中WoodCuttingScript,不要选择ClickToMoveScript)是否
ClickToMoveScript
附加到另一个游戏对象?我不久前没有使用Unity3d,但它看起来只是一个对象引用问题。尝试执行
ClickToMove=newclicktomovescript()
之前单击移动。播放木刻动画()或将ClickToMoveScript附加到游戏对象,然后执行
gameObject.GetComponent().PlayWoodCuttingAnim()改为
单击移动。播放木刻动画()这不是真的,你不能恢复MonoBehavior。第二个是委托,如果你想玩委托,请告诉我只有一个ClickToMoveScript.Yups时才有效。如果有多个,则
ClickToMoveScript[]ClickToMoveArray=FindObjectsOfType()然后调用
foreach(单击tomoveray中的ClickToMoveScript c)c.PlayWoodCuttingAnim()谢谢你的帮助code@HamzaHasan这就像一个符咒:)
Sliding_Door door = FindObjectOfType<Sliding_Door>();
door.Open_Door(1);
FindObjectOfType<ClickToMoveScript>().PlayWoodCuttingAnim();
ClickToMoveScript init = FindObjectOfType<ClickToMoveScript>();
init.PlayWoodCuttingAnim();