Unity中使用C#能否以内联方式批量编辑类实例?
Unity C# 批量编辑类实例的简洁实现方案
你想要的那种用=>内联批量赋值的写法,C#本身不支持直接这么写,但可以通过扩展方法实现类似的简洁效果,完美替代你现在用的两种繁琐写法。
第一步:实现通用扩展方法
先写一个通用的扩展方法,让任何类型都能通过它批量设置属性:
public static class ObjectExtensions { public static void Setup<T>(this T obj, Action<T> setupAction) { setupAction?.Invoke(obj); } }
这个方法的作用是接收一个实例和一个操作委托,把实例传给委托执行批量修改。
第二步:用类似内联的方式批量编辑Button
现在你可以用接近你想要的写法来修改Button实例了:
transform.Find("Difficulty/3").GetComponent<Button>().Setup(btn => { btn.interactable = true; btn.color = SStatusEffect; btn.blahblah = whatever; }); transform.Find("Difficulty/5").GetComponent<Button>().Setup(btn => { btn.interactable = true; btn.color = SStatusEffect; btn.blahblah = whatever; });
进阶:复用编辑逻辑
如果多个Button需要设置相同的属性,可以把编辑逻辑抽成一个变量,避免重复代码:
// 提前定义好通用的设置逻辑 Action<Button> setupDifficultyBtn = btn => { btn.interactable = true; btn.color = SStatusEffect; btn.blahblah = whatever; }; // 复用逻辑修改多个Button transform.Find("Difficulty/3").GetComponent<Button>().Setup(setupDifficultyBtn); transform.Find("Difficulty/5").GetComponent<Button>().Setup(setupDifficultyBtn);
为什么这个方案更好?
- 不用像第一种写法那样重复调用
transform.Find()和GetComponent<Button>(),减少不必要的性能开销 - 不用像第二种写法那样单独声明临时变量,代码更紧凑,逻辑更集中
- 扩展方法是通用的,不仅可以用于Button,任何类实例都能用这个
Setup方法批量修改属性
内容的提问来源于stack exchange,提问作者user3754283
相关产品推荐
相关产品推荐

