『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化设计的思路 不管是开发客户端应用程序还是开发服务器端应用程序,『组件』这个词我们并不陌生.不管是在iOS中的xib,还是在AngularJS的Component,或者后端开发的 User Control,可复用的组件是面向对象开发的基础.所以在Unity 3D 框架设计时,组件化是核心的概念.那么如…
在我们设计和开发应用程序时,经常要用到控件.比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件.属性可以更改它的外观,比如背景色,标题等,而事件可以丰富控件的行为,比如最常见的『按钮点击』,谁也不能确定点击之后将发生什么事,是连接数据库呢还是弹出警告框,在不同的场景下,『按钮点击』 的行为往往呈现不一致.所以,与其举棋不定,还不如把处理委托给开发者,这就是『OnClick』事件. SubView行为多变性 在上篇文章中,我阐述了为什么…
什么是 『动态数据集合』 ?简而言之,就是当集合添加.删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面.有经验的程序员脑海里迸出的第一个词就是 ObservableCollection.没错,它在WPF中盛行其道,通过它开发者可以很方便的达到动态更新界面.要在Unity 3D中使用ObservableCollection还是有些许困难的,因为Mono并不提供ObservableCollection类.但实际上,自己动手去构建一个『动态数据集合』也非难事,核心在于怎样去传播通知.这也是…
> 对于一个View而言,本质上是一个MonoBehaviour.它本身就具备生命周期这个概念,比如,Awake,Start,Update,OnDestory等.这些是非常好的方法,可以让开发者在各个阶段去执行自定义的代码.但唯一遗憾的事,这些方法是有引擎调用,并且颗粒度不够细.本文将谈谈怎样构建View和ViewModel的生命周期. ### View的生命周期 ### **举个栗子,一个View的显示会有如下过程:** - 初始化操作 - 激活当前对象,SetActive(true) - 显…
MVVM回顾 经过上一篇文章的介绍,相信你对 MVVM的设计思想有所了解.MVVM的核心思想就是解耦,View与ViewModel应该感受不到彼此的存在.View只关心怎样渲染,而ViewModel只关心怎么处理逻辑,整个架构由数据进行驱动.不仅View与ViewModel彼此解耦,ViewModel与ViewModel之间也是解耦的.通过消息订阅-发布机制,解决了ViewModel之间的强依赖关系. 先回顾一下我们已完成的功能,Framework中最核心就是BindableProperty 类…
初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到很好的实现. MVVM 设计模式顾名思义,通过分离关注点,各司其职.通过 Data Binding 可达到数据的双向绑定,而命令 Command 更是将传统的 Code Behind 事件独立到 ViewModel 中. MVVM 设计模式在 WPF 中的实现 在WPF中,你会像如下这样去定义一个专…
一谈到 『IoC』,有经验的程序员马上会联想到控制反转,将创建对象的责任反转给工厂.IoC是依赖注入 『DI』 的核心,大名鼎鼎的Spring框架就是一个非常卓越的的控制反转.依赖注入框架.遗憾的是,我们显然不能在Unity 3D中去使用Spring框架,但思想是相通的--IoC也好,控制反转也罢,本质上是一个工厂,或者又被称为容器,我们可以自己维护一个工厂来实现对对象的管理,这也是本文的核心内容. 工厂模式初探 工厂,顾名思义,就是生产对象的地方.如果之前没有接触过设计模式,你可能会疑惑,我直…
谈到 『Repository』 仓储模式,第一映像就是封装了对数据的访问和持久化.Repository 模式的理念核心是定义了一个规范,即接口『Interface』,在这个规范里面定义了访问以及持久化数据的行为.开发者只要对接口进行特定的实现就可以满足对不同存储介质的访问,比如存储在Database,File System,Cache等等.软件开发领域有非常多类似的想法,比如JDBC就是定义了一套规范,而具体的厂商MySql,Oracle根据此开发对应的驱动. Unity 3D中的Reposit…
『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化设计的思路 不管是开发客户端应用程序还是开发服务器端应用程序,『组件』这个词我们并不陌生.不管是在iOS中的xib,还是在AngularJS的Component,或者后端开发的 User Control,可复用的组件是面向对象开发的基础.所以在Unity 3D 框架设计时,组件化是核心的概念.那么如…
当你开发一个客户端应用程序的时候,往往一个单页会包含很多子模块,在不同的平台下,这些子模块又被叫成子View(视图),或者子Component(组件).越是复杂的页面,被切割出来的子模块就越多,子模块越多,彼此之间需要同步的数据和状态就越频繁,即易产生耦合.那么如何保证在复杂业务情况下,各个子模块之间可以随意通信并保持弱耦合关系,这正是本文所讨论的. 耦合的产生 试想一下,你有这样一下需求,点击 View A中的按钮,View B也需要做出相应的改变. 这不是很简单吗.脑海里迅速出现两种解决方案…
对于客户端应用程序而言,单页应用程序(Single Page Application)是最常见的表现形式.有经验的开发人员往往会把一个View分解多个SubView.那么,如何在多个SubView之间 『共享数据』 是一个很棘手的事情.又因为ViewModel才是真正为View提供数据来源,所以本质上『共享数据』指的是多个ViewModel之间共享同一块数据控件. JavaScript中的原型链 谈到『共享』两字,脑海里跳出第一个印象就是『继承』.对吧,因为你是父母的孩子,所以理所当然你可以和父…
对象的 『注入』 是企业级软件开发经常听到的术语.如果你是一个 Java 程序员,一定对注入有着深刻的映像.不管是SSH框架还是SSM框架,Spring 全家桶永远是绕不过去的弯.通过依赖注入,可以有效的解耦应用程序.在uMVVM框架中,我提供了另外一种对象注入的方式,称为Service Locator 『服务定位模式』 .与Spring的依赖注入不同的是,Service Locator 内部以字典的形式维护了对象的依赖关系,外部通过Key的形式获取 『Resolve』 到对应的Value,从而…
在我们设计和开发应用程序时,经常要用到控件.比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件.属性可以更改它的外观,比如背景色,标题等,而事件可以丰富控件的行为,比如最常见的『按钮点击』,谁也不能确定点击之后将发生什么事,是连接数据库呢还是弹出警告框,在不同的场景下,『按钮点击』 的行为往往呈现不一致.所以,与其举棋不定,还不如把处理委托给开发者,这就是『OnClick』事件. SubView行为多变性 在上篇文章中,我阐述了为什么…
Unity 3D 引擎对于开发者来说,入手非常快,因为它采用的是 C# 作为开发语言,这也大大降低了开发者的门槛.但凡只要懂一门编程语言的人都能使用 Unity 3D 引擎开发,另外 Unity 3D 的内部架构设计非常好,采用的是组件开发,开发者能快速通过组件堆积出一个游戏.既然使用 Unity 3D 引擎开发游戏这么简单,那它有没有坑呢?答案是肯定的,比如开发游戏经常遇到的坑:被很多开发者吐槽的包体过大.游戏架构设计,热更新,包防破解问题等等,下面笔者分享在游戏开发中的坑及解决方案,为大家的…
如果你接触过<设计模式>.软件架构的编程思想,就会知道优秀的设计准则:“组合优于继承的”. 这句话很简短,但开始学习OOP的时候,真切的是—-不太好理解(以我个人当初学习为例). OOP的继承思想 在设计主角(Player)的时候,为了能够复用A.B.C的功能,我开始把A.B.C按照继承来写,多了一些Virutal\Override\Protected等修饰符,功能没有任何问题,就是有些别扭.如Start.Update方法,只能在A中采用模板方法处理,万一B.C.Player中直接用了Star…
一年前,偶发冲动,翻译了<[译] Unity3D游戏和facebook绑定(1:简介)>系列文章. 现在看有2个明显的好处, 一:给这个不温不火的博客带了top 3的人气: 二:我个人由此开始关注了Unity 3D方向. 去伪存真,如网上消息漫天飞的时候,一是可能真的有这个事情,一是可能是市场营销软文做的局–我现在工作之一就在干类似事情.为了摸清Unity 3D的市场接纳程度,我分别在去年和今年对Unity3D的岗位关键词做了搜索,希望通过生态圈核心指标–人才岗位需求,分析思考来甄别信息真假.…
听到过很多用Unity 3D开发游戏的程序员抱怨引擎效率太低,资源占用太高,包括我自己在以往项目的开发中也头疼过.最近终于有了空闲,可以仔细的研究一下该如何优化Unity 3D下的游戏性能.其实国外有不少有关U3D优化的资料,Unity官方的文档中也有简略的章节涉及这方面的内容,不过大多都是以优化美术资源为主,比如贴图的尺寸,模型静态及动态的batch以减少draw call,用lightmap替代动态光影,不同渲染模式在不同环境下的性能等等.鉴于此,加上美术资源方面的东西本人不是特别了解,所以…
趁着周末,再来一发.对于Unity3D,我也是刚开始学习,希望能够与大家多多交流.好了,废话不多说,下面继续. 本篇文章使用C#进行举例和说明.关于Unity 3D编辑器中的各种窗口,网上有很多资料了,这里不做介绍,默认大家都知道各个窗口的作用了,并会在Unity 3D编辑器中执行基本的操作. 上一篇讲的是Unity 3D的基础知识,这篇讲一下我刚开始学习编写脚本时遇到的一些困惑,主要是Unity 3D自身继承结构方面的问题. 脚本作为Unity 3D中的一个组件,是经常会使用到的.一个对象可以…
框架概述: 做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框架搭建,其中包括: UI框架(NGUI + MVC) 消息管理(Advanced CSharp Messenger) 网络层框架(Socket + Protobuf ) 表格数据(Protobuf) 资源管理(Unity 5.x 的 AssetBundle 方案) 热更框架(tolua) 这里使用的…
Unity 3D网络游戏实战(全) 目录: 掌握Unity3D基本元素 1.1 简单的游戏 1.1.1在场景中创建一个立方体 1.1.2编写可以使立方体运动的程序 1.1.3测试游戏1.1.4总结1.2 资源导入1.3 山体系统1.4 灯光1.5 材质1.6 预设1.6.1制作预设1.6.2例子1.7 声音1.7.1音源1.7.2接收器1.7.3简单播放器1.8 GUI1.8.1用Unity3D编写HelloWorld程序1.8.2用Unity3D编写登录框1.9导出游戏第 2 章 驾驶梦想中的…
Circular progress bar in Unity 3D - UnityScripthttp://stackoverflow.com/questions/22662706/circular-progress-bar-in-unity-3d-unityscript Another approach would be to use the NGUI plugin and use an UISprite with radial fill…
原地址:http://tieba.baidu.com/p/2817057297?pn=1 首先.unity 灯光烘焙 :Unity 3D FBX模型导入.选项Model 不导入资源球.Rig 不导入骨骼.Animations 不导入动画.在Model选项勾选 Generate Linghtmap UVs .否则.灯光烘焙.会出现阴影错乱.灯光烘焙时FBX Shader 选项 Mobile/Unlit(Supports Lightmap) .会出现阴影错乱.灯光烘焙时FBX Shader 选项 M…
目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity 3D,常常能看到对NGUI关键词). NGUI虽然不是Unity 官方原生的,但以其强大的能力和友好的操作性,成为了事实上的王者—-无他,OnGUI太挫了. 通过导入自定义包,会出现如下的截图–这里我使用的是NGUI V3.6.8版本. 在其官方demo中,这个demo给我留下了非常酷的印象(右上角NGUI的logo,好像电影中维京人的帽子?):…
原地址:http://blog.csdn.net/h570768995/article/details/9355313 Eclipse开发过程中总会碰到很多的难题,如何利用好工具帮助我们更快捷的开发也是一件重要事. 下面介绍Eclipse与Unity 3D协同工作: 1,首先在Unity3D中简单建立一个工程文件 2,好的,接下来点击[File]->[Build setting] 3,然后点击[Build],记好你Build出来的.apk的名字.这时候在工程目录下会出现“temp”文件夹(没有B…
遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前的位置.z的朝向:用3条线.z轴正向.30°旋转.-30°旋转. 问题是:0点可以获得,P1点? P2点是未知的. 我尝试了2个小时,结果不竟如人意,少于沮丧. 不得不,再次花点时间系统的学习3D数学: 1 位移–向量和点: 点: 点和向量在数学上是一致的,实际生活中点的概念比较好理解,坐标点来定位…
Unity 3D里两个碰撞体之间发生碰撞可以用OnCollision族函数和OnTrigger族函数来获知和处理.Unity官方给出了两张可发生碰撞的组合表: Collision detection occurs and messages are sent upon collision   Static Collider Rigidbody Collider Kinematic  Rigidbody Collider Static  Trigger Collider Rigidbody  Tri…
之后的基本方向 ios游戏开发,基础教程http://www.devdiv.com/unity_d_-thread-128068-1-1.html,学习Unity 3D游戏开发. 应该昨天表示,读了一下午,没有复苏.今天,经过同学们的需求,执行出来了.以下是我对第一节的一些个补充. 首先说的是破解问题. 如图,安装完unity-4.3.2之后,将Unity_v4.x.ulf放入/Library/Application Support/Unity 再在应用程序中找到Unity 右键显示包内容->C…
Unity 3D 文件导入出错 安装unity 时我选择了free版的,打开已有项目时出现例如以下错误提示 解决的方法: 先把要导入的文件先复制到unity3d安装文件夹下相应的文件夹内,之后再返回unity3d软件,右键选择"导入".…
于Unity 3D游戏的开发.游戏脚本需要3D模拟组合,该脚本将被写入阻力3D为了达到效果对象. 以下是一个小实例,使用Unity 3D实现一个可控制移动的小人.小人能够向前.向后.向左和向右移动. 1.通过 File - > New Scene 创建一个场景: 2.点击Create -> Create Empty 创建一个GameObject,它即是游戏对象: 3.在Inspector 面板里将此对象的名字改为 "hero" (记得按回车键),等一下再脚本中将通过此名字来…
众所周知,Unity3d是一款跨平台非常广的游戏引擎,上手容易,界面友好,集成功能众多,是目前开发手游的主流引擎.本人有幸使用Unity 3d进行开发已一年多时间,已领略了这歀引擎的强大之处. 编写shader也是我工作内容的一部分,先来说说shader是什么吧,我以自己的理解说明一下: 首先 shader是一种语言,一种在GPU,也就是显卡上执行的高级语言.shader的本意是着色器,可以自定义GPU的渲染管线中的两个环节(即顶点和片段).由此,我们可以控制对象在屏幕上的渲染效果,甚至实现一些…