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