Контроллер персонажа Как добавить возможность толкать твердые тела в Unity

В этом уроке мы улучшим сценарий Unity FPS Controller, чтобы персонаж мог перемещать твердые тела внутри сцены (сценарий ниже должен работать с любым контроллером, если к нему подключен Компонент «CharacterController»). Этот сценарий может добавить реалистичности вашей игре, позволяя игрокам взаимодействовать с объектами и динамической средой.

Шаг 1. Создайте новый сценарий

  • Создайте новый скрипт C# в вашем проекте Unity. Вы можете назвать его примерно так: "CharacterPushController".

Шаг 2. Скопируйте предоставленный сценарий

  • Скопируйте приведенный ниже код во вновь созданный скрипт. Вы можете настроить переменную 'pushPower', чтобы контролировать силу нажатия. Кроме того, вы можете настроить условия применения силы нажатия на основе логики вашей игры.

ПерсонажПушКонтроллер.cs

using UnityEngine;

public class CharacterPushController : MonoBehaviour
{
    // Adjust this variable to control the strength of the push
    public float pushPower = 2.0f;

    void OnControllerColliderHit(ControllerColliderHit hit)
    {
        Rigidbody body = hit.collider.attachedRigidbody;

        // No rigidbody or kinematic rigidbody
        if (body == null || body.isKinematic)
        {
            return;
        }

        // Avoid pushing objects below the character
        if (hit.moveDirection.y < -0.3)
        {
            return;
        }

        // Calculate push direction from move direction,
        // pushing only to the sides, not up and down
        Vector3 pushDir = new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z);

        // Apply the push
        body.velocity = pushDir * pushPower;
    }
}

Шаг 3: Прикрепите сценарий

  • Прикрепите скрипт "CharacterPushController" к GameObject с помощью компонента CharacterController.

Шаг 4: Тест

  • Воспроизведите сцену и проверьте способность контроллера персонажа толкать твердые тела с помощью недавно созданного сценария.

Шаг 5: Отрегулируйте

  • Отрегулируйте 'pushPower', чтобы добиться желаемого поведения в вашей игре.