2016-11-01 3 views
1

제작 한 현재 설정을 게임 오브젝트합니다.레이 캐스트 감지

목표는 뒤쪽 격자의 각 타일에서 레이 캐스트를 생성하는 것입니다. 그러면 레이의 앞부분에 뭔가가 있는지 감지하고 타일 태그를 변경합니다.

int tileNumber = 0; 
     for (float y = 0; y > mapHeight; y--) 
     { 
      for (float x = 0; x < mapWidth; x++) 
      { 
       tile.GetComponent<Renderer>().enabled = true; 
       GameObject go = Instantiate(tile, new Vector3(x/3, y/3, -2), Quaternion.identity) as GameObject; 
       tileNumber++; 
       go.name = "tile" + tileNumber; 
       go.tag = "grid"; 

       RaycastHit hit; 
       Vector3 fwd = go.transform.TransformDirection(Vector3.forward); 
       Debug.DrawRay(go.transform.position, fwd * 50, Color.green); 
       if(Physics.Raycast(go.transform.position, fwd, out hit, 200)){ 
        go.tag = "walkableGrid"; 
       } 

      } 
     } 

그러나 디버그 레이도 표시되지 않습니다, 태그 중 하나를 변경하지 않습니다

내 코드는 다음과 같습니다. 실제로 내지도 그리드를 감지하지, 작업중인 선을 보여줍니다

이미지 : enter image description here

편집 : 프로그래머가 나를 도와했지만, 그의 솔루션은 나를 위해 작동하지 않았다. 그는 누군가가 관심 그래서 만약 그가 같은 문제를 heres, 다른 곳에서 내 프로젝트 거짓말을 할 수 언급 한 것 : https://www.dropbox.com/s/535soeswrgq37b4/MTA16336_Project_Boardgame.rar?dl=0

+0

"작동하지 않는 것 같습니다. 디버그도 표시되지 않습니다."코드에 Debug.Log가 없습니다. 작동하지 않고 작동하는 것은 무엇입니까? – Programmer

+0

"Debug.DrawRay (go.transform.position, fwd * 50, Color.green);" 가시 광선을 보여 주어야합니다 –

+0

그래,하지만 얼마나 자주 호출되는지에 달려 있습니다. 매 프레임마다 호출되지 않는지 확인하기가 어려울 것입니다. Debug.Log를 추가하여 코드 일부에 도달했는지 확인해야합니다. – Programmer

답변

0

그것은 가치가 아무것도 그 아무 것도 없음 어느 쪽도 rigibody도 아니고 입자 가속기가없는 개체 "지도". 입자 가속기없이

Physics.Raycast 것이다 결코 는 작동합니다.

이 게임은 2D 게임이므로 박스 콜 리더 2D을 사용해야합니다. 또한 Rigidbody 2D을 첨부하십시오.

마지막으로 Physics.Raycast과 함께 사용되며 2D colliders 와만 사용됩니다. 그걸 RaycastHit2D.Raycast으로 대체해야합니다. 또한 RaycastHitRaycastHit2D으로 대체해야합니다.

쉽게, 간단하게 변경 만들려면 :

RaycastHit hit; 
Vector3 fwd = go.transform.TransformDirection(Vector3.forward); 
Debug.DrawRay(go.transform.position, fwd * 50, Color.green); 
if (Physics.Raycast(go.transform.position, fwd, out hit, 200)) 
{ 
    go.tag = "walkableGrid"; 
} 

RaycastHit2D hit; 
Vector3 fwd = go.transform.TransformDirection(Vector3.forward); 
Debug.DrawRay(go.transform.position, fwd * 50, Color.green); 
hit = Physics2D.Raycast(go.transform.position, fwd, 200); 

if (hit) 
{ 
    go.tag = "walkableGrid"; 
} 

이 지금만큼 Box Collider 2D 각 블록에 부착 될 때 작동합니다. 또한 Rigidbody 2D을 첨부하십시오. 떨어지는 경우 중력 눈금0으로 설정하십시오.

+0

정확한 코드를 사용했으며 rigidbody를 추가했으며 edge-collider와 box-collider로 테스트했지만 코드는 여전히 if bracket 내부 코드에 도달하지 않습니다. 인스턴스화시 오브젝트를 GameObject로 변환 할 때 2D 감지로 작동합니까? –

+0

"인스턴스화시 오브젝트를 GameObject로 변환하면 여전히 2D 감지로 작동합니까?" 예. 기억해, 나는 Box Collider 2D ** ** Box Collider가 아니라고 말했다. 이들은 완전히 다른 것들입니다. – Programmer

+0

현재 EdgeCollider2D를 사용 중입니다. 그런 다음 Box Collider2D를 사용하여 테스트했지만 여전히 동일한 결과를 얻었습니다. 나는 더 많은 정보를 줄 수 있었으면 좋겠어.하지만 그게 내가 생각할 수있는 전부 야. –