下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
unity画球⾯_Unity实现球⾯⾏⾛0x0.引⾔在⼀些游戏内的星球体积是很⼩的,但是⼩⼩的星球仍然有引⼒。游戏内的物体是可以贴在其表⾯上的,如同⽂学作品《⼩王⼦》中所形容的⼩⼩星球那样。图⽚来源点击此处对于静态物体(如上图的⼩树苗⼩花等)⽽⾔,可以将其直接放置在⼩⼩星球上的固定位置,但是对于动态可移动的物体呢?如果需要实现动态的物体沿着球⾯⾏⾛呢?注意到上图的星球并⾮⼀个规则的球体,其存在凸起等。那么如何在Unity中实现这样的效果?本⽂介绍如何使⽤Unity制作⼀个球⾯⾏⾛的效果,其最终效果如下图所⽰:0x1.思路要实现这样的效果,其思路并⾮是使得需要绕⾯⾏⾛的物体单纯去计算其绕某⼀个点旋转。因为其表⾯并⾮⼀个规则球体。那么如何着⼿解决这个问题?思考⼀下现实中物体是如何贴在星球表⾯的呢?其主要原因便是重⼒。在Unity的物理引擎中对重⼒是实现了的,并且可以通过Rigidbody组件去修改其是否受重⼒影响。对于重⼒的整体设置则可以在ProjectSetting的Physics选项卡中找到。但是Unity的重⼒⽅向默认是朝向世界坐标-y轴⽅向的,仅仅调节此处的设置是并不能满⾜需求的。那么从这个地⽅思考开去,我们就能得到其解决思路:模拟重⼒。0x2.编码实现对于重⼒模拟,仍然通过Rigidbody组件来实现,⾸先需要将上⾯默认的useGravity选项取消防⽌物体受到默认重⼒设置的影响。然后需要确定⼀个重⼒的⽅向,这⾥可以通过对场景中某个物体的位置引⽤来计算重⼒⽅向,也就是说,加⼊场景中存在⼀个物体作为引⼒中⼼,它对其他物体产⽣重⼒影响,其好处是可以通过调整其位置来动态更改引⼒中⼼,也可以通过更换引⽤来实现。在这种⽅式下,重⼒⽅向为从物体的位置到引⼒中⼼位置的⽅向向量。如下图中黄⾊箭头所⽰:这⾥的实现⽅式⽐较简单,其代码也就⼀句话://gravityCenter为引⼒中⼼Vector3gravityDir=(transform.position-gravityCenter.position).normalized;但是对于其物体如何“站⽴”的问题,可以分为两种计算⽅式,其不同的计算⽅式导致的效果也是不⼀样的。其⼀是可以将物体站⽴的⽅向设置为上图中重⼒⽅向的反⽅向。这样粗略看上去的效果是没有问题的,但是对于⼀些细节还是会有错误。如果物体站⽴在⼀个斜坡上,这样的物体站⽴的朝向会出现错误,会出现下图的结果:这样是不太符合常理的,虽然现实⽣活中是通过摩擦⼒重⼒等等各种⼒的相互作⽤导致我们站在斜坡上,但是很明显不应该是这样的站⽴⽅向。这种⽅向的编码实现也是⾮常简单的:transform.rotation=Quaternion.FromToRotation(transform.up,gravityDir)*transform.rotation;另外⼀种计算⽅式则⽐较符合现实情况,站⽴⽅向朝向脚下地⾯的法线⽅向,也就是下图中橙⾊箭头⽅向。要实现这样的站⽴⽅向需要⽤到碰撞检测,需要获取到脚下的⽅向与碰撞体的碰撞点,然后对其进⾏法线⽅向的计算,好在Unity中是直接提供了碰撞点的,我们可以在OnCollisionEnter/OnCollisionStay⽅法中对其进⾏计算。privatevoidOnCollisionEnter(Collisioncollision){transform.rotation=Quaternion.FromToRotation(transform.up,//这⾥只取第⼀个碰撞点,如果没有穿透,⼀般只有⼀个碰撞点,但是如果是墙⾓等情况还是要分开处理collision.contacts[0].normal)*transform.rotation;}这样处理的⽅式也是可以的,但是在凹凸不平的表⾯⾏⾛时,可能出现⾮常⿁畜的情况。故需要对其碰撞⾓度做出⼀定限制,在⾓度未达到某⼀个阈值的时候不需要进⾏法线站⽴。其编码可以改成如下形式:privatevoidOnCollisionEnter(Collisioncollision){floatangle=Vector3.Angle(transform.up,collision.contacts[0].normal);if(angle>45f)transform.rotation=Quaternion.FromToRotation(transform.up,collision.contacts[0].normal)*transform.rotation;elsetransform.rotation=Quaternion.FromToRotation(transform.up,(transform.position-gravityCenter.position).normalized)*transform.rotation;}这样做在⼀定程度上缓解了⿁畜问题,但是距离“好⽤”的程度还差不少,此处仅提供
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能制造背景下管道热熔焊技术发展及教学实践-高职焊接技术与自动化专业三年级教案
- 沪科版初中数学七年级下册《平行线的判定》顶尖教案
- 沪教版初中英语七年级下册 Unit 8 文化之趣兴趣之航-探索文化身份与个人爱好融合的教学设计
- 2025年本溪市溪湖区网格员招聘考试试题及答案解析
- 初中三年级英语 Unit 6 TV Programmes 跨学科视域下的媒介素养与语言能力整合教学设计
- 2026年大庆市萨尔图区网格员招聘考试参考试题及答案解析
- 2025年珠海市香洲区街道办人员招聘笔试试题及答案解析
- 2026年广东省网格员招聘考试备考试题及答案解析
- 2026年咸阳市杨陵区网格员招聘考试参考试题及答案解析
- 2026年辽源市西安区网格员招聘考试模拟试题及答案解析
- 少突胶质瘤的护理
- 雨污分流工程竣工验收汇报
- 基坑沟槽开挖安全培训课件
- 保安安全培训资料大全课件
- 2025湖北省高考生物试卷(含解析)
- 同居协议分手协议书模板
- 窗口人员礼仪培训课件
- 期中自主检测卷(1-4单元)(试题)(含答案)2024-2025学年一年级下册数学人教版
- 工业厂房施工环境保护体系与措施
- 小学生公安课件
- 辽宁劳务派遣管理办法
评论
0/150
提交评论