查看: 3345|回复: 1
打印 上一主题 下一主题

【代码请教】关于相机视角滑动 如何产生缓慢减速至零的...

[复制链接]

2508

主题

2

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
32806
精华
12

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2013-4-9 11:22:29 |只看该作者 |倒序浏览
Fps里的相机自带的一个script 叫Mouse Look,我把它改了改,使其相机视角依旧随着鼠标滑动,但前提是按下鼠标左键:
using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook0 : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationX = 0F;
float rotationY = 0F;

public float mousex;
public float mousey;
public float lastmousex=0F;
public float lastmousey=0F;


Quaternion originalRotation;
void Update ()
{
  if (Input.GetMouseButton(0))
  {
  if (axes == RotationAxes.MouseXAndY)
  {
   // Read the mouse input axis
   mousex=Input.GetAxis("Mouse X");
   mousey=Input.GetAxis("Mouse Y");
   rotationX += (mousex-lastmousex)* sensitivityX;
   rotationY += (mousey-lastmousey) * sensitivityY;
   rotationX = ClampAngle (rotationX, minimumX, maximumX);
   rotationY = ClampAngle (rotationY, minimumY, maximumY);
   
   Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
   Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
   
   transform.localRotation = originalRotation * xQuaternion * yQuaternion;
  }
  else if (axes == RotationAxes.MouseX)
  {
   mousex=Input.GetAxis("Mouse X");
   rotationX += (mousex-lastmousex)* sensitivityX;
   rotationX = ClampAngle (rotationX, minimumX, maximumX);
   Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
   transform.localRotation = originalRotation * xQuaternion;
  }
  else
  {
   mousey=Input.GetAxis("Mouse Y");
   rotationY += (mousey-lastmousey) * sensitivityY;
   rotationY = ClampAngle (rotationY, minimumY, maximumY);
   Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
   transform.localRotation = originalRotation * yQuaternion;
  }
  }
}

void Start ()
{
  // Make the rigid body not change rotation
  if (rigidbody)
   rigidbody.freezeRotation = true;
  originalRotation = transform.localRotation;
}

public static float ClampAngle (float angle, float min, float max)
{
  if (angle < -360F)
   angle += 360F;
  if (angle > 360F)
   angle -= 360F;
  return Mathf.Clamp (angle, min, max);
}
}


想请教的是,如果想要给相机视角加上缓动的效果~
即,相机的视角随着鼠标不是立即停止或启动 ,而是 每当鼠标开始移动或停止,视角都有个相应的加速或减速的过程,
该如何实现? 提供个思路亦可。XD~
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2013-4-9 12:42:35 |只看该作者
有点类似滑动的意思,求指点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-10 15:42 , Processed in 0.086753 second(s), 31 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部