Unity -物体移动的所有实现方式

前言

控制物体移动是一个游戏中重要的一部分,对于不同的场景,需要运用不同的方式来完成对于游戏物体的移动

1,控制玩家移动

控制玩家移动主要是空过WASD键(方向键)来完成,这种控制方式首先需要输入键盘的控制,然后使用函数方法来完成,主要的方式有:

  • 使用transform.Translate:
	public float speed = 2f;
    // Update is called once per frame
    void Update()
    {
        float x = Input.GetAxis("Horizontal")*Time.deltaTime*speed;
        float y = Input.GetAxis("Vertical")*Time.deltaTime*speed;
        transform.Translate(x, 0, y);
    }
  • 使用角色控制器来完成:

角色控制器控制移动的函数为Move,可以配合GetAxis()来使用:

    public CharacterController player;
    public float speed = 2f;

    private void Start()
    {
        player = GetComponent<CharacterController>();
    }
    private void Update()
    {
        float x = Input.GetAxis("Horizontal")*Time.deltaTime*speed;
        float y = Input.GetAxis("Vertical")* Time.deltaTime * speed;
        player.Move(new Vector3(x, 0, y));
    }

2,场景中物体移动

控制场景中的物体移动是很重要的一环,NPC与一些物体的的效果是构成 整个 游戏重要的一环,所以需要在不同的环境下掌握不同的方式

  • Vector3.Lerp的插值运算:

插值运算用来控制物体移动某个点,由于速度不均匀,通常用来做相机的跟随效果:

对于其方法为:

Vector3.Lerp(a, b,t);

  • a为开始的位置
  • b为要到达的位置
  • t为插值且取值为0~1之间,如果大于1,效果等同于1,t越大则到达速度越快,若为1,则直接到达

而Vector3.Lerp方法等同于 a+ (b - a) * t 这种计算方式,如下代码所示,脚本每帧调用该插值算法并返回一个经过插值运算后得到的位置给transform,直到transform无限接近Vector(6,0,6)这个位置(但是unity会有取值范围):

 private void Update()
    {
        //最开始距离最大,所以插值算出的数值也最大,所以移动的速度最快
        transform.position = Vector3.Lerp(player.position, new Vector3(6, 0, 6), 0.01f);
    }
  • Vector3.MoveTowards的匀速移动:

MoveTowards可以匀速的控制物体移动,有更宽阔的应用场景,我们可以使用这样的方法:

官方API对其解释为:

Vector3.MoveTowards(a, b, d);

  • a为开始位置
  • b为要到达的位置
  • d为每帧移动的最大距离,所以d相当于移动速度
private void Update()
    {
        //使用Time.deltaTime来确保物体可以匀速的运动,不会受帧率的波动而影响
        transform.position = Vector3.MoveTowards(transform.position, new Vector3(6, 0, 6), 1f*Time.deltaTime);
        
    }

总结

对于不同的场景可以采用不同的控制一定方式。一句话,要灵活的使用,选择很重要

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之凌儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值