1

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

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

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

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

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

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

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

这将需要您更改在另一个类中定义所有操作的模式,但应该保持事情非常干净。

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

于 2012-08-02T13:47:28.920 回答