【发布时间】:2021-09-07 08:44:33
【问题描述】:
在我的 2D 自上而下的游戏中,我试图将一条光线从我的玩家投射到他所面对的方向。一切都很顺利,但问题是玩家停止移动光线投射的那一刻(这很有意义,我正在使用 Input.GetAxis,它在停止移动时返回值 0)。我一直在尝试使用 Transform.right / TransformDirection 它只是让光线停留在同一位置,而不是玩家面对的位置。即使我的播放器停止移动,我有什么方法可以让光线投射继续进行吗?
public Collider2D GetBarrleCollider()
{
Physics2D.queriesStartInColliders = false;
RaycastHit2D hit = Physics2D.Raycast(this.transform.position, movement, playerDistance);
if (hit.collider != null && hit.collider.gameObject.CompareTag("Pickup"))
{
Debug.Log("Return NOT null" + " " + hit.collider.tag);
return hit.collider;
}
else
{
Debug.Log("Return null");
return null;
}
}
public void MovementHandler()
{
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
rb2D.MovePosition(rb2D.position + movement * getPlayerMovementSpeed * Time.deltaTime);
}
【问题讨论】:
-
您没有显示在什么条件下完成光线投射以及与问题似乎所在的 Input.GetAxis 的关系。我会显示所有可能出现问题的代码
-
将光线投射代码移到 GetAxis.. 条件之外。 transform.forward 会给你玩家面对的方向。
-
只是更新我所做的,使脚本工作。我需要确保最后一个方向已保存为矢量 2,所以我只是创建了一个新矢量 2 并在那里保存了当前的运动方向,让玩家知道一直在哪里看 If(movement != Vector2.Zero){ faceDirection = 运动; }
标签: c# unity3d raycasting