2017-11-05 1 views
0

내 게임 플레이어가 다른 게임 개체를 확인하기 위해 레이 캐스트를 보내도록했습니다. 상자라고 말하면 상자의 Rigidbody2D에 액세스하고 키를 눌렀을 때 힘을 가하고 싶습니다. 이런 상황을 처리하는 방법은 무엇이며 어떤 방법으로 가장 효율적이고 유연하게 생각하십니까?RaycastHit2D 타겟의 Rigidbody2D에 액세스 하시겠습니까?

여기까지 제가 지금까지 작업하고 있습니다.

RaycastHit2D hit = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y - 0.6f), new Vector2(transform.position.x, transform.position.y - 1.6f)); 

if(hit.collider != null && Input.GetKey(KeyCode.E)) 
     { 
      // access gameobject stored to "hit" and AddForce to it's Rigidbody2D?? 
     } 

답변

1

가변 hitRaycastHit2D는 유형이다. RaycastHit2D의 속성은 rigidbody이며 Rigidbody2D component of the object that was hit.을 반환하므로 hit.rigidbody으로 액세스 할 수 있습니다.

또 다른 대안은 hit.gameObject.GetComponent<Rigidbody2D>()을 사용하는 것이지만 GetComponent() 호출의 성능 영향에주의하십시오.

해당 Rigidbody2D에 힘을 추가하려면 AddForce() method과 함께 Vector2와 선택적 강제 모드를 제공하기 만하면됩니다. 그러면 hit.rigidbody.AddForce()이 작동합니다.

또한 Physics2D.Raycast 호출의 정확한 시작점과 방향을 알려주는 것이 좋습니다. y 축에서 1 단위 거리 이내에있는 물체가 있는지 확인하려고하는 것 같습니다. 이 경우 방향은 Vector2.up이어야하며 거리는 1.0f가되어야합니다. Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y - 0.6f), Vector2.up, 1.0f)

+1

대답을 주셔서 감사합니다. 2D가없는 .rigidbody는 3D 이후로 내게 던져졌습니다. 2D 물리 라이브러리는 개별적이며 서로 작동하지 않습니다. – Pyreal

+0

도움이 된 것을 기쁘게 생각합니다! 대부분의 경우 구성 요소에 접미사 2D 만 배타적으로 포함되는 경우 구성 요소의 속성이 2D 대응 물을 참조한다고 가정하는 것이 안전합니다. –

관련 문제