Unity——角色移动的范围限定

一些游戏里,主角不能走出屏幕之外的,像这种就是限定游戏物体的position的值不能超出游戏场景的范围,就用到Mathf.Clamp()函数,


private Rigidbody rigidbody;
public float xMax,xMin,zMax,zMin;
FixedUpdate(){
//移动
float MoveX = Input.GetAxis("Horizonal");
float MoveY = Input.GetAxis("Vertical");	
//主角在x轴和z轴移动,y轴不动
Vector3 v_Move = new Vector3(MoveX, 0, MoveY;
rigidbody.velocity = v_Move * 5.0f;
rigigdody.position = Vector3
( Mathf.Clamp(rigidbody.position.x, xMin, xMax),
0,
Mathf.Clamp(rigidbody.position.z ,zMin, zMax));

Mathf.Clamp(float value,float min,float max);里面三个参数都是float类型的值,value就是被限制大小的值,也就是我们游戏物体的坐标值,min和max字面意思。
这样只要把界限的x轴z轴最大值给xMax,xMin,zMax,zMin就可以

规范一下,如果主角是在三维空间内移动 就需要加上y轴的两个范围值

//创建boundray类
public class Boundray
{
    float xMax,xMin,zMax,zMin;
}

只是这样的话在unity的inspector面板上不会出现声明的Boundray类
要在前面加上:[System.Serializable]
在最后处理主角的position的时候

public Boundray boundray;
……
if(rigidbody != null)
{
rigidbody.position = new Vector3(
Mathf.Clamp(rigidbody.position.x,boundary.xMin,boundray.xMax),
0,
Mathf.Clamp(rigidbody.position.z,boundray.zMin,boundray.zMax));
}

你可能感兴趣的:(技术,Unity)