Unity3D 解决检测碰撞某类物体的一种方法

目录

前言

启发

实现前的失败案例

实现

总结

思考 

后言


前言

        2022年十月份报名参加了Unity和Bilibili联合举办的NewbiesJam游戏开发挑战。在处理不同物体之间的碰撞逻辑时,由于自身知识浅薄,选择了使用Tag去判断触碰了哪一个物体,这就导致了随着物体类型的增加,不单是Tag,写在OnColliderEnter、OnColliderExit、OnColliderStay等等等等方法里面的语句也会越来越庞大臃肿,并且一旦物体的Tag没有进行标识,编写的碰撞逻辑就会失效。

        在学习 《Unity3D 网络游戏实战(第2版)》这一本书时,Server在分发接收到的网络消息时,会根据消息的协议名,通过反射的方式从MsgHandler获取与协议名同名的方法,在自定义需要传入的object[]类型的参数列表parameters后,通过Invoke(null,parameters)的方式传入参数并且执行方法。

服务端

NetManager分发消息

public class NetManager
{

    public static void ReadClient()
    {
        ....

        //假设收到的协议消息
        MsgBase msg = new MsgMove();

        //从MsgHandler获取和协议同名的方法
        MethodInfo mi = typeof(MsgHandler).GetMethod(msg.protoName);

        //定义需要传入的参数列表
        object[] o = {state,msg}

        //执行同名方法,并传入参数
        mi?.Invoke(null,o)

        ....
    }

}

MsgHandler消息处理

public partial class MsgHandler
{
    public static void MsgMove(SocketState state,MsgBase msgBase)
    {
        //向下转型还原为MsgMove类型
        MsgMove msg = (MsgMove)msgBase;

        //通过msg的内容执行其他逻辑
        ........
    }
}

启发

        在检测物体之间的碰撞时,一般都是两个挂载有脚本的物体进行检测,那么是否可以在OnCollisionEnter方法中,一旦某个物体进入了Collider&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值