跨节点、脚本调用组件及函数--以控制飞机为例

目录

获取节点

引用其它节点的组件

方法一:以节点为桥梁

方法二:直接获取组件(常用)

消息调用--SendMessage 以消息的形式来调用另一个脚本组件中的函数

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();
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值