C# 在结构内部管理变量的更简单方法

C# 在结构内部管理变量的更简单方法,c#,unity3d,C#,Unity3d,我对Unity的编程还很陌生,目前我正在一个基于法术的平台上进行实验 我的问题如下: 我有一个包含6个浮点数的结构(这个数字会随着我实现新的法术比例而增加),我需要在这个结构的每个浮点数中添加另一个浮点数。我只得到了6个元素,我已经手动添加了每个浮点,但由于我打算扩展这个结构,我需要一个更好的解决方案,而不是这个野蛮无用的实现 此外,下面的代码显示了一个拼写“我是”的示例 同时处理两个问题,因此有两倍多的行 这样简单的事情的代码 这就是我用它做的: Controller managerContr

我对Unity的编程还很陌生,目前我正在一个基于法术的平台上进行实验

我的问题如下: 我有一个包含6个浮点数的结构(这个数字会随着我实现新的法术比例而增加),我需要在这个结构的每个浮点数中添加另一个浮点数。我只得到了6个元素,我已经手动添加了每个浮点,但由于我打算扩展这个结构,我需要一个更好的解决方案,而不是这个野蛮无用的实现

此外,下面的代码显示了一个拼写“我是”的示例 同时处理两个问题,因此有两倍多的行 这样简单的事情的代码

这就是我用它做的:

Controller managerController = manager.GetComponent<Controller> ();
managerController.firstSpell.addValues (adder);
managerController.firstSpell.clampValues ();
Controller-managerController=manager.GetComponent();
managerController.firstSpell.addValues(加法器);
managerController.firstSpill.ClampValue();

结构的第一个实例通常应该是不可变的,也就是说,一旦实例化,它们就不会改变。您应该使用
。@Shrimp关于这个主题有一个很好的解读:其次,您需要缓存这个GetComponent。这对代码的美学和Unity都非常重要,因为Unity必须搜索未知的潜在组件,并处理这样做时可能发生的一切<代码>控制器管理器控制器=manager.GetComponent()@Shrimp为了澄清这种情况,您的
拼写结构(或无论名称是什么)的
firstSpell
adder
实例都是吗?另外,如果不是太长,您可以编辑您的问题以包含结构的定义吗?在我开始写答案之前,我想看看一些细节。@Fredrik我听说Unity 5为GetComponent调用管理一个内部缓存,因此不应该对多个调用造成性能损失。这看起来确实很难看。
struct
的第一个实例通常是不可变的,也就是说,一旦实例化,它们就不会改变。您应该使用
。@Shrimp关于这个主题有一个很好的解读:其次,您需要缓存这个GetComponent。这对代码的美学和Unity都非常重要,因为Unity必须搜索未知的潜在组件,并处理这样做时可能发生的一切<代码>控制器管理器控制器=manager.GetComponent()
@Shrimp为了澄清这种情况,您的
拼写结构(或无论名称是什么)的
firstSpell
adder
实例都是吗?另外,如果不是太长,您可以编辑您的问题以包含结构的定义吗?在我开始写答案之前,我想看看一些细节。@Fredrik我听说Unity 5为GetComponent调用管理一个内部缓存,因此不应该对多个调用造成性能损失。但这看起来确实很难看。
public class spell{
    public float damage;
    public float force;
    public float cooldown;
    public float damageOverTime;
    public float size;
    public float gravity;

    public void addValues(spell other){
        damage += other.damage;
        force += other.force;
        cooldown += other.cooldown;
        damageOverTime += other.damageOverTime;
        size += other.size;
        gravity += other.gravity;
    }

    public void clampValues(){
        damage = Mathf.Clamp(damage, Boundaries.damageMin, Boundaries.damageMax);
        force = Mathf.Clamp(force , Boundaries.forceMin, Boundaries.forceMax);
        cooldown = Mathf.Clamp(cooldown, Boundaries.cooldownMin, Boundaries.cooldownMax);
        damageOverTime = Mathf.Clamp(damageOverTime, Boundaries.damageOverTimeMin, Boundaries.damageOverTimeMax);
        size = Mathf.Clamp(size, Boundaries.sizeMin, Boundaries.sizeMax);
        gravity = Mathf.Clamp(gravity, Boundaries.gravityMin, Boundaries.gravityMax);
    }
}
Controller managerController = manager.GetComponent<Controller> ();
managerController.firstSpell.addValues (adder);
managerController.firstSpell.clampValues ();