概要
由一个简单的问题说起,谈谈如何在Unity里增加功能
包括:
- 遇到的需求是什么
- 通过变量实现
- 通过继承实现
- 通过组合实现
- 通过UnityEvent实现
- 一些关于设计的想法
遇到的需求是什么
知乎上看到这么个问题“unity新手,如何通过选中小球,从而达到只控制这一个小球,而不控制其他小球的效果?”
问题本身很简单,一眼看到我就划走了。
但突然想到可以结合这个问题来聊一聊如何给一个既有的类拓展功能,那就还是浅淡谈吧!
实现方案
实现这个需求有多种方案。
假设我们已经有一个Ball.cs挂在所有的球上,如何实现这个需求?
方案1 使用变量控制
修改Ball.cs。
在Ball.cs里声明一个public的 controllable变量,默认为false。
在触控控制代码前外嵌套一个if/else。即
if(controllable){
//触控控制
}
然后只给要控制的小球开启controllable(在Inspector里勾选它),其他的不动。
这是最简单的方法。
若没有其他的需求,用这个就好了。
但若项目复杂度高点,就需要其他方案了。(否则你的ball.cs会越来越庞大,越来越难维护)
方案2 使用继承
维持Ball.cs不变。
再建一个ControllabeBall.cs是你的可控制小球,Controllab