2017-01-29 1 views
0

저는 Unity에서 레이크 캐스트를 사용하여 점프하도록하는 캐릭터를 보유하고 있습니다. 그러나 레이캐스가 땅에 떨어지지 않더라도 (나는 디버그 출력으로 레이를 볼 수 있습니다) 플레이어는 여전히 뛰어 넘을 수 있습니다. 왜 광선이 항상 그것이 충돌하고 있다고 생각하는지 어떤 아이디어? 광선이 내 캐릭터 충돌자를 때릴 수 있습니까? 필자는 수 시간 동안 온라인 검색을 해왔으며, 내가 찾은 어떤 것도 상황을 고치고있는 것이 아닙니다.Unity Raycast가 항상 true를 반환합니다.

void FixedUpdate() 
{ 
    Ray ray = new Ray(); 
    RaycastHit hit; 
    ray.origin = transform.position; 
    ray.direction = Vector3.down; 
    bool output = Physics.Raycast(ray, out hit); 
    Debug.DrawRay(ray.origin, ray.direction, Color.red); 
    if (Input.GetKey(KeyCode.Space) && output) 
    { 
     r.AddForce(Vector3.up * 1f, ForceMode.VelocityChange); 

    } 

} 
+0

'ray.origin'을 문자 충돌기 외부로 이동 시키려고 했습니까? – Kolichikov

+0

네, 레이를 낮추면 (캐릭터와 땅 아래) 점핑이 없으므로 말이됩니다. 하지만 캐릭터 (가능한 한 캐릭터 피트가있는 레벨에 가깝고 지상 위 여전히 위에있는 캐릭터) 아래에 놓습니다. 땅을 감지하지 않고 항상 점프를 허용합니다. – SJR59

+0

위의 경우와 마찬가지로 레이를 내 캐릭터 위에 놓을 때도 마찬가지입니다. , 그것은 여전히 ​​뛰어 넘을 수 있습니다 ... – SJR59

답변

2

는 광선이 내 문자 입자 가속기를 타격 할 수 없습니다 : 여기 내 코드는?

예, 가능합니다.

실제로 이것은 Debug.Log으로 쉽게 해결할 수있는 문제입니다.

if 문 안에 Debug.Log("Ray Hit: " + hit.transform.name);을 넣으면 어떤 객체가 Raycast을 차단하고 있는지 표시됩니다.

이것이 실제로 문제가되는 경우 this 게시물은 여러 가지 방법으로 문제를 해결합니다. 이 질문은 2D가 아닌 3D에 관한 것이기 때문에 그 대답과 코드는 조금 바뀝니다. 그냥 레이어를 사용하십시오. 플레이어를 레이어 9에 놓으면 문제가 사라집니다.

void FixedUpdate() 
{ 
    int playerLayer = 9; 

    //Exclude layer 9 
    int layerMask = ~(1 << playerLayer); 


    Ray ray = new Ray(); 
    RaycastHit hit; 
    ray.origin = transform.position; 
    ray.direction = Vector3.down; 
    bool output = Physics.Raycast(ray, out hit, 100f, layerMask); 



    Debug.DrawRay(ray.origin, ray.direction, Color.red); 
    if (Input.GetKey(KeyCode.Space) && output) 
    { 
     r.AddForce(Vector3.up * 1f, ForceMode.VelocityChange); 
     Debug.Log("Ray Hit: " + hit.transform.name); 
    } 
} 
+0

고마워! 디버그 로그의 출력에서 ​​문자 충돌자를 치고있었습니다! 하지만 위에서 언급 한 레이어 픽스가 작동하지 않는 것 같습니다. 위의 코드 대신 내 코드를 바꾸는 것 이상의 것이 있습니까? 내 캐릭터를 다른 방식으로 레이어 9에 "넣어야"합니까? – SJR59

+0

레이어 9에 레이어를 만든 다음 이름을 "플레이어"로 지정합니다. 캐릭터와 레이어를 "플레이어"로 선택하십시오. 내가 층을 말할 때, 나는 * Tag *를 의미하지 않는다. 레이어 생성 및 변경에 대한 [this] (https://unity3d.com/learn/tutorials/topics/interface-essentials/layers) youtube 비디오를 시청하십시오. 작업이 끝나고 작동하지 않을 때는'100f '를 약 800f로 늘려서 무슨 일이 일어나는지 확인하십시오. – Programmer

+0

'100'을'Mathf.Infinity'로 대체 할 수도 있습니다. – Programmer

관련 문제