首页 > 其他 > 详细

战斗系统之相机逻辑

时间:2016-03-23 15:36:19      阅读:164      评论:0      收藏:0      [点我收藏+]

需求分析

1.支持两种相机模式,第三人称TPS和第一人称FPS 

 

2.相机位置要保持在坦克的某个相对位置,即相机的位移变化是随着坦克的变化而变化。

 

3.旋转。接受用户滑动屏幕输入,分别在X轴和Y轴两个方向,平滑旋转相机。 两种模式下都要支持滑动

坦克在垂直方向的旋转有最大俯角和仰角的限制,即 Pitch有最大和最小,这一对值在TPS和FPS两种模式下是相等的。

 

4.相机要跟随坦克行进过程中的晃动,有相应的晃动。即实现所谓的悬架式功能,两种模式下都要支持相机的晃动功能。

 

5.需要计算瞄准目标点,这个点将随后被炮管使用,来确定炮管的朝向,随后UI上的瞄准点会根据炮管的方向来确定一个点。

 

6.TPS下,准星可以不在视野的中心。FPS下准星一定在视野的中心。从FPS切换到TPS,要保证视野中心与准星重合。

 

7.相机的FOV有三组值,一个是TPS,一个是FPS,一个是加强版FPS。需要三者平滑切换。

 

8.

 

每帧同时计算TPS和FPS两个Transform 辅助对象,然后如果当前用到一个,就平滑切过去

 

节点结构,相机系统是一个CameraSystem,它下面有SceneCamera,有FPS,有TPS,有AimObject等。

 

设计ViewFirstPerson,ViewThirdPerson,两个脚本分别控制FPS和TPS的transform。

 

设计一个FOV控制器,可以在不同的情况下,平滑切换FOV值。

 

程序上来说,SceneCamera里有一个camera controller,这个控制器支持两种模式。

 

核心上来说,需要控制的是姿态,位置等。

 

================RTC摄像机逻辑==================

rtc相机脚本挂在了主的摄像机上。在awake时,

1.记录下当前摄像机的朝向欧拉角,保存x和y两个值,坦克相机不大可能围绕z轴转圈,因此不用管z轴的值。

2.摄像机的rigidbody的freezeRotation 设置为true,表明不希望受物理系统影响,所有的旋转操作都由自己实现。

3.创建一个新的gameobject节点,在相机控制脚本里,就控制这个新节点的位置坐标等。而炮塔控制脚本,将会监听这个节点的变动,从而改变炮塔的旋转角度。

4.调用Input.GetAxis("Mouse X")获得水平方向,上一帧到现在的delta值,Input.GetAxis("Mouse Y")获得垂直方向上,上一帧到现在的delta值。

 

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

关于自动瞄准的逻辑,今天要搞定的事情有实现

1.自动选择场景内视野里最近目标的功能。纠结的地方在于扫描怪物的这个功能是挂在角色身上还是在系统身上,暂时先放到了角色自己身上

2.瞄准心的缩放,做一个插值实现即可。

 

里面这个圈是这样的逻辑,当旋转停下来的有一个最小的Scale,有一个最大的scale,当移动的时候,会从现在的值逐步变大,然后再逐步变小。跟滑动的速度有关系,从起到停,当滑动速度较慢时,光圈会保持基本不变.

首先,准星的位置,要有一个插值的过程。

本身炮塔的转向就是一个插值的旋转过程,因此直接取炮管出膛位置作为准星的目标点位置即可。

而对于,缩放来说,判断出当前自己的位置和目标点位置的距离,从最高值插值到最低值。

 

其实是分成了几段,第一段,是从最大到普通,再从普通到最小。

这块设计与实现的都是比较复杂的。 

 

梳理下现在的整体思路:

1.

 

战斗系统之相机逻辑

原文:http://www.cnblogs.com/designyourdream/p/4894650.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!