2016-11-28 15 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"); 
} 

私は、プレイヤーがプレイヤーの前に変換を使用して、壁に実行したときにBOOL deadが真作るしようとしています。私はPhysics2D.OverLapPointを使用していましたが、正常に動作しましたが、プレーヤーの物理を3Dに変更する必要がありました。私は今OverLapSphereを使用しようとしていますが、エラーメッセージ "Imを暗黙的にboolに変換することはできません。固定します。たぶん私はちょうど何か他のものを試してみる必要がありますか?ありがとう。

答えて

0

より良いアプローチ

私は衝突を検出するためのより良いアプローチがOnColissionEnter使用していると考えている。 https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

あなたは、単純なを持つことができますその方法次のようなチェック:

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

その上の短いチュートリアルです:あなたはOverlapSphereを好む何らかの理由で、その後、あなたはそれがあなたのようにブール値を返さないことを知る必要がある場合OverlapSphere

を使用してhttps://unity3d.com/learn/tutorials/topics/physics/detecting-collisions-oncollisionenter

期待している。代わりに、球と重なるすべてのコライダーを返します。

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

私は個人的には異なるアプローチを使用してオーバーラップします。最も簡単な解決策の1つは、衝突者とオブジェクトタグを使用することです。

なぜあなたのコードは機能していないのですか?これは、変数 "dead"がboolでなく、 'UnityEngine.Collider []'が値 "true"でないことが主な原因です。

これは、以下のスクリプトを割り当てたUnity prefab 1st personコントローラの例です。その後、すべてのコライダーとタグがro "red"に設定されているオブジェクトは、scripに反応するようになります。この場合、 "トリガーと衝突しました" +何かが書き込まれます。それをしなかった

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は通常より優れていませんか?しかしスクリーンショットでうまくいって、あなたは完全なチュートリアルの途中です; – pulekies

+1

Physics.OverlapSphereは、衝突が起こる正確なポイントを得ることができ、どの半径でそれが爆発のようなものにもっと役立つからです。問題は、プレイヤーがどの時点で壁に当たったかどうかを単に確認する方法です。だから私はコライダーが大丈夫だと思う。好きな画面ありがとう:) – Universus

関連する問題