Unity自主学习(三十):完美物件移动

那昨天後来自己在玩写好的脚本时,发现了会有逻辑上的错误,导致物件撞墙时,会不断产生抖动,而之後也去Unity官网找了一下,有没有适合改善这个问题的程序在,後来找到一个。通过更改物件"rigidbody.velocity"的数值来移动物件。他是通过改变"rigidbody"的向量速度,来达到物件移动的效果,这样就不会产生物件穿到墙里,又被排出的抖动画面了。
Unity官方提供的rigidbody.velocity描述:
https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html
那一样我直接用Unity提供的范例程序,融到本来的程序码里试试。
那包含跳跃在内,所有的移动都变得更加滑顺,但因为我们改变的是速度,所以当按键放开,物件还是会往前滑行一小段距离。物件的移动是滑出去之後,慢慢减速的。所以还有地方需要再更改。

那因为我们的程序是改变速度,当我们放开按键时,速度是慢慢减少的,为了让物件马上停下,所以在放开按键的同时,也将速度重制为零就好了。

更改完之後,移动就照着预想的行动了,不过跳跃部分还是有点问题,当跳跃起来移动时,物体就会卡在半空中,那麽这又是要另外解决的问题。那这是因为我们速度的程序是用new Vector3去设定速度的,当我们移动某个方向时,其他方向的速度都使其归0,那麽只要指定特定轴的速度,我想应该就可以了。
实际弄出来之後,是可以正常执行了,而跳跃为了避免连跳,也多了一个判断,物件高度必须低於1,才能跳起来。

那最後完整的程序码大概是这样:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{
    public Rigidbody rb;
    private Vector3 jpdown;
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }
    void Update()
    {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            jpdown.z = 5;
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            jpdown.z = -5;
        }
        if (Input.GetKeyUp(KeyCode.DownArrow) || Input.GetKeyUp(KeyCode.UpArrow))
        {
            jpdown.z = 0;
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            jpdown.x = 5;
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            jpdown.x = -5;
        }
        if (Input.GetKeyUp(KeyCode.LeftArrow)|| Input.GetKeyUp(KeyCode.RightArrow))
        {
            jpdown.x = 0;
        }

        if (Input.GetKeyDown(KeyCode.Space) && transform.localPosition.y <= 1)
        {
            rb.AddForce(Vector3.up * 350);
        }
        jpdown.y = rb.velocity.y;
        rb.velocity = jpdown;
    }
}

那麽30天挑战虽然结束了,但Unity的学习不会结束,谢谢陪了我30天的各位!ε(*´・∀・`)з゙
之後有缘再见吧!!!


<<:  Unity自主学习(二十九):物件移动错误

>>:  [DAY19]旋转木马(02)

Day 22:计算机概论

前言 计算机概论虽然是高中职的学科,但这也是身为工程师的基本常识,没有这些底子我们甚至没有办法跟其他...

Day25 黑白照片上色

黑白照片上色 教学原文参考:黑白照片上色 这篇文章会介绍使用 GIMP 的着色功能,搭配图层的遮罩,...

#14 No-code 之旅 — 怎麽利用 Chakra UI 去做 React 元件客制化?

继续昨天的主题,该怎麽用 Chakra UI 做开发呢?现成的元件该怎麽去做客制化?专案有定设计系统...

每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day18

tags: ItIron2021 Javascript 前言 终於...我们终於可以稍微换个新主题了...

安全意识,培训和教育(security awareness, training and education)

所有雇员(All employees) 总体上,“所有员工”是接受或参加意识介绍或活动的理想目标,...