• 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

  • 相关阅读:
    vue脚手架搭建项目
    springmvc上传下载文件
    vue双向绑定(模型变化,视图变化,反之亦然)
    android中广告轮播图总结
    studio插件
    系统图片uri的问题
    android
    mysql 外键(FOREIGN KEY)使用介绍
    不用加减乘除来做加法的题目
    Comparable接口实现和使用方法介绍
  • 原文地址:https://www.cnblogs.com/codingmylife/p/2883182.html
Copyright © 2020-2023  润新知