unity3d 我怎样才能修正这个代码,使它不需要transform.position = newPosition就能工作?

gajydyqb  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(181)

所以我的角色要绕着塔走很简单
但是我很笨,只能通过使用transform.position在更新中来解决,所以跳跃和碰撞ofc,不起作用
这是塔式概念(见图)Tower
以下是它的工作原理rn(参见视频:https://streamable.com/7tmq1l
你会看到在剪辑如何坏,它打破了,如果我评论的转换。位置=新的位置,以允许跳转
下面是我使用的代码:

public class Movement : MonoBehaviour
{
    [SerializeField] private float radius = 7;
    [SerializeField] private float angleSpeed = 28;
    [SerializeField] private float jumpForce = 5;
    private float angle;

    Rigidbody rb;

    private void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        transform.rotation = Quaternion.Euler(0, angle, 0);
        float horizontalInput = Input.GetAxis("Horizontal");

        angle -= horizontalInput * angleSpeed * Time.deltaTime;

        Vector3 newPosition = Quaternion.Euler(0, angle, 0) * new Vector3(0, 0, radius);

        transform.position = newPosition;

        //jump
        if(Input.GetKeyDown(KeyCode.Space)|| Input.GetKeyDown(KeyCode.W))
        {
            Debug.Log("Jumping!");
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
        }
    }

因为这个原因,跳跃不起作用

vltsax25

vltsax251#

使用刚体调整XZ位置,并让rb调整Y轴。

Vector3 newPosition = Quaternion.Euler(0, angle, 0) * radius;
   newPosition.Y = rb.position.Y; // leave Y unchanged to allow for jumps
   rb.position = newPosition;

相关问题