Unity 2D光线投射无法实现预期

时间:2018-03-09 03:35:08

标签: c# unity3d

我有一个玩家和一个目标方向(表示为标准化的Vector2,其中例如(1.0,0)表示直指向右)。我想在目标方向投射一个来自玩家的射线,直到它撞到我的墙层的一部分。我不知道为什么,但是现在光线投射根本没有瞄准正确的方向,如Debug.DrawRay所示。这是我的相关代码:

 private void Update() {
     SetAimDirection();
     DoRaycast();
 }
 private void DoRaycast() {
     if (Input.GetButtonDown("Cast")) {
         RaycastHit2D hit = Physics2D.Raycast(transform.position, aimDirection, groundLayer);
         if (hit.collider != null) {
             Debug.Log(hit.collider.tag + " " + hit.point + " aim: " + aimDirection);
             Debug.DrawRay(transform.position, hit.point);
         }
     }
 }

private void SetAimDirection() {
    Vector2 aim = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));

    if (aim.magnitude == 0) {
        aim.x = facingRight ? 1 : -1;
    }

    aimDirection = aim.normalized;

    // Draw the reticle a constant radius from the player in aimDirection.
    Vector2 reticlePosition = new Vector2(body.position.x + (aimDirection.x * reticleRadius), body.position.y + (aimDirection.y * reticleRadius));
    crosshair.transform.position = new Vector3(reticlePosition.x, reticlePosition.y, 0);
  }

这是一个更好地说明问题的gif(白色光线是从玩家中心穿过红色十字准线,但不是):

enter image description here

1 个答案:

答案 0 :(得分:0)

所以这是我自己的调试功能的错;我使用的是Debug.DrawRay而不是Debug.DrawLine。区别在于,DrawRay取一个原点和一个方向,而我给它起点和终点,完全弄乱了结果。使用DrawLine解决了我的问题。