unity3d 在Unity中使对象同时向左移动和旋转时出错

hgc7kmma  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(188)

我试着让物体在自转的同时飞向左边
下面是 MoveLeft 脚本:

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

public class MoveLeft : MonoBehaviour
{
    private float moveLeftSpeed = 10;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(Vector3.left * Time.deltaTime * moveLeftSpeed);
    }
    
}

下面是 SpinObjects 脚本:

using System.Collections.Generic;
using UnityEngine;

public class SpinObjectsX : MonoBehaviour
{
    public float spinSpeed = 50;

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(new Vector3(0, Time.deltaTime * spinSpeed, 0));
    }
}

我希望物体的运动看起来像这样,它只是向左移动,然后自己旋转。

但是当我使用这两个脚本时,对象的移动非常奇怪,它仍然在旋转自己,但不是向左移动,而是绕着某个东西旋转...

iyfjxgzm

iyfjxgzm1#

默认情况下,TranslateRotate都在相应对象的本地空间中工作,除非您显式传入Space.World作为附加的最后一个参数。
因此,在绕Y轴旋转对象之后,它的局部left向量也随之旋转,并指向其他位置。
=〉当你做局部空间向物体左边的平移时,它实际上并没有在世界上向左移动。
为了在绝对世界空间中向左移动您要使用的

transform.Translate(Vector3.left * Time.deltaTime * moveLeftSpeed, Space.World);

相关问题