【Unity笔记】Unity中的移动方式

一、Transform SetPosition
直接改变物体的位置,适合非物理碰撞的移动

using UnityEngine;

public class MoveTransform : MonoBehaviour
{
    void Update()
    {
        transform.position += transform.forward * Time.deltaTime;
    }
}

二、Transform Translate
跟第一种类似,适合非物理运动

using UnityEngine;

public class TransformTranslate : MonoBehaviour
{
    transform.Translate(Vector3.forward * Time.deltaTime);
}

三、Rigidbody MovePosition
跟上面两种类似,但很少用

using UnityEngine;

public class MovePosition : MonoBehaviour
{
    Rigidbody rb;
    
    void Awake()
    {
        rb = GetComponent(); 
    }
    
    void Update()
    {
        Vector3 newPosition = transform.position + (transform.forward * Time.deltaTime);
        rb.MovePosition(newPosition);
    }
}

四、Rigidbody AddForce
给物体施加力的作用,适合物理类移动

using UnityEngine;

public class MovePosition : MonoBehaviour
{
    public float force = 200;
    Rigidbody rb;
    
    void Awake()
    {
        rb = GetComponent(); 
    }
    
    void Update()
    {
        rb.AddForce(transform.forward * forceMult);
    }
}

五、Rigidbody SetVelocity
直接给物体设定速度,适合物理类移动,要注意与上一种方式的区别;

using UnityEngine;

public class MovePosition : MonoBehaviour
{
    public float force = 200;
    Rigidbody rb;
    
    void Awake()
    {
        rb = GetComponent(); 
    }
    
    void Update()
    {
        rb.velocity = transform.forward * Time.deltaTime * force;
    }
}

如果你的物体移动在碰撞时抖动,考虑是否用了物理的方式移动物体;如果物体被设为Kinematic,则只能用前三种方式(直接改变位置)移动物体;

你可能感兴趣的:(Unity)