1

Unity にはサンドボックスの世界があり、最終的にプレイヤーがこのオブジェクトをクリックすると選択できる一連のインタラクションを持つさまざまな GameObjects があります (最も良い例は The Sims です)。

私は基本的に、各オブジェクトに、別のメソッド リストから割り当てられたメソッド リストを含めたいと考えています。「シェイク」メソッドを持つツリーがあるかもしれません。「シェイク」メソッドをツリーの相互作用リストに割り当てたいのですが、シェイクメソッドは別のクラスで定義されています。また、「シェイク」方式の車もあるかもしれません。

アクションのリストを取得できることを理解しています。

List<Action> interactions = new List<Action>();

このリストにはメソッドを入力できますが、これは上で説明したことに対する最良の解決策であり、特定のゲームオブジェクトの特定のメソッドを自動的に呼び出す可能性のあるすべての相互作用を含む Enum をどうにかして持つことができますか?

4

2 に答える 2

2

あなたが何を達成しようとしているのか、それが最善の解決策であるかどうかは正確にはわかりませんが、私にはこれが戦略パターンの良い使い方のように思えます:

// This is the 'strategy' in your case
public interface IInteraction
{
    void Do();
}

public class GameObject
{
    // Here is your list of interactions - you can do whatever you want with it.
    public List<IInteraction> Interactions { get; set; }
}

// Here is an interaction
public class Shake : IInteraction
{
    public void Do()
    {
        ....
    }
}
于 2012-08-02T13:36:52.783 に答える
1

これに対する 1 つのアプローチは、各アクションを独自の MonoBehavior スクリプトとして定義することです。あとは、各動作を各ゲーム オブジェクトにコンポーネントとしてアタッチするだけです。

これには、すべてのアクションを別のクラスで定義するというパターンを変更する必要がありますが、物事をきれいに保つ必要があります。

次に、各アクションを実行するには、そのゲームオブジェクトにそのコンポーネントがあるかどうかを確認して、そのアクションを実行するだけです。 Shake s = gameObject.GetComponent<Shake>();
if(s != null)
{
s.Shake(shakeParameters);
}

于 2012-08-02T13:47:28.920 に答える