战车系统之瞄准逻辑

这套逻辑没想到会如此复杂。给ngui做的prefab加了一个瞄准控制逻辑。cross hair handler。

相机在坦克的后面位置,相机前方即forward向量100米处,是当前炮口瞄准的方向,然后炮口的向量又是瞄准镜的向量。但是按照策划们的需求来看,应该是炮管不动,才对。

1.瞄准点的位置跟随。瞄准中心跟着炮口的坐标走,在炮口的前向增加20个单位的偏移。否则太近的话,会发生奇怪的问题,因为炮口在旋转的过程中,如果炮口朝向摄像机,那么炮口投射出的坐标值就会出现在屏幕上,但是这个时候应该在远处,不应该在屏幕上才对。所以在角色自己初始化的时候,找到barrel out这个节点,在handler初始化的时候,读取entity myself的这个节点。下一步,狙击模式下,这个瞄准中心其实应该在一个对象的点才对。

现在有个问题,是炮口的坐标有时候并不是一直在镜头的中心点。施加的角速度问题,因为当你在做加速度的时候,速度应该是给过了。怎么能让这个速度恰到好处呢,

2.瞄准镜的准星会动态变化,有几种状态,移动,旋转,静止,每种状态对应了一个缩放值来。

每帧在update的时候,取出当前状态的scale值,这个就是目标scale值了,然后指定一个插值比例,然后从当前的scale到目标scale进行插值。

3.移动状态的变更,是监听了摇杆的启停事件。由于移动优先级高,因此在移动开始时,直接设置了移动状态。在移动结束时,就的判断,如果当前炮塔在旋转,就设置为炮塔移动状态,否则就可以设置为idle状态了。

4.炮塔旋转状态变更。炮塔的旋转是通过施加了一个角速度得到的。这个角速度也是个常量或者是0。目标即镜头的位置换算到炮塔的局部坐标系下,得到一个目标位置,这个目标坐标的x,如果不等于0,那么就一直施加这个角速度,否则就可以直接设置为0.

炮塔控制器里有一个rotating变量,如果上面计算出来的角速度是0,那么就说明非旋转状态,否则就是旋转状态。当设置这个变量状态的时候,会抛出一个事件,告知外部炮塔是否旋转了。

炮塔改成了无重力作用,重力真是很关键啊,重力大,就会导致炮塔启停的时候抖动较大。

 

5.瞄准敌人,先做还是先做狙击模式。显然应当先做瞄准敌人。瞄准玩家对象,无非就是要控制瞄准镜头的位置。现在是直接设置为炮口位置,显然这块应该去取目标对象列表,

瞄准敌人的情况下,是这样的,让炮塔有个旋转目标。参考了这个的旋转实现

 http://www.cuelogic.com/blog/how-to-rotate-object-in-unity3d-using-rigidbody/

 

6.对于第三人称来说,视野内的目标需要看是否在自己的视角范围内,需要使用ui的范围来判断,而对于fps来说,目标对象就应该是从相机射线穿过去的那个对象。这样的话,在tps下,每帧都需要做检测。而在fps模式下,只要做射线检测就可以

从大的方向说,所有的战斗数据都会有fps和tps两种模式,例如视野选择,各种参数的配置等等。在计算战斗时,需要判定,如果是tps模式,就取出锁定的对象,然后直接发送攻击命令即可。对于fps模式下,需要使用瞄准星所对准的那个对象,所以取出来的对象都不一样。

 

7.炮管的设计逻辑。炮管在默认的情况下,是有一个初始的角度。而且这个初始角度是朝向屏幕中间的那个准星位置。现在这个准星位置是由场景相机在初始化的时候给的。其实这个炮管的俯仰角会有一个角度。

瞄准镜的逻辑,是炮管的炮口方向。

 

7.坦克的炮管锁定机制。

 

 

-----------------------------------------------------------------------------------

分析下原理,

炮管向后延伸一个点,这个点按说就不会因为旋转而转动,那么这个点在哪里呢。如果能取到这个点,那么一切就都好解决了,从炮管向后延伸一个距离,那么我的旋转中心点距离这个炮管点是多远呢?

应该不会是那个点吧但是明显这个是有偏移的。怎么做呢?

现在情况是这样的:

1.炮塔的旋转中心点在贴着地表的位置,如果你想要看这个点,就得让TPS相机以这个点为中心了。所以TPS相机的确切位置可以确定了。

2.FPS相机的位置放在那里?应该是两条线的交叉位置。从当前炮管延伸的一条线河旋转中心点的垂直方向这条线。这个是个关键,如何计算出这个位置呢?这个很像是把一个点投影到一个平面上。

这样就可以整理出一个思路来了。先设置TPS相机看的点。现在是3条线,3个碰撞点,

1.UI那里有一条线,是根据barrelroot,实时更新的一条,是大圈这个UI

2.TPS相机有条线,是青色的线

3.FPS相机有条线,是蓝色的线

这三线按说应该要汇聚到一个点才行,即都汇聚到当前相机的瞄准线延长点那才行。

 

 

 

突然觉得应该设置成,在炮塔的中心位置,这个位置不会有偏移,而所有的位置之类的,都放到炮塔中心来设计,是不是就好了呢。可以试试。

 炮塔为中心在左右旋转的时候,没问题,但是如何实现在垂直方向上的旋转呢?即Pitch的变化。是否可以一试?

 

============================

再次修改FPS相机的问题。原来的逻辑,FPS相机会决定出这个瞄准点,其实现在不用这个也可以了,直接使用锚点来确定这个点就可以了,而不需要这个所谓的FPS相机来确定瞄准点;

FPS相机还有别的用处。所以先把FPS相机对于确定瞄准点的逻辑先提出去。

 

posted @ 2015-11-21 12:49  DesignYourDream  阅读(330)  评论(0)    收藏  举报