2017-09-07 7 views
0

私は全く新しいコーディングをしていますので、どんな助けでも大きな価値があります。トリガされたスピニングキューブ - C#Unity

私は、コライダーがキューブのボックスコライダーに入ったときに回転するキューブ(材料を取り込んだFBXです)を取得しようとしています。私は2つのチュートリアルに従っています。最初は回転キューブで、成功しました。もう1つは、「トリガーゾーン」が入力されたときにサウンド/ミュージックをゲームに追加しています。これは問題ありませんでした。

トリガーゾーンが入力されたときにキューブを回転させたいので、2を組み合わせて動作させることができると思っていました。理解が不足しているため、なぜスクリプトがキューブに追加されたときに私が書いたものが動作していないのか分かりません。

私は続いキューブチュートリアル - https://unity3d.com/learn/tutorials/topics/scripting/spinning-cube

私は、その後の音楽チュートリアル - https://unity3d.com/learn/tutorials/topics/audio/adding-music-your-game

そして、上記を組み合わせることに基づいて回転するキューブで私の失敗した試み -

using UnityEngine; 
using System.Collections; 

public class TriggerSpinControl : MonoBehaviour 
{ 
    public float speed1 = 25f; 
    public float speed2 = 100f; 


    void OnTriggerEnter(Collider other) 
     { 
      if (other.CompareTag("TriggerZone")) 

      { 

      transform.Rotate(Vector3.forward, speed1 * Time.deltaTime); 
      } 
     } 

     void OnTriggerExit(Collider other) 
     { 
      if (other.CompareTag("TriggerZone")) 
      { 

      transform.Rotate(Vector3.forward, speed2 * Time.deltaTime); 
      } 

     } 


} 

はどれ役立つだろう感謝する。

おかげで、私はスクリプトを作成しようとしたの下ラターの答えに続き


2つのスピンスクリプトを求めて(vaiousビットおよびその他の質問と回答からの情報に基づいて)で実行しますTriggerEnterとTriggerExitがありますが、私がまだ何をやっているのか理解しようとしているので、動作していないようです。

スピン・スクリプトはゲームオブジェクトには付属していませんが、「アセット」フォルダ内にあります。

using UnityEngine; 
using System.Collections; 

public class TriggerSpinControl : MonoBehaviour 

{ 
    private SpinFast spinfast; 
    private SpinSlow spinslow; 


     void OnTriggerEnter(Collider other) 
     { 
     if (other.CompareTag("TriggerZone")) 

      {   

       spinfast = GetComponent<SpinFast>(); 
      } 

     } 

     void OnTriggerExit(Collider other) 
     { 
      if (other.CompareTag("TriggerZone")) 
      { 

       spinslow = GetComponent<SpinSlow>(); 

      } 

     } 


} 

ちょうどナンセンスの負荷になる可能性がありますが、私は正しい軌道に乗ることを望んでいます。オブジェクトがトリガーに入ったとき

おかげ

+0

利用OnTriggerStay():) – ElDuderino

答えて

3

OnTriggerEnterは一度呼び出されます。

OnTriggerExitは、オブジェクトがトリガーを終了したときに一度呼び出されます。

オブジェクトをにする場合は、を回転させて、別の方法を試してみてください。

OnTriggerStayは、現在トリガー内にあるオブジェクトごとにフレームごとに約1回呼び出される別のイベントです。これにより、フレームごとに少しずつ回転を続けるために、フレームごとに一度transform.Rotateに電話をかけることができます。これはシンプルだが脆弱な解決策です。

ユニティは「コンポーネントベース」アーキテクチャです。スクリプトはそれぞれコンポーネントであり、複数のコンポーネントを組み合わせて使用​​することが効果的です。フレームごとに1回呼び出されるUpdateイベントの回転動作を管理するスクリプトを1つ作成し、トリガーの入力/終了に基づいて回転スクリプトを有効または無効にする別のコンポーネントを作成できます。

0

これは私のソリューションです。

コード(C#の):

using UnityEngine; 
using System.Collections; 

public class TriggerSpinControl : MonoBehaviour 
{ 
    public float speed1 = 25f; 
    public float speed2 = 100f; 

    private void Update() 
    { 
     transform.Rotate(Vector3.forward, speed2 * Time.deltaTime); 
    } 

    private void OnTriggerEnter(Collider other) 
    { 
     if (other.tag == "MainCamera") 
     { 
      enabled = false; 
     } 
    } 

    void OnTriggerStay(Collider other) 
    { 
     if (other.tag == "MainCamera") 

     { 

      transform.Rotate(Vector3.forward, speed1 * Time.deltaTime); 
     } 
    } 

    private void OnTriggerExit(Collider other) 
    { 
     if (other.tag == "MainCamera") 
     { 

      enabled = true; 
     } 
    } 
} 
関連する問題