如何正确使用transform.rotate

问题描述 投票:0回答:1

这是我在 Unity 中的玩家移动代码:

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float _rotateSpeed;
    [SerializeField] private AudioClip _moveClip, _loseClip;

    [SerializeField] private GameplayManager _gm;
    [SerializeField] private GameObject _explosionPrefab;

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            SoundManager.Instance.PlaySound(_moveClip);
            _rotateSpeed *= -1f;
        }
    }


    private void FixedUpdate()
    {
        transform.Rotate(0, 0, _rotateSpeed * Time.fixedDeltaTime);
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Obstacle"))
        {
            Instantiate(_explosionPrefab, transform.GetChild(0).position, Quaternion.identity);
            SoundManager.Instance.PlaySound(_loseClip);
            _gm.GameEnded();
            Destroy(gameObject);
        }
    }
}

出于某种原因,对象没有移动,因为转换没有像我期望的那样工作,我不知道为什么,所以任何帮助都会很好,谢谢。对象确实绕 X 轴和 Y 轴旋转,但不绕 Z 轴旋转。但是,具有相同旋转命令的另一个对象确实可以正确旋转。

c# unity3d
1个回答
0
投票

Transform.Rotate
有一个可选参数

relativeTo
确定是将游戏对象在本地旋转到游戏对象还是相对于世界空间中的场景旋转。

默认情况下(如果不传)这个参数是

Space.Self
.

所以如果你更想在绝对世界空间中应用旋转,你需要传入

transform.Rotate(0, 0, _rotateSpeed * Time.deltaTime, Space.World);
© www.soinside.com 2019 - 2024. All rights reserved.