为鼠标点击的位置增加一个光圈需求如下:
4.Unity3D里的碰撞需要注意什么?
然后在全局空GameObject(空的对象不做任何逻辑处理,只为了挂接全局的脚本--不依附于任何Object的脚本)中增加一个鼠标相关控制脚本加上前面所说过的改变鼠标指针UI操作,整个脚本如下:
该纹理动画会旋转跟游戏中一样。
针对上面第4点--筛选待测物体来说一下U3D中Layer的用法
最后修改角色控制脚本,在其中获得鼠标控制脚本的对象:
最后修改角色控制脚本在其中获得鼠标控制脚夲的对象:
鼠标右键点击地面,射线与地面的交点处出现一个光圈(纹理动画)
实时得出角色的移动方向向量,在两点之间做线性插值計算移动的同时也要播放动画。
然后在鼠标右键点击地面后进入STATE_LERPWALK状态,同时调用鼠标控制脚本中的函数CreateDestinationTex在指定 给位置创建一个光圈对潒而当不在STATE_LERPWALK状态下时,调用鼠标控制脚本中的函数DestroyDestinationTex删除该对 象
光圈要随着地形的起伏改变自己的朝向,这样自然
通过传进来的prefab(transform类型),将光圈点放置在指定位置并且根据射线与地形交点的面片的法线,调整这个光圈的朝向还有一个在创建时要注意的是,将光圈嘚坐标沿着Y轴正向提高了一个数值是为了避免纹理动画与地面纹理重合造成撕裂现象。
U3D中的Layer可以简单地理解为一个集合所有的GameObject都可以設置Layer,且只能设置一个Layer
这个过程是一个比较复杂的过程,可以通过两种办法一种是做一种转向机制,先移动监测点(我自己起的意思是一个前进向量和一个向下的碰撞向量的假 象交点),监测到碰撞了就将角色转向,再次监测直到碰撞不到,向当前挪一步再重複刚才的操作,直到绕过这个障碍物;另一种是俗称的AD算法需要预 先准备好一个二维图来标记哪里可以走,哪里不可以走并设置权值,以便于计算最短路径
如果想取“除了XXXLayer”的都显示,则可以用取反操作
从此,该GameObject就属于这个Layer集合中的一员了
然后在鼠标右键点击地媔后,进入STATE_LERPWALK状态同时调用鼠标控制脚本中的函数CreateDestinationTex在指定 给位置创建一个光圈对象,而当不在STATE_LERPWALK状态下时调用鼠标控制脚本中的函数DestroyDestinationTex删除該对 象。
玩家移动到该光圈处或者进入了其他状态,光圈消失
首先需要解决几个问题:
这个脚本要完成的工作是:
3.两点之间有障碍怎麼办?
玩家点击新的目标点原目标点光圈消失。
1.如何取得目标地点
射线的碰撞检测是比较耗费CPU资源的,推荐的是尽量少用比如当做場景内物体的鼠标拾取时,对备选对象队列进行筛选后再去逐一做检测。 中也是一样只不过没有提供像DX中提供的那种API,无法用自定义嘚结构去决定对哪些对象进行射线碰撞所以要引入Layer的概念,具
需要通过鼠标当前位置的屏幕二维坐标逆矩阵变换到世界空间下,做从攝像机到这个点的射线射线与地面mesh进行碰撞检测,获得一个交点就是目标点。
最后将所有的可能按位或操作就得出所有需要做射线碰撞的GameObject。
加载中请稍候......