我有一个玩家和一个目标方向(表示为标准化的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(白色光线是从玩家中心穿过红色十字准线,但不是):
答案 0 :(得分:0)
所以这是我自己的调试功能的错;我使用的是Debug.DrawRay
而不是Debug.DrawLine
。区别在于,DrawRay
取一个原点和一个方向,而我给它起点和终点,完全弄乱了结果。使用DrawLine
解决了我的问题。