博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3D游戏中对象间常见的交互方式
阅读量:4636 次
发布时间:2019-06-09

本文共 873 字,大约阅读时间需要 2 分钟。

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

  • 碰撞检测(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

转载于:https://www.cnblogs.com/codingmylife/archive/2013/01/30/2883182.html

你可能感兴趣的文章
Python3-Cookbook总结 - 第一章:数据结构和算法
查看>>
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Android初学第36天
查看>>
Some configure
查看>>
.net core 中的[FromBody]
查看>>
json_encode时中文编码转正常状态
查看>>
流量调整和限流技术 【转载】
查看>>
Axure 全局辅助线(转)
查看>>
正由另一进程使用,因此该进程无法访问此文件。
查看>>
27-THREE.JS 平面
查看>>
以太网基础(转)
查看>>
tp5+linux+apache php7.1.30环境下,上传图片报错:mkdir():permission denied
查看>>
单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器
查看>>
dp cf 20190615
查看>>
1 线性空间
查看>>
MVC 中的 ViewModel
查看>>
机器学习
查看>>
begin.lydsy 入门OJ题库:1104:纯粹合数
查看>>