Unity3D:角色控制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang_lvril/article/details/80626428

1.键盘控制角色前后左右移动

不转向,通过物体刚体组件物理特效Velocity控制,在FixedUpdate()函数里添加代码

void FixedUpdate(){
	float moveHorizontal=Input.GetAxis("Horizontal");//得到水平方向输入
	float moveVertical=Input.GetAxis("Vertical");//得到垂直方向输入
	Vector3 movement=new Vector3(moveHorizontal,0,moveVertical);
	Rigidbody rb=GetComponent<Rigidbody>();
	rb.velocity=movement*speed;
}

如果移动空间有范围限制,可在FixdUpdate()函数添加如下代码:

void FixedUpdate(){
	......
	float posX=Mathf.Clamp(rb.position.x,xMin,xMax);
	float posY=Mathf.Clamp(rb.position,yMin,yMax);
	rb.position=new Vector3(posX,0,posY);
}

Mathf.Clamp(float value,float min,float max)表示value固定在最小值min,和最大值max之间变动。

如果水平移动时,物体要倾斜,如飞机的移动,可在FixedUpdate()函数添加如下代码:

void FixedUpdate(){
	......
	float title=4.0f; //倾斜系数
	rb.rotation=Quaternion.Euler(0,0,rb.velocity.*-tilt);
}

函数Euler的声明为:static Quaternion Euler(float x,float y,float z);接收绕X,Y,Z轴旋转角度值为参数。

水平移动,绕Z轴旋转,速度越大旋转角度越大,乘以负值旋转系数。

2.键盘控制前后移动,左右旋转

void FixedUpdate(){
	float h=Input.GetAxis("Horizontal");
	float v=Input.GetAxis("Vertical");
	Rigidbody rb=GetComponent<Rigidbody>();
	rb.velocity=transform.forward*v*speed;
	rb.angularVelocity=transform.up*h*angularSpeed;
}


猜你喜欢

转载自blog.csdn.net/wang_lvril/article/details/80626428