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

由于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时,往往会为了方便设计成全局静态变量,但其实以后很容易出类似的问题)

时间: 2024-10-29 05:10:22

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

《游戏架构设计与策划基础》笔记 第一章 游戏策划概述(上)

1.1 什么是游戏策划 游戏的目的就是通过玩来获得娱乐,因此,设计游戏既需要艺术家一样的创造力,也需要工程师一样的精心规划.游戏设计是一门手艺,就像是好莱坞的电影摄像或服装设计一样.一个游戏既含有艺术要素,也含有功能要素:它必须能给人以美的享受,同时又必须能很好地运行,让游戏者享受到快乐.具备这两种特点的游戏才是好的游戏. 1.2 游戏策划的任务 游戏策划根据自己的创作理念,结合市场调研得来的数据,参考其他开发人员的意见和建议,在开发条件允许的基础上,将游戏创意以及游戏内容和规则细化完整,形成策

[笔记]《游戏架构设计与策划基础》第三章 游戏概念及原型设计

概念设计的过程:产生创意.加工创意和创建游戏概念设计文档. 3.1 创意的来源 (1)大胆设想 (2)利用现有的娱乐资源 (3)利用现有的游戏体系 (4)收集创意 3.2 加工创意 (1)合成--需要考虑如何将两个概念融合而成一款游戏,带给玩家新的游戏体验. (2)共鸣--含有协作的意思,它使故事和主题内容对游戏玩家能够产生更加深刻的影响. 3.3 游戏概念设计文档 一般包括以下要素的部分或全部:      标题--游戏的名称.      平台--游戏适合的平台.      种类--游戏的种类.

《守望先锋》架构设计与网络同步

原文链接 Overwatch Gameplay Architecture and Netcode Timothy Ford Lead Gameplay Engineer Blizzard Entertainment 翻译:kevinan 在GDC2017[Overwatch Gameplay Architecture andNetcode ]的分享会上,来自暴雪的Tim Ford介绍了<守望先锋>游戏架构和网络同步的设计.一起来看看吧. 哈喽,大家好,这次的分享是关于<守望先锋>(

游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章<游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案>,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以点击链接回溯之前的内容.本期内容,将会重点介绍对战类全球服游戏的设计思路与技术实现. 对战类游戏的设计思路 协议的选择 游戏设计之初,需要决定选择哪种协议来进行通讯.对于对战类游戏来说,首先推荐的肯定是UDP. 尽管UDP对开发基础有较高的要求,需要开发者自己实现传输成功检验.重传以及可靠性保证等,但相对于低开发成本的TCP,UDP在效率和时效性上都有极

谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现

一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者在学习时期和客户端美术策划的小伙伴一起做的游戏,笔者主要负责游戏服务端开发,客户端也参与了一部分,同时也是这个项目的发起和负责人.这次主要分享这款游戏的服务端相关的设计与实现,从整体的架构设计,到服务器网络通信底层的搭建,通信协议.模型定制,再到游戏逻辑的分层架构实现.同时这篇博客也沉淀了笔者在游戏公司实践五

Unity3d 引擎原理详细介绍、Unity3D引擎架构设计 - zhibolife

时间 2014-03-24 11:18:00  博客园-所有随笔区原文  http://www.cnblogs.com/zhibolife/p/3620440.html 体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则. Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于创建交互式3D应用程序在多个platforms.Unity3D由游戏引擎和编辑器.该引擎包含的软件组件,在游戏的研究与开发中最常见

朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助你写出能让人收藏点赞的设计文档. 技术架构评审 架构评审或技术方案评审的价值在于集众人的力量大家一起来分析看看方案里是否有坑,方案上线后是否会遇到不可逾越的重大技术问题,提前尽可能把一些事情先考虑到提出质疑其实对项目的健康发展有很大的好处.很多公司都有架构评审委员会都有架构评审的流程,做业务的兄弟要

以属性为核心驱动的 全领域通用架构设计原理 (简称:属性架构原理)

以属性为核心驱动的全领域通用架构设计原理 (简称:属性架构原理) 联系方式:13547930387 Email:[email protected] 一.个人声明 我,参加工作也有5年多了,是一名普通的不能在普通的程序员,一直在使用公司自己的产品进行开发,因此技术比较菜,此设计完全是按照自己天真的想法而设计的,如果有不合理或很搞笑的地方,请轻拍,由衷的希望大家能提出宝贵的意见: 根据此设计原理我也做了一个简单的(demo)架构来支撑和验证此理论的可行性,由于技术功底不太好,有不合理之处请大家谅解,

阿里游戏高可用架构设计实践

今天读了李云华老师写的<阿里游戏高可用架构设计实践 >,有一些感受想分享一下. 印象很深的一句话那就是他最开始说的“把韵味的锅让研发去背!”也就是说,高可用的系统是设计出来的,不是靠运维保障出来的! 他提到出现问题人们的思考顺序为:首先想到的是不是运维太LOW了,比如说硬件质量太差,为什么这个月机柜也坏.交换机也坏,是不是到电脑城买个二手货放里面了?第二想到的是不是运气不好,之前一个月.两个月才遇到一次,这个月遇到了4次,是不是你们没有在机房烧香?第三个是不是测试不足,为什么这些Bug测试阶段