Как закрепить систему координат для объекта в Unity
Пока только знакомлюсь с функционалом Unity и вот столкнулся с проблемой:
Если 3D объект переворачивается на бок - его система координат тоже переворачивается и кнопка, отвечающая за движение вправо(к примеру), начинает двигать объект в пол.
Возможно как то закрепить положение только для системы координат?
Если нужно - вот код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controls : MonoBehaviour
{
[SerializeField]
private GameObject obj;
public float speed = 1f;
public float JumpForce = 3f;
private bool IsGrounded;
private void Start()
{
Transform transform = GetComponent<Transform>();
Rigidbody rigidbody = GetComponent<Rigidbody>();
}
private void OnCollisionEnter()
{
IsGrounded = true;
}
private void Update()
{
// Движение
if (Input.GetKey(KeyCode.D))
{
obj.transform.Translate(Vector3.right * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))
{
obj.transform.Translate(Vector3.left * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.W))
{
obj.transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S))
{
obj.transform.Translate(Vector3.back * speed * Time.deltaTime);
}
//Прыжок
if (Input.GetKeyDown(KeyCode.Space) && IsGrounded)
{
GetComponent<Rigidbody>().AddForceAtPosition(new Vector3(0, JumpForce, 0),
obj.transform.position, ForceMode.Impulse);
IsGrounded=false;
}
}
}
Ответы (2 шт):
У компонента
Rigidbodyв инспекторе выставьте галочки напротивFreeze rotation.Не используйте сразу несколько видов перемещения, если перемещаете объект с помощью
Rigidbody, то перемещайте только таким образом, иначе могут возникать разные курьёзные ситуации.
Поставьте галочку в скрипте Rigidbody на поле Freeze Rotarion на x и z. Компонент Transform не нужно кэшировать в методе Start.