Unity支持.fbx格式的动画模型,直接将其拖入Hierachy视图即可使用。
本例通过实时获取鼠标的位置来旋转主摄像机观察模型。
下述代码:target对象为摄像机旋转的参照物,LateUpdate()用于监听鼠标在屏幕中的坐标。计算出摄像机的位置与旋转的角度,继而实现通过移动鼠标摄像机来观察模型。
using UnityEngine;
using System.Collections;
public class look : MonoBehaviour {
//摄像机参照的模型
public Transform target;
//摄像机距离模型的默认距离
public float distance=20.0f;
//鼠标在x轴和y轴方向移动的角度
float x;
float y;
//限制旋转角度的最小值和最大值
float YMinLimint=-20.0f;
float YMaxLimit=80.0f;
//鼠标在x和y轴方向移动的速度
float xSpeed=250.0f;
float ySpeed=120.0f;
// Use this for initialization
void Start () {
//初始化x和y轴角度,使其等于参照模型的角度
Vector2 angles=transform.eulerAngles;
x=angles.y;
y=angles.x;
if(gameObject.GetComponent<Rigidbody>())
{
gameObject.GetComponent<Rigidbody>().freezeRotation=true;
}
}
// Update is called once per frame
void Update () {
if(target){
x+=Input.GetAxis("Mouse X")*xSpeed*0.02f;
y-=Input.GetAxis("Mouse Y")*ySpeed*0.02f;
y=ClampAngle(y,YMinLimint,YMaxLimit);
Quaternion rotation=Quaternion.Euler(y,x,0);
Vector3 position=rotation*new Vector3(0.0f,0.0f,-distance)+target.position;
//设置摄像机的位置和旋转
transform.rotation=rotation;
transform.position=position;
}
}
float ClampAngle(float angle,float min,float max)
{
if(angle<-360)
{
angle+=360;
}
if(angle>360)
{
angle-=360;
}
return Mathf.Clamp(angle,min,max);
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。