zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    上篇用到的matcher函数
    lambdaj学习
    Redis高级应用——2
    Redis入门
    从gitee 下载代码到本地
    CSS中对图片(background)的一些设置心得总结
    nodejs 安装Ionic 和cordova
    Spring MVC内容协商机制详解
    基于Servlet3.0的编程式SpringMVC实例详解
    基于Junit的Spring集成测试方法
  • 原文地址:https://www.cnblogs.com/codingmylife/p/2883182.html
Copyright © 2011-2022 走看看