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);
        }
    }
}

总结

这次没有上贴图,但是测试过是可行的,以后会记录一些遇到的问题,放上博客。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值