3D游戏中对象间常见的交互方式

      游戏中经常需要玩家与环境互动,比如开门动作、射击动作等。常用的互动方式有三种,碰撞检测、光线投射和碰撞检测触发器。以开门这个简单动作为例,

  • 碰撞检测(Collision detection)

image

当玩家与门的碰撞体发生物理碰撞时触发开门动画。若门的碰撞体与门一样大,这会导致玩家贴着门时门才会打开,感觉门是被撞开的。若门的碰撞体比门大,使得玩家与看不见的碰撞体发生物理碰撞,就像撞到了透明的箱子。

  • 光线投射(Ray casting)

image

在玩家面朝的方向绘制一个透明的投射线,当这个投射线与门交错时触发开门动画。但这样必须玩家面向门的时候门才会打开。

  • 碰撞检测触发器(Trigger collision detection)

image

在门外额外增加一个矩形碰撞体并设定为触发器,这样当玩家在门外触发(并非发生物理碰撞)到该碰撞体时触发开门动画。但这样还需要一个与门一样大的碰撞体来处理飞行物体等实际碰撞到门上的反弹效果。

  • 总结

玩家对象(Character Controller)使用void OnControllerColliderHit(ControllerColliderHit hit)检测与其它物体的碰撞;在玩家对象的Update()中使用Physics.Raycast(transform.position, transform.forward, out hit, 3)来以玩家为起点、玩家朝向为方向投射一个3米长的线,线与任何碰撞体的碰撞结果存放在hit中;碰撞检测触发器使用void OnTriggerEnter(Collider col)来检测碰撞体的碰撞或交错。普通物体碰撞检测使用void OnCollisionEnter(Collision col)

 

参考文献:Unity 3.x Game Development Essentials –> Chapter 5: Interactions

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值