自动将字符移动到特定目标而不是键盘控件Unity3d

时间:2018-11-19 08:03:51

标签: c# unity3d

我想将角色自动移动到以下对象,而不是键盘控件,我的代码在键盘控件上工作正常,我试图将目标添加为游戏对象,并尝试使角色跟随它,“ 虚拟”是我的公共变量是变量,我将目标分配为游戏对象”,这是到目前为止的代码,

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 :(得分:0)

它不起作用没什么意义。它崩溃了吗,显示错误,没有移动,没有移动到预期的其他地方?

我假设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)