您的位置:首页 > 移动开发 > Unity3D

Unity基础包 FirstPersonController下的FOVKick 脚本研究

2016-11-08 12:26 381 查看
版本:unity 5.3.4  语言:C#

 

总之我现在不忙。。。反正我工资低,任务也比较少一点,就多多专心研究脚本吧。

 

不知道大家有没有这种感觉,回到家之后就不太想学习,一看到好看的美剧,就会一刻不停的看,一玩好玩的游戏,就大半夜的都不会睡觉,把自己的学习计划忘的一干二净。

 

所以说人生也是场历练吧,要想做出好的游戏,首先就要克服自己的怠惰。

 

今天给大家来FOVKick,说实话今天才弄懂这玩意是干什么的,详细的说明见脚本:

// FOV field of view 视场角,Kick 踢
// 简而言之,fov就是游戏中相机的可视角度,这个类就是用来在步行和奔跑间fov角度,步行时fov较小,而奔跑会增大fov,使可视角度更大,如果还是理解的不清晰的话,把下面FOVIncrease的值调整为80,然后在奔跑和步行间切换试试
// ps.Camera组件中也有Field Of View参数,可以调整一下试试效果
// 这个类在FixedUpdate中的GetInput中执行,当然需要开启fov。当时我不太理解,现在大家都明白这个类的作用了吧
[Serializable]
public class FOVKick
{
public Camera Camera;                           // 可选择设置Camera,如果没有设置,则为主Carmera
[HideInInspector] public float originalFov;     // fov的初始角度
public float FOVIncrease = 3f;                  // 进入奔跑状态时,fov的增长值
public float TimeToIncrease = 1f;               // 完成fov增涨的秒数
public float TimeToDecrease = 1f;               // 这是减少,会回归fov的初始值
public AnimationCurve IncreaseCurve;            // fov值的增涨曲线

// 设置Camera
public void Setup(Camera camera)
{
CheckStatus(camera);

// 将Camera赋值,并将fov值保存起来
Camera = camera;
originalFov = camera.fieldOfView;
}

// 检查Camera
private void CheckStatus(Camera camera)
{
if (camera == null) //Camera是null的报错
{
throw new Exception("FOVKick camera is null, please supply the camera to the constructor");
}

if (IncreaseCurve == null)  //增涨曲线是空的,报错!
{
throw new Exception(
"FOVKick Increase curve is null, please define the curve for the field of view kicks");
}
}

// 变换Camera,不过有个问题,没有改变fov初始值
public void ChangeCamera(Camera camera)
{
Camera = camera;
}

// fov增加
public IEnumerator FOVKickUp()
{
// 计算当前的fov值进行到了多少秒,有的人可能说直接设置为0不就行了,不过他们忘记了fov值没有完全回归初始值的情况,从中途开始增加,就是要通过计算了,当然从初始的fov值开始计算出来的就是0
float t = Mathf.Abs((Camera.fieldOfView - originalFov)/FOVIncrease);
while (t < TimeToIncrease)
{
// 根据增涨曲线和时间计算当前的fov值,直到t值大于等于完成时间,跳出循环
Camera.fieldOfView = originalFov + (IncreaseCurve.Evaluate(t/TimeToIncrease)*FOVIncrease);
t += Time.deltaTime;

yield return new WaitForEndOfFrame();   // 每帧执行一次,增涨一次
}
}

// fov减少
public IEnumerator FOVKickDown()
{
// 同样计算出当前的时间
float t = Mathf.Abs((Camera.fieldOfView - originalFov)/FOVIncrease);

while (t > 0)
{
// 这边的区别是t值减少,判断条件变为t>0,这样就会和fov增加函数相反的进行
Camera.fieldOfView = originalFov + (IncreaseCurve.Evaluate(t/TimeToDecrease)*FOVIncrease);
t -= Time.deltaTime;
yield return new WaitForEndOfFrame();
}

//保证fov值回归了初始值
Camera.fieldOfView = originalFov;
}
}


这个玩意就是极品飞车中使用氮氧装置加速后,视野增大往后倾的一种感觉,很棒!嗯,回去打开游戏来试试,是有这种感觉吧?印象有点不深了。

哦,是Minecraft,话说unity的FPC脚本效果跟Minecraft中的好像。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: