Relayz
@Relayz

Unity3D | Как ограничить передвижение персонажа на сцене 3D?

Пишу игрушку. Хотелось бы, чтобы персонаж не улетал за определённые границы. Камера следует за персонажем (засунул камеру в персонажа, как зависимый объект в окне иерархии).
Есть скрипт управления. Как, используя код, ограничить передвижение персонажа по сцене?

код
public class PlayerControl : MonoBehaviour
{
    public float speedMove; // Скорость передвижения
    private float gravityForce; // гравитации персонажа
    public float gravityForceSpeed; // скорость гравитации.
    private Vector3 moveVector; // Вектор движения
    public float jumpForce;

    private CharacterController ch_controller; //Ссылка на компонент 



    private void Start()
    {
        ch_controller = GetComponent<CharacterController>();

    }
    private void Update()
    {
        CharacterMove();
        GamingGravity();
    }
    //Метод перемещения персонажа по сцене.
    private void CharacterMove()
    {
        moveVector = Vector3.zero;
        moveVector.x = Input.GetAxis("Horizontal") * speedMove;
        moveVector.z = Input.GetAxis("Vertical") * speedMove;
       // moveVector.y -= gravityForceSpeed; 
        moveVector.y =gravityForce;
        ch_controller.Move(moveVector * Time.deltaTime);
        
    }
    //Метод гравитации.
    private void GamingGravity()
    {
        if(!ch_controller.isGrounded) gravityForce-=gravityForceSpeed * Time.deltaTime;
        else gravityForce = -1f;

        if (Input.GetKey(KeyCode.Space)) gravityForce = jumpForce;
    }
  • Вопрос задан
  • 2090 просмотров
Решения вопроса 3
DanceM
@DanceM Куратор тега Unity
Кто хочет -ищет способ, кто не хочет -ищет причину
Ограничивать надо не камеру, а персонажа, так как она к нему привязана.

Как? Тут у меня на ум три варианта приходит:
  1. при достижении определенной границы (величиныв по оси или например расстояния от центра) можно отключить управление, чтобы больше "в ту сторону" не бежал
  2. либо сохранять прошлую позицию персонажа, и если новая выходит за границу, сбрасывать позицию на прошлую (по одной из осей)
  3. если делать передвижение с использованием физики (Rigidbody), то достаточно окружить игровую зону коллайдерами, и один на персонажа поцепить. Тогда физика сама будет всё считать, и зону можно легко сделать произвольной формы.
Ответ написан
zZaKko
@zZaKko
Люблю стратегии и Unity.
Определи координаты границ сцены (нужные границы тебе) и в проверяй ли обьект находиться за пределами этой границы. Если да то возвращай персонажа на позицию крайних координат.
public int max_x;
void Update(){
if(this.transform.position.x > max_x)
this.transform.position = new Vector(max_x, this.transform.position.y,this.transform.position.z);
}

p.s. и так для каждой границы (max_x, min_x, max_y, min_y, max_z, min_z).
Ответ написан
Комментировать
@ReWire_92
Коллайдер на игрока и коллайдеры по границам игровой зоны
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы