Персонаж застревает при столкновении с возвышением и стенами — невозможно двигаться в сторонуC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Персонаж застревает при столкновении с возвышением и стенами — невозможно двигаться в сторону

Сообщение Anonymous »

Вот мои настройки персонажа
А вот настройки родительского игрового объекта, где находится мой скрипт и коллайдер
Я разрабатываю персонажа от третьего лица в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Мой персонаж не может двигаться во время прыжка, когда сцена сбрасывает C# Unity 2d
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Мой персонаж не может двигаться во время прыжка, когда сцена сбрасывает C# Unity 2d
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Unity 5 2D заставляет монеты двигаться в сторону игрока
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Когда действие должно двигаться прямо в тележке, оно движется в левую сторону. Почему это так? Как это может быть решено
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Макет ограничений с прозрачностью и возвышением
    Anonymous » » в форуме Android
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»