最近看了一个Unity3d官网的Native 2d的一个Demo,发现Unity3d是一个纯面向对象的游戏引擎,
面向对象的程度,让我惊叹。
正常的,对象之间完全是独立工作,比如一个普通的ARPG游戏,一个人物拥有武器,可以攻击怪物,
我们可以把攻击动作封装到人物当中,这样人物拥有攻击属性,可以攻击到敌人。
但,在纯面向对象的封装的语言,这是不可以的,这样会使程序复杂起来,细想想,人物跟攻击根本
没什么关系,所以攻击跟人物是没有关系的,攻击动作不会是绑定到人物角色本身,而与
攻击本身相关的是武器,攻击的动作应该是武器发出来的。这样来分析,符合面向对象的思想;
再说如果游戏都有音乐,如果是攻击音效,可以在攻击时播放,人物受到伤害会音效会在人物受到伤害时播放,
如果是游戏的主声音呢,背景音乐呢,我们都可以帮定到主Camera上,再在Camera逻辑判断再播放,
这样完全是可以的。但,Unity3d不会提议这么做,在Unity3d中,所有游戏元素都是对象,音乐也是,
我们可以把主背景音乐封装成一个对象,这样方便管理。
还有车子在路上跑,这里牵涉到司机,我们可以简单封装成:
车子本身的行为:前进,后退,刹车,加速,停车
车子本身的特征:高档车,中档车,低档车
车子的特征或速度表现:发动机引擎
司机对象应该说跟车子本身的行为的一致,当然司机有自己的简单行为,嘲笑,技术
具体的移动行为表现:轮胎
在一个合格的面向对象的封装中,车子的速度应该体现是发动机引擎与司机的技术,个人觉得如果对象封装,
得封装一个移动引擎,用于驱动车子的速度。
其实面向对象与现实是分不开的,所有现实生活中的物体都是对象,比方说我在写博客:
简单的说是人物与电脑,输入的内容的行为表现应该是键盘,内容的表现形式是电脑屏幕
人物的行为是一种虚构,思想
:)