C# 分配给不同类C的方法列表#

C# 分配给不同类C的方法列表#,c#,list,action,unity3d,C#,List,Action,Unity3d,我有一个沙盒世界,里面有各种各样的游戏对象,最终会有一组交互,玩家点击这个对象后可以选择(最好的例子是模拟人生) 我基本上希望每个对象包含一个从另一个方法列表中分配的方法列表。所以可能有一棵树有“shake”方法,我想把“shake”方法分配给树的交互列表,但是shake方法是在另一个类中定义的。我也可能有一辆车,也可能有“摇晃”的方法 我知道我可以有一份行动清单 List<Action> interactions = new List<Action>(); 列表交互=

我有一个沙盒世界,里面有各种各样的游戏对象,最终会有一组交互,玩家点击这个对象后可以选择(最好的例子是模拟人生)

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

我知道我可以有一份行动清单

List<Action> interactions = new List<Action>();
列表交互=新建列表();

这个列表可以用方法填充,但这是我上面解释的最好的解决方案吗?我能不能有一个枚举,包含所有可能的交互,自动为特定的游戏对象调用特定的方法?

我不知道你到底想实现什么,以及它是否是最好的解决方案,但对我来说,这似乎是战略模式的一个很好的用途:

// 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()
    {
        ....
    }
}
//这是您的“策略”
公共接口交互
{
无效Do();
}
公共类游戏对象
{
//这是你的互动列表-你可以用它做任何你想做的事情。
公共列表交互{get;set;}
}
//这是一个互动
公开课:互动
{
公营部门
{
....
}
}

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

这将要求您改变在另一个类中定义所有操作的模式,但应该使事情保持干净

然后,要做每个动作,你只需检查游戏对象是否有该组件,并执行其动作。
Shake s=gameObject.GetComponent()
如果(s!=null)
{
s、 震动(震动参数);

}

您所提出的是一个合理的解决方案,基于您所分享的很少内容。你想用枚举做什么?@DanPuzey我可能想的有点错,但我有一个可用的交互列表,比如
enum Interaction{Shake,gramb}
我可以分配给
列表
以使调用交互更容易如果您添加了
名称
属性,那么海报建议的
枚举
也就不需要了。感谢这个建议,我喜欢为
交互使用界面的想法。我基本上是在尝试为各种不同的对象重用预定义的交互。因此,我可能需要为包含
列表的对象提供一个
iInteractive
接口,这也是一个很好的建议。所以我可以有一个可能的交互类的完整文件夹,我可以简单地附加和
GetComponent
。但是我是否可以在这些类上定义
IInteraction
接口,然后在
void Start
上根据
IInteraction
检查所有对象组件,并将它们添加到列表中。很容易打电话给他们,绝对。每个类都必须从MonoBehavior继承,但您也可以让它们实现您想要的任何其他接口。制作一个
IInteraction
接口,它定义了一个
DoInteraction
方法或任何东西,应该可以正常工作。您也可以有多个接口,例如带有
DoItNow
方法的
IInstantAction
,以及带有
StartAction
StopAction
方法的
IPassiveAction
接口。所以它就是
classmyclass:monobhavior,IInteraction