一、实现步骤
1.在Input脚本中新增一个LockOn信号,显然它是Onpressed信号
2.当LockOn信号为true时,调用cameraController中的LockUpLock方法,主要实现逻辑放在该方法中
3.采用Physics.overlapbox()方法,在玩家正前方产生一个box碰撞器,返回一个collider数组
获得返回的数组colliders
4.构建一个LockTarget类,将当前的Target设置为该类的一个实例
5. 如果colliders数组不为空且将第一个获取到的物体不为当前target,则设置该物体为当前的target
6.在相机旋转的位置新增bool判断,当lockstate==true时,应当使相机偏转朝向物体,直接构建一个向量由target的position减去player的position,然后让player的朝向这个方向即可,这是修改后的相机偏转代码
7.构建一个UI红点,用来标记target,这个实现方法重点在于如何将世界坐标系下的位置信息转化为UI的坐标位置信息,可以通过方法camera.WorldToScreenPoint()
同时,这里还实现了当距离超过10之后,自动失去目标。至此,战斗注视大致介绍完了。
二、几点补充
1.由于在战斗注视中,视角属于锁定状态,所以仅仅通过1D混合树制作的动画就会捉襟见肘,所以需要改为2D混合树,并增加right动画参数,当lockon时起作用
2.在实现战斗注视过程中封装了一个Target类,专门用来保存物体及其半高,在collider.bounds.extends下表示的都是该碰撞体的长宽高的一半。