Вот мои настройки персонажа
А вот настройки родительского игрового объекта, где находится мой скрипт и коллайдер
Я разрабатываю персонажа от третьего лица в Unity и столкнулся с рядом проблем, связанных с столкновениями и движением. Персонаж использует Rigidbody и Capsule Collider для физического взаимодействия. Движение и анимация в целом работают нормально, но я сталкиваюсь с определенными проблемами при работе со ступеньками, возвышениями и стенами.
Вот проблемы, с которыми я столкнулся:
Ступеньки и возвышения: когда персонаж сталкивается со ступеньками или возвышением, он не может прыгнуть, чтобы преодолеть препятствие. Персонаж просто застревает у основания возвышения.
Стены и препятствия: когда персонаж сталкивается со стеной или другим препятствием, он больше не может двигаться вбок (влево или вправо). Он может двигаться только назад, что серьезно ограничивает маневренность персонажа.
Я пробовал различные решения, включая настройку трения физического материала, настройку параметров Rigidbody и изменение движения персонажа. сценарий, но это не решило проблемы.
Вот часть текущего сценария движения, который я использую:
private void Update() {
if(gameInput.isJumping() && isGrounded) {
Jumping();
isGrounded = false;
} else {
isGrounded = true;
}
}
private void FixedUpdate() {
Vector2 inputVector = gameInput.GetMovementVectorNormalized();
bool isSprinting = gameInput.isSprinting();
Vector2 scaledInputVector = ScaleInputVector(inputVector, isSprinting);
animator.SetFloat("horizontal", scaledInputVector.x);
animator.SetFloat("vertical", scaledInputVector.y);
Vector3 targetVelocity = new Vector3(scaledInputVector.x, 0, scaledInputVector.y);
if(isSprinting) {
addForceToRigidbody(sprint, targetVelocity);
} else {
addForceToRigidbody(walk, targetVelocity);
}
}
private Vector2 ScaleInputVector(Vector2 inputVector, bool isSprinting) {
if(!isSprinting) {
inputVector.x = Mathf.Clamp(inputVector.x, -0.5f, 0.5f);
inputVector.y = Mathf.Clamp(inputVector.y, -0.5f, 0.5f);
}
return inputVector;
}
private void addForceToRigidbody(float speed, Vector3 targetVelocity) {
targetVelocity = transform.TransformDirection(targetVelocity) * speed;
Vector3 velocity = rb.velocity;
Vector3 velocityChange = (targetVelocity - velocity);
velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
velocityChange.y = 0;
rb.AddForce(velocityChange, ForceMode.VelocityChange);
}
private bool canJump() {
bool canJump = Physics.Raycast(transform.position, Vector3.down, 1.5f);
return canJump;
}
private void Jumping() {
rb.AddForce(0f, jump, 0f, ForceMode.Impulse);
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... ve-sideway
Персонаж застревает при столкновении с возвышением и стенами — невозможно двигаться в сторону ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Мой персонаж не может двигаться во время прыжка, когда сцена сбрасывает C# Unity 2d
Anonymous » » в форуме C# - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Мой персонаж не может двигаться во время прыжка, когда сцена сбрасывает C# Unity 2d
Anonymous » » в форуме C# - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-