码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3D心得之游戏架构设计和属性的运用

时间:2015-07-14 17:18:30      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

由于Unity是一个脚本化开发的引擎,所以实现一个具体功能的代码往往非常简短。

我刚开始写的时候总会碰到一个头疼的问题,当游戏变得越来越大,场景内的物体越来越多,各种繁杂的脚本互相交错,最后当需求变更或者发现BUG的时候,我发现有茫茫多的代码需要检查和修改。

关于怎么样来架构Unity3D中的脚本,详细的可以看一下雨松momo的这篇文章

http://www.xuanyusong.com/archives/1851

总结来讲主要是三个点:

1、运用单例脚本来控制一类工作

2、一个脚本不要管和自己无关的内容

3、将UI和逻辑分开

至于这其中的协作方式,无论你通过SendMessage还是直接调用方法,抑或使用回调或者委托,都是可以的。

 

再来说下属性的运用,假如在一个打飞机游戏中有一个类Plane,我建议这样设计(部分):

public class Plane
{
    public PlaneType type
    {
        get;
        private set;
    }

    public double HP
    {
        get;
        private set;
    }

    public void SetType(PlaneType type)
    {
        this.type = type;
    }

    public void Damaged(double damage)
    {
        HP -= damage;
    }
}

大家都知道使用private set可以确保HP这个属性只在类内部被修改,使用Damaged方法来扣血比较符合逻辑。

但我以前一直觉得,如果我谨慎对待变量HP,确保所有的修改都是我有意为之而不是意外,是不是就可以直接使用public变量在其他地方修改,这样做还有没有其他的好处?

有!假如现在我需要一个功能,要求统计在整个游戏中造成的总伤害,那么基于上面的类设计,我可以非常简单的在Damaged方法中加入一个判断,当类型为敌人的时候,把当次攻击的数值加到统计值上即可。

但如果我用的是public变量,并且是在其他地方直接修改了HP值,即使我知道所有的修改都是我有意为之,但要实现这个功能我还是得查看所有HP被引用的地方,逐个修改,并且免不了担心是否有遗漏。

所以我建议在Unity3D的脚本中,尽量使用属性来替代公共变量并且设为private set,使用方法来修改属性值,即使这个类在当前看来非常简单(比如一个Player类,只有一个变量Money时,往往会为了方便设计成全局静态变量,但其实以后很容易出类似的问题)

 

Unity3D心得之游戏架构设计和属性的运用

标签:

原文地址:http://www.cnblogs.com/Hypnus/p/4645856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!