下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新生儿病例讨论
- 2024年昭通市教体系统引进专业技术人才考试真题
- 2024年安阳市公安机关招聘留置看护辅警考试真题
- 2025年上饶市广信区人民法院公开招聘劳务派遣工作人员14人备考题库有答案详解
- plc喷泉灯课程设计
- 2025 九年级语文下册写作选材典型性课件
- javaweb课程设计金融
- 2025四川达州市开江县回龙镇人民政府招聘交通协管公益性岗位1人考试重点题库及答案解析
- 2025甘肃兰州市公安局兰州新区分局招聘城镇公益性岗位人员5人考试核心试题及答案解析
- 2026广东中山市人民政府东区街道招聘事业单位教师10人(编制)备考核心试题附答案解析
- 新录用国家公务员任职定级审批表
- 2023年中证金融研究院事业单位招聘23人(共500题含答案解析)笔试必备资料历年高频考点试题摘选
- 医疗耗材配送保障能力及售后服务情况说明【八篇】
- 基于DSP的抢答器的设计与开发
- 风力发电和超级电容器的混合储能系统
- GB/T 4458.4-2003机械制图尺寸注法
- GB/T 17450-1998技术制图图线
- 通信学院通信电子线路期末考试试卷及答案
- 《好习惯成就一生》主题班会课件
- 调味料产品生产许可证审查细则
- 电力电缆基础知识专题培训课件
评论
0/150
提交评论