2017-02-22 2 views
0
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class BoxCollider : MonoBehaviour { 

    private float degrees = 180f; 
    public float rotateSpeed = 10f; 
    private GameObject character; 
    private bool entered = false; 


    // Use this for initialization 
    void Start() 
    { 

    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (entered == true) 
     { 
      character.transform.rotation = Quaternion.Slerp(character.transform.rotation, Quaternion.Euler(degrees, 0, degrees), rotateSpeed * Time.deltaTime); 
     } 
    } 

    void OnTriggerEnter(Collider c) 
    { 
     character = c.gameObject;   
     entered = true; 
    } 
} 

初めてキャラクターが壁に衝突しました(空のゲームオブジェクトとボックスコライダー)。これは、入力された文字を真に変更し、文字を回転しています。文字がボックスに衝突したときに論理的な方法でbool変数を使用するにはどうすればよいですか?

しかし、回転した後、他の壁に衝突して、他の壁に到達した上で、私は、ブレークポイントを使用し、それが一部になっています:それはアップデート機能になってきたときに

void OnTriggerEnter(Collider c) 
     { 
      character = c.gameObject;   
      entered = true; 
     } 

しかし:

if (entered == true) 

この行にブレークポイントを使用し、入力はfalseです。 理由がわかりません。

最初は壁と衝突しますが、2番目の壁では壁と衝突しますが、それは間違いです。

私はこのブールを使用している理由は、壁(ボックス)を衝突させるときだけ、キャラクターを回転させることです。

地形の周りに4つの空のgameobjectsがあり、それぞれにボックスコライダーistriggerがオンに設定されており、このスクリプトもすべてのゲームオブジェクトに関連付けられています。

最初に入力した理由が2度目に間違っていることがわかりません。

+1

確かに正しいエンティティが表示されているかデバッグしていますか? (多くの場合、ブレークポイントは誤解を招かない限り混乱します。) – RuDevel

答えて

1

OnTriggerEnterが機能しない(壁に衝突する場合は、OnCollisionEnterが必要ですか?)か、enteredをfalseに設定するスクリプトがあります。 isTrigger enteredに設定されているコライダーを入力すると、あなたが送信したコードによれば常に真となるためです。多くのオブジェクトにスクリプトを添付していないことを確認してください。また、別のオブジェクトで誤っている可能性があるため、誤解を招くようなデバッグ値を与える可能性があります。

も注目に値する...

注:コライダーの一つは、非動剛体が付属している場合、衝突のイベントのみが送信されます。

または、CharacterControllerを使用している場合。 enteredをfalseに設定するコードがある場合は、それを追加のヘルプに含める必要があります。

+0

まだ動作しません。スクリプトは、4つの空のgameobjectsのそれぞれに添付され、box colliderコンポーネントが各gameobjectに追加されます。したがって、スクリプトは各ゲームオブジェクトに4つの場所に添付されています。そして、ThirdPersonController(1)私は2つのThirdPersonControllersを持っています。私はそれにアニメーター、リジッドボディー、カプセルコライダー、第三者ユーザーコントロール(スクリプト)、第三者キャラクター(スクリプト)のすべてのコンポーネントを持っています。リジッドボディで重力の使用がチェックされます(オンに設定されています)。 –

+0

すべての壁がプレイヤーと衝突したときにプレーヤーが回転しています... '入力済み 'をfalseに設定するコードはありませんか? – Maakep

+0

まだ動作していません。しかし、私はいくつかのテストをしました。壁にあるインスペクタの最初の壁に衝突した後、更新機能に達すると、入力されたチェックボックスがチェックされているので、それは正しいです。そして回転した後、それは2番目の壁に移動していると私はこの壁が入力された近くのチェックボックスはチェックされていない偽であることがわかりますが、それはまだ最初の壁で真であるとチェックされています。次に、それは2番目の壁に触れていて、入力した近くのチェックボックスもチェックされています。だから、入力された両方の壁がチェックされていることが真です。しかし、それは第2の壁に戻って回転していません。 –

関連する問題