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