Я хочу сбросить ротацию игрового объекта, когда нажимаю кнопку. Когда беспилотник что -то начинает вращаться, поэтому я хочу нажимать на кнопку мухи и сбросить вращение дрона обратно к своему начальному вращению, чтобы я мог восстановить контроль над дроном во время полета. В настоящее время я храню начальное вращение и проверяю, не равно ли вращение тока не равным начальному вращению, и если это не так, то я установил вращение на начальное вращение. Это работает, пока я нажимаю на кнопку мухи, но когда я отпускаю ее, возвращается к своему предыдущему вращению, пока я не приземлился и не сплющил беспилотник обратно. Это также будет поддерживать скорость, так что даже когда вращение зафиксировано в воздухе, он все еще тянет в направлении, которое оно падает. Это мой код: < /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#
Место общения программистов C#
-
Anonymous
1751474550
Anonymous
Я хочу сбросить ротацию игрового объекта, когда нажимаю кнопку. Когда беспилотник что -то начинает вращаться, поэтому я хочу нажимать на кнопку мухи и сбросить вращение дрона обратно к своему начальному вращению, чтобы я мог восстановить контроль над дроном во время полета. В настоящее время я храню начальное вращение и проверяю, не равно ли вращение тока не равным начальному вращению, и если это не так, то я установил вращение на начальное вращение. Это работает, пока я нажимаю на кнопку мухи, но когда я отпускаю ее, возвращается к своему предыдущему вращению, пока я не приземлился и не сплющил беспилотник обратно. Это также будет поддерживать скорость, так что даже когда вращение зафиксировано в воздухе, он все еще тянет в направлении, которое оно падает. Это мой код: < /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:
Подробнее здесь: [url]https://stackoverflow.com/questions/79679889/how-to-reset-a-game-objects-rotation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия