Я хочу сбросить ротацию игрового объекта, когда нажимаю кнопку. Когда беспилотник что -то начинает вращаться, поэтому я хочу нажимать на кнопку мухи и сбросить вращение дрона обратно к своему начальному вращению, чтобы я мог восстановить контроль над дроном во время полета. В настоящее время я храню начальное вращение и проверяю, не равно ли вращение тока не равным начальному вращению, и если это не так, то я установил вращение на начальное вращение. Это работает, пока я нажимаю на кнопку мухи, но когда я отпускаю ее, возвращается к своему предыдущему вращению, пока я не приземлился и не сплющил беспилотник обратно. Это также будет поддерживать скорость, так что даже когда вращение зафиксировано в воздухе, он все еще тянет в направлении, которое оно падает. Это мой код: < /p>
using System;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private InputReader inputReader;
private GroundDetection groundDetection;
private BatterySystem batterySystem;
private Rigidbody2D rb;
private Quaternion startingRotation;
[SerializeField] private float moveSpeed = 5;
[SerializeField] private float flyVelocity = 5;
private Vector2 moveInput;
public bool flyInput { get ; private set; }
void Awake()
{
rb=GetComponent();
}
void Start()
{
batterySystem = GetComponent();
groundDetection = GetComponentInChildren();
//Storing the starting rotation
startingRotation = Quaternion.identity;
}
void OnEnable()
{
inputReader.MoveEvent += HandleMove;
inputReader.FlyEvent += HandleFly;
}
void OnDisable()
{
inputReader.MoveEvent -= HandleMove;
inputReader.FlyEvent -= HandleFly;
}
private void Update()
{
Move();
}
private void FixedUpdate()
{
Fly();
}
private void HandleMove(Vector2 _moveInput)
{
moveInput = _moveInput;
}
private void Move()
{
if (!groundDetection.isGrounded)
{
transform.Translate(moveInput * moveSpeed * Time.deltaTime);
}
//checking if I am pressing the fly button and if the current rotation is less than the starting rotation
if (flyInput && transform.rotation != startingRotation)
{
//make current rotation equal to the starting rotation
transform.rotation = startingRotation;
}
}
private void HandleFly(bool _flyInput)
{
flyInput = _flyInput;
}
private void Fly()
{
if(flyInput && batterySystem.currentBattery > 0)
{
rb.AddForce(Vector2.up * flyVelocity, ForceMode2D.Impulse);
}
}
}
< /code>
Я попытался сохранить начальное вращение, проверив, не равно ли вращение тока не равным начальному вращению, и если это не так, я установил вращение, равное начальному вращению. Этот вид работы, пока я держу кнопку Fly, но, как только я отпустил кнопку Fly, она возвращается к своему предыдущему вращению. Это не сработало, когда я что -то ударил и продолжал летать, вращение продолжало вращаться и никогда не возвращался к стартовому вращению вообще. Если я снова нажмею кнопку «Флайт», дрон придет к начальному вращению, что я хочу. Однако, когда я отпускаю кнопку Fly, дрон вернется к предыдущему вращению, как видно в следующем GIF:
Введите описание изображения здесь
Подробнее здесь: https://stackoverflow.com/questions/796 ... s-rotation
Как сбросить ротацию игрового объекта? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как переопределить ротацию сплайна для управляемого игроком автомобиля в гоночной игре?
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как переопределить ротацию сплайна для управляемого игроком автомобиля в гоночной игре?
Anonymous » » в форуме C# - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-