分配给各种类C#的方法列表

时间:2012-08-02 13:30:19

标签: c# list action unity3d

这可能有点难以解释,所以请光临我......

我在Unity中有一个沙盒世界,其中包含各种游戏对象,最终会有一组玩家在点击此对象后可以选择的互动(最好的例子是模拟人生)。

我基本上希望每个对象都包含从另一个方法列表中分配的方法列表。所以也许有一个树有“摇动”方法,我想将“摇动”方法分配给树的交互列表,但摇动方法在另一个类中定义。我也可能有一辆车也可以采用“摇动”方法。

我知道我可以列出一个Action列表。

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

并且这个列表可以用方法填充但是这是我上面解释的最好的解决方案,并且我能以某种方式拥有一个包含所有可能的交互的枚举,它会自动调用特定GameObject的特定方法吗?

任何建议都会非常感谢!凯斯。

2 个答案:

答案 0 :(得分: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()
    {
        ....
    }
}

答案 1 :(得分:1)

一种方法是将每个操作定义为自己的MonoBehavior脚本。然后,您需要做的就是将每个行为作为一个组件附加到每个游戏对象。

这需要你改变你在另一个类中定义的所有动作的模式,但是应该保持相当干净。

然后,要执行每个操作,您只需检查该游戏对象是否具有该组件并执行其操作。 Shake s = gameObject.GetComponent<Shake>();
if(s != null)
{
s.Shake(shakeParameters);
}