目录
消息调用--SendMessage 以消息的形式来调用另一个脚本组件中的函数
在游戏中,我们通常会需要一个主控,来控制我们游戏整体。因此,我们需要调用别的节点、脚本中的组件及消息。
获取节点
以主控脚本获取背景音乐节点为例
1.在主控脚本设置变量:public GameObject bgmNode;
2.将节点拖拽至Bgm Node处
如此,相当于变量bgmNode被赋值为背景音乐,在主控脚本以bgmNode对节点进行控制(补充:变量常用驼峰命名法。例:在脚本中为bgmNode,在Inspector中显示为Bgm Node)
引用其它节点的组件
以主控脚本访问别的脚本,实现播放音乐为例
方法一:以节点为桥梁
1.先获取节点,上面已讲述。
2.再在节点下找脚本
AudioSource audio =bgmNode.Getcomponent<AudioSource>();
方法二:直接获取组件(常用)
1.在主控脚本设置变量:public AudioSource bgm;
2.将节点拖拽至Bgm处,Unity自动获取组件
消息调用--SendMessage 以消息的形式来调用另一个脚本组件中的函数
1.找到目标节点
public GameObject target;
2.向目标节点发送“消息”
target.SendMessage(methodName,value);
其中,methodName为函数名,要用""括起来
SendMessage内部执行(反射机制)
1.找到target节点下所有的组件
2.在组件下寻找methodName这个函数
若存在,则调用。若不存在,则继续查找。若最终无法匹配,则报错。
并不是消息,只是同步调用(查:消息、同步调用、反射机制)
实例:控制无人机起降
1.将RotateLogic脚本挂载在旋翼上
2.在游戏主控中调用RotateLogic脚本
public class MainLogic : MonoBehiviour
{
public RotateLogic rotateLogic;
void start()
{
Application.targetFrameRate = 60;
rotateLogic.DoRotate();
}
}
3.将FlyLogic脚本挂载在无人机上
4.在游戏主控中调用FlyLogic脚本
public class MainLogic : MonoBehiviour
{
public RotateLogic rotateLogic;
public FlyLogic flyLogic;
void start()
{
Application.targetFrameRate = 60;
rotateLogic.DoRotate();
}
void Update()
{
if(Input.GetKeyDown(KeyCode.W))
flyLogic.Fly();
if(Input.GetKeyDown(KeyCode.S))
flyLogic.Land();
}
}