首页 > 解决方案 > 如何正确旋转和优化

问题描述

我对编程很陌生,我正在开发这个游戏,我需要帮助,我正在使用统一。

我试图让 obj 稍微向左或向右旋转,但如果我同时开始按下按钮,则旋转不匹配。同时这段代码似乎效率不高,我该如何解决这个问题?

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

public class Character2DController : MonoBehaviour
{

    public float MovementSpeed = 1;



    private Rigidbody2D _rigidbody;


    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        var movement = Input.GetAxis("Horizontal");
        transform.position += new Vector3(movement, 0, 0) * Time.deltaTime * MovementSpeed;
        if (Input.GetKeyDown("a"))
        {
            RotateLeft();
        }
        else if (Input.GetKeyDown("d"))
        {
            RotateRight();
        }
        else if (Input.GetKeyUp("a"))
        {
            ResetRotateLeft();
        }
        else if (Input.GetKeyUp("d"))
        {
            ResetRotateLeft();
        }




        void RotateLeft()
        {
            transform.eulerAngles = new Vector3(0, 0, 10);
        }

        void ResetRotateLeft()
        {
            transform.eulerAngles = new Vector3(0, 0, 0);
        }





        void RotateRight()
        {
            transform.eulerAngles = new Vector3(0, 0, -10);
        }


    }

}

标签: unity3drotation

解决方案


这应该可以帮助您:

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

public class Character2DController : MonoBehaviour
{

    public float MovementSpeed = 1;
    public float RotationSpeed = 10;
    private Rigidbody2D _rigidbody = null;
    private float angle = 10;
    private float currentAngle = 0;

    private void Update()
    {
        float movement = Input.GetAxis("Horizontal");
        float targetAngle = 0;
        if(movement > 0)
        {
            targetAngle = -angle;
        }
        else if (movement < 0)
        {
            targetAngle = angle;
        }
        transform.position += new Vector3(movement, 0, 0) * Time.deltaTime * MovementSpeed;
        currentAngle = Mathf.Lerp(currentAngle, targetAngle, RotationSpeed * Time.deltaTime);
        transform.eulerAngles = new Vector3(0, 0, currentAngle);
    }
}

推荐阅读