Unity限制人物移动的方法
记录一下最近来限制人物移动方法
我希望上厕所离开键鼠的时候,人物不要乱跑或者偏移出场景。
动机
之前为了限制人物移动,比如说跑酷之类的,不希望人物飞出跑到之外,所以会在每帧生成随机地图的同时也会在跑到两边生成阻止玩家掉落的碰撞体。
但是每帧生成碰撞体也有其弊端,尽管计算好生成碰撞体的间隔,只要人物一直靠着右边走,总会有可能卡在生成碰撞体之前飞出去。
所以为了解决这个问题,我们使用Mathf.Clamp。限制人物的位移
代码实例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LimitedMovement : MonoBehaviour
{
public float boundaryX = 1.0f; //玩家在不动的时候会存在的透明边界
public float boundaryZ = 1.0f;
// Start is called before the first frame update
private Vector3 originPos;
void Start()
{
originPos = transform.position;//获取位置初始化限制中心点
}
// Update is called once per frame
void Update()
{
CheckInput();
DoNothingLimitedMove();
}
/// <summary>
/// 检测输入,更新限制中心点
/// </summary>
void CheckInput()
{
if (Input.anyKey)
{
originPos = transform.position;
}
}
/// <summary>
/// 限制角色在矩形区域内移动
/// </summary>
void DoNothingLimitedMove()
{
if (!Input.anyKey)
{
float tempX = Mathf.Clamp(transform.position.x, originPos.x - boundaryX, originPos.x + boundaryX);
float tempZ = Mathf.Clamp(transform.position.z, originPos.z - boundaryZ, originPos.z + boundaryZ);
transform.position = new Vector3(tempX, transform.position.y, tempZ);
}
}
}
总结
这次没有上贴图,但是测试过是可行的,以后会记录一些遇到的问题,放上博客。