2016-09-18 12 views
0

実行時に変数のアクセシビリティをUnity C#で変更する余地があるかどうかを知りたいですか?なぜなら、スクリプトが別の状態を使用しているときに、不要なパブリック変数を隠すためです。いくつかの動的変数を試しましたが、見つからないというエラーが出ます。 私はそれがspringDistanceですが、trapTypeの状態がspringOutの場合にのみ使用したいと思います。 いくつかのコード:インスペクタの実行時に変数のアクセシビリティを変更する

public class SpringTrap : MonoBehaviour 
{ 
private Transform objectToMove; 
// Use this for initialization 
public enum TypeOfTrap 
{ 
    springOut 
} 
[Tooltip("Set the type of trap here to use.")] 
public TypeOfTrap trapType = TypeOfTrap.springOut; 

public float springDistance; 

void Start() 
{ 
    objectToMove = transform.FindChild("ObjectsToAnimate"); 
} 
void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.gameObject.CompareTag("Player")) 
    { 
     //if the player has entered the danger zone 
     switch (trapType) 
     { 
      case TypeOfTrap.springOut: 

       break; 

     } 
    } 
} 
IEnumerator SpringOut(float springDistance) 
{ 
    float deltaDist = 0.0f; 
    while(deltaDist < springDistance) 
    { 
     objectToMove.position += 
    } 
} 

}

+2

あなたの質問は例がないのであまりにも漠然としているので、私は実際に暗闇の中で刺すようですが、[SerializeField](https://docs.unity3d.com/ScriptReference/SerializeField.html)属性? – TVOHM

+0

私はしましたが、私の問題を解決しなかった、私はそれを間違った方法で使用したかもしれません。私はいくつかのコードで質問を更新します。 – agiro

+0

現在、スクリプトに関係のないエディタ(インスペクタ)で非表示にしたいので、不必要に変更されないようにしたいのですか? –

答えて

0

あなたが達成しようとしている何をする簡単な方法は、抽象を作成することですトラップクラスを作成し、異なるタイプのトラップをサブクラス化します。

抽象的なトラップクラスは、衝突を処理して、抽象メソッドTriggerを呼び出します。

public abstract class Trap : MonoBehaviour { 

    void OnTriggerEnter2D(Collider2D other) 
    { 
     if (other.gameObject.CompareTag("Player")) 
      Trigger(other.transform); 
    } 

    protected abstract void Trigger (Transform victim); 
} 

トラップを拡張してトリガーメソッドをオーバーライドすることで、スプリングトラップを簡単に作成できます。インスペクタに表示されるプロパティのみを使用して、トラップのばらつきに追加したものであるため、

public class SpringTrap : Trap { 

    public float SpringDistance; 

    protected override void Trigger (Transform victim) { 
     victim.position += Vector3.up * SpringDistance; 
    } 
} 

今、あなたは、トラップタイプに基づいて無関係な性質を隠して心配する必要はありません。

関連する問題