Автоматическое перемещение персонажа к определенной цели вместо управления с клавиатуры Unity3d - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу автоматически Переместить моего персонажа к следующему объекту, вместо элементов управления клавиатуры, мой код отлично работает на элементах управления клавиатуры, я пытаюсь добавить цель в качестве игрового объекта и пытаюсь, чтобы персонаж следовал за ней, " dummy "переменная - это моя публичная переменная, где я назначаю свою цель как игровой объект", здесь мой код пока что,

protected virtual void UpdateMovement()
{
  // var local = Input.GetAxis("Horizontal") * Vector3.right + Input.GetAxis("Vertical") * Vector3.forward;
  //works fine at keyboards controls
  var local = new Vector3(0,0,0); 
  local = dummy.transform.position - transform.position; //  I tried this but did'nt work
  transform.LookAt(dummy.transform);
  var movement = new CharacterMovement();
  movement.Direction = getMovementDirection(local);

  if (WalkWhenZooming && _controller.ZoomInput)
  {
    movement.Magnitude = 0.5f;
    movement.IsSlowedDown = true;
  }
  else
  {
    if ((_motor.ActiveWeapon.Gun != null || _motor.ActiveWeapon.HasMelee) && FastMovement)
    {
      if (Input.GetButton("Run") && !_motor.IsCrouching)
        movement.Magnitude = 2.0f;
      else
        movement.Magnitude = 1.0f;
    }
    else
    {
      if (Input.GetButton("Run"))
        movement.Magnitude = 1.0f;
      else
        movement.Magnitude = 0.5f;
    }
  }
  _controller.MovementInput = movement;
}

1 Ответ

0 голосов
/ 19 ноября 2018

Это не работает не значит много.Это сбой, показывая ошибку, не двигаясь, двигаясь куда-то еще, чем ожидалось?

Я предполагаю, что переменная local является направлением (так почему бы не назвать его direction?).То, как вы рассчитываете, кажется правильным.Вы можете упростить код, заменив

var local = new Vector3(0,0,0); 
local = dummy.transform.position - transform.position;

на

var local = dummy.transform.position - transform.position;

Если он работает с клавиатурой, большая часть кода должна быть правильной.Если ваш персонаж движется слишком быстро, вы можете попытаться нормализовать вектор направления

local = (dummy.transform.position - transform.position).normalized;

Если он не двигается или не показывает ошибку, возможно, фиктивная фигура установлена ​​неправильно.Видите ли вы ожидаемую позицию, если вы делаете

Debug.Log(dummy.transform.position)

Редактировать: Вы также можете попытаться проверить правильность направления, добавив

Debug.DrawLine(transform.position, transform.position + local)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...