Есть равносильное действие transform.forward только для физического движения?
Transform.forward это по факту телепортация объекта вперед по оси Z, из-за телепортации гравитация перестает работать должным образом. Нужна равносильная замена, только физическая.
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(CapsuleCollider))]
public class mainCharacterMovement : MonoBehaviour
{
private Vector3 moveVector;
public float speedCharacter = 5f;
public float ternVelocity = 3f;
private Rigidbody _rbMainCharacter;
void Start()
{
_rbMainCharacter = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
MoveLogic();
}
private void MoveLogic()
{
moveVector.x = Input.GetAxis("Horizontal") * ternVelocity;
moveVector.z = Input.GetAxis("Vertical") * speedCharacter;
_rbMainCharacter.velocity = transform.forward * moveVector.z; //проблема
_rbMainCharacter.AddTorque(transform.up * moveVector.x);
}
}
Ответы (1 шт):
Автор решения: c0ol
→ Ссылка
Написано с методом AddForce() - приложить силу.
Для теста нужны в иерархии объекты Plane и Sphere.
Базовое движение шара:
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class Move : MonoBehaviour
{
public float Speed = 10f;
private Rigidbody _rb;
void Start()
{
_rb = GetComponent<Rigidbody>();
}
// все действия с физикой в FixedUpdate
void FixedUpdate()
{
MovementLogic();
}
private void MovementLogic()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
_rb.AddForce(movement * Speed);
}
}