2016-11-28 1 views
1

저는 첫 번째 Unity 게임을 작업 중이며이 스크립트에 문제가 있습니다. Unity 5 - Physics.OverlapSphere가 작동하지 않습니다.

void FixedUpdate() 
{ 
    Debug.Log ("dead is " + dead); 
    dead = Physics.OverlapSphere (frontCheck.position, radius, whatIsWall); 

    if (dead == true) 
    { 
     Debug.Log ("Player died!"); 
     Invoke ("Reset", 1); 
    } 
} 

void Reset() 
{ 
    SceneManager.LoadScene ("Game"); 
} 

가 나는 플레이어의 앞에 변환을 사용, 플레이어가 벽에 실행될 때 부울 dead 사실 수 있도록 노력하고 있습니다. Physics2D.OverLapPoint를 사용하고 있었지만 잘 작동했지만 플레이어의 물리를 3D로 변경해야했습니다. 지금 OverLapSphere를 사용하려하지만 오류 메시지가 나타납니다. "암시 적으로 형식 UnityEngine.Collider[]bool으로 변환 할 수 없습니다.이 작업을 수행하려면 어떻게해야합니까? 매우 초보자 인 Unity와 일반적으로 코딩하기 때문에 간단 할 것입니다. 수정. 어쩌면 난 그냥 다른 뭔가를 시도해야? 감사합니다.

답변

0

더 나은 접근 방법

나는 충돌을 감지 할 수있는 더 나은 방법이 OnColissionEnter 사용 믿습니다. https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

간단한을 가질 수 있습니다 그 방법 확인 :

당신이 OverlapSphere을 선호 어떤 이유로, 당신은 당신 같은 부울을 반환하지 않는 것을 알 필요가있는 경우 OverlapSphere

를 사용 https://unity3d.com/learn/tutorials/topics/physics/detecting-collisions-oncollisionenter

: 여기

void OnCollisionEnter(Collision col) { if (col.gameObject.tag == "Wall"){ dead = true; } } 

짧은 그것에 대한 튜토리얼입니다 기대하고있다. 대신 구와 겹치는 모든 충돌자를 반환합니다.

https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html

나는 당신이되어 찾고있는 것을 믿습니다

void FixedUpdate() 
{ 
    Debug.Log ("dead is " + dead); 
    Collider[] hitColliders = = Physics.OverlapSphere (frontCheck.position, radius, whatIsWall); 

    if (hitColliders.length != 0) { 
     Debug.Log ("Player died!"); 


     Invoke ("Reset", 1); 
    } 
} 
+0

그것을 않았다! 감사! – MayorDump

0

내가이 일을하기 위해 어떻게해야합니까?

저는 개인적으로 다른 접근 방식을 사용합니다. 가장 쉬운 솔루션 중 하나는 콜리더와 객체 태그를 사용하는 것입니다.

코드가 작동하지 않는 이유는 무엇입니까? 변수 "dead"가 bool이 아니며 'UnityEngine.Collider []'가 값 "true"일 수 없기 때문입니다.

다음 스크립트를 할당 한 Unity prefab 1 인칭 컨트롤러의 예입니다. 그 후에 모든 collider와 tag가 ro "red"로 설정되어있는 모든 객체는 scrip에 반응합니다.이 경우 "나는 trigger와 충돌했습니다"+ 뭔가를 쓰게됩니다.

using UnityEngine; 

public class collisionTest : MonoBehaviour { 
    void OnTriggerEnter(Collider trigg) 
    { 
     if (trigg.gameObject.tag == "Red") 
     { 
      Debug.Log("I have collided with trigger" + trigg.gameObject.name); 
      //do your stuff 
     } 
    } 
} 

enter image description here enter image description here

+0

개체가 서로 통과해야하는 경우가 아니면 일반적으로 OnCollisionEnter가 더 좋지 않습니까? screenshots에 대한 좋은 작업, 전체 튜토리얼의 중간에 있습니다.) – pulekies

+1

Physics.OverlapSphere는 충돌이 발생하는 정확한 지점과 어떤 반경을 사용하여 폭발과 같은 상황에 더 유용합니다. 질문은 플레이어가 어떤 시점에서 벽을 치 었는지 간단히 확인하는 방법입니다. 그래서 콜라이더는 괜찮다고 생각합니다. 좋아하는 화면 주셔서 감사합니다 :) – Universus

관련 문제