Вот мои настройки персонажа
А вот настройки родительского игрового объекта, где находится мой скрипт и коллайдер
Я разрабатываю персонажа от третьего лица в 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#
1722126560
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78802207/character-stuck-when-colliding-with-elevation-and-walls-unable-to-move-sideway[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия