编辑器:
- Hierarchy窗口中是场景中的Game Object列表
- Project窗口中是磁盘上Assets文件夹中的内容,可用来创建Game Object
调试:
- 调试用Debug.Log()或者print函数打日志
- 目前完全无法采用VisualStudio进行调试,只能用MonoDevelop。因Unity采用的是Mono运行时引擎而不是CLR,参考Debugging using Visual Studio 2010
- 另发现UnityVS插件,Write and debug your Unity games inside Visual Studio
- 官方文档: Debugger
- MonoDevelop对Unity的attach调试不能跨dll
Mono:
- Unity自带Mono版本可能是2.6
- Which version of mono used in Unity 3.2?
- 目前应谨慎考虑采用Mono写需长时间运行的服务器程序
MonoDevelop:
- MonoDevelop写的源码文件会以UTF8 Unix结尾方式保存
- Unity自带的MonoDevelop和官方MonoDevelop的有区别的,不要升级MonoDevelop
实用函数:
- Application.LoadLevel()可以切换场景
资源管理:
- 文件打包用的是AssetBundle
- 所有通过Resources类加载的资源必须放在名为Resources的目录中
- All assets that are in a folder named "Resources" anywhere in the Assets folder can be accessed via theResources.Load functions. Multiple "Resources" folders may exist and when loading objects each will be examined.
- 不同Resources目录同名目录加载规则无法预测!
- Reading Excel Files and Sheets into Unity,用的是直接COM读取excel的方式,没有参与资源管线
- Reading Text Data Into A Unity Game
- 所有需要通过散包方式加载的文件必须通过WWW的方式,加载后可自动识别movie、text、texture和bytes四种格式
- Unity3d 动态读取外部文件,包括对已封装好的内部资源的加载和外部散包资源的加载
- 在Unity3D的WebGame中实现资源动态加载
自带GUI:
- Used GUILayout.FlexibleSpace to center your automatic GUILayout
引用第三方库:
- Unity支持PInvoke(Platform Invocation Services)方式的插件,Unity加载Plugin时遇到的一些问题
- Plugins (Pro/Mobile-Only Feature)
团队工作:
- SO HOW DO TEAMS WORK ON A BIG UNITY3D PROJECT?
编译与发布:
- 定制Build流程: Build Player Pipeline
- Unity发布的exe是非托管的,但逻辑dll是放在GAME_Data\Managed下的,代码完全可以反编译
- 没发现Unity编译后的资源目录Game_Data中的文件结构和编辑器中的Project目录有明显的直接对应关系
- 编译后资源都被放到sharedassets*.assets这样的加密文件中,其中*可能是场景编号; Scene文件可能被放到了level*中
- Resources和其他目录不一样,其他目录编译完后会被自动打包合并,而Resources会有一个直接对应的resources.asset文件
- 相同的源反复编译生成的二进制不变
- 添加空场景后Game_Data/mainData发生改变
- prefab和各种资源关联啥的会自动处理的,只把用到的打包
- 编辑器中Import Package但没有真正使用不会对编译结果造成影响
- Game.exe始终是稳定不变的
版本管理:
- 即使采用了Force Text选项,ProjectSettings下很多asset文件也还是二进制格式的
WebBrowser相关:
- WPF WebBrowser 与 Unity3D 交互操作
- 可通过Application.ExternalCall方法调用浏览器js方法
- WPF webBrowser 与 unity3d 交互操作
字体:
- Unity doesn't support vector fonts. For every font size that you want to support, you need to import a new version of the font and change its import settings to a different size. @Unity 3.x Game Development by Exple Beginner's Guide[P201]
其他:
- Unity3D实用工具汇总
- Convert unity javascript (unityscript) to C#
- Unity3D屏幕截图
- Unity目前能在手机上做到的效果,其中shader开放可免费使用
- 采用双色半圆拼接饼状图是个技巧
- Unity问题集(不断更新中)
Unity中写C#脚本要注意的问题(仅限于MonoBehaviour子类)
- Inherit from MonoBehaviour
- Use the Awake or Start function to do initialisation
- The class name must match the file name
- Coroutines have a different syntax in C#
- Coroutines have to have a return type of IEnumerator and you yield using "yield return" instead of just "yield"
- Don't use namespaces
- Only member variables are serialized and are shown in the Inspector
- Avoid using the constructor or variable initializers
- Never initialize any values in the constructor or variable initializers in a MonoBehaviour script. Instead use Awake or Start for this purpose.
AssertBundle
- Unity bundle的制作和使用
- Build asset bundle .unity3d
Editor扩展脚本:
- Editor脚本是可以用C#写的,编译完后重启Unity生效
- 不要在Editor脚本中采用中文菜单,有一定可能down机
- 如果乱码,需要将文件保存为UTF8格式
压缩方式用的是lzma Unity的动态下载关卡与动态下载资源 Unity3D命令行Build,这个对版本制作有用版本控制:
- Unity3d版本控制,哪些文件该放到svn的问题解决
- Unity目前的版本已经把需要svn控制的文件单独归类放到Project Settings里了,现在只需要将Assets和ProjectSettings两目录加入svn即可 @Using External Version Control Systems with Unity
- 必须进行以下设置才可将项目加入到svn管理:
- meta文件为Unity内部使用,不要手工更改,也必须加入svn
- Unity内部是用GUID做文件间引用的
- Force Text可以将场景文件序列化为文本,以利于版本控制,默认为二进制
- Unity资源序列化采用的是YAML
场景加载进度条 关于Unity3D的协程(Coroutine)NGUI:
- Unity3D强大的UI插件(NGUI)
- NGUI: Documentation
- 中文教程: Unity界面插件NGUI基础教程
- 中文教程: Unity界面插件NGUI核心组件说明
- 相同Depth的控件会存在z排序不稳定问题!复杂界面要进行合理的规划
Unity内建Package简要说明Unity引用第三方dll随便拖到项目任何目录就可以了所引用的托管dll必须是net3.5版本以下的如果托管dll依赖非托管dll,则pc standalone版本的可行,web版的有安全限制,移动版也不可行,甚至System.IO名字空间都是受限的protobuf
- protobuf-net要采用net20版本的,不要用mono版的,据说有坑
- protobuf-csharp-port? and How to choose between protobuf-csharp-port and protobuf-net
微端构造AssetBundle的时候不加BuildAssetBundleOptions.DeterministicAssetBundle选项,两次出来的md5码就不一样 System.Diagnostics.Debug.Assert无法在Unity中使用
- Debugging context in Unity3D
- Platform Dependent Compilation
将扩充代码放到单独目录中用VS开发,这样就可以加UnitTest了 Debug.Log运行时会将日志输出去到Data目录下的output_log.txt文件(UTF8),省的自己写日志文件了不要打开GAME.sln,而要打开
GAME-csharp.sln,可同时由MonoDevelop和VisualStudio编辑调整项目Build Settings后,则可在MonoDevelop/Run/Attach to Process窗口中找到正在运行的游戏以进行attach调试
protobuf编解码在Unity Editor中运行正常,但单独部署运行抛出TypeInitializationException的问题
- 如果发现Unity Editor中运行正常而单独运行时不正常,可以考虑将Api Compatibility Level改为.NET 2.0而不是其Subset
Terrain:
- Hightmap Resolution会比Terrain Resolution大1
- 移动平台小地形最好用模型,或者将Unity自带的Terrain用插件导出为模型,省性能。Unity Terrain依赖shader 2.0,某些手机不支持,即使导出地图也依赖shader 2.0,自己做地形模型一张贴图即可搞定
- Skybox的设置在Edit/RenderSettings/Skybox Material下,确保Game Overlay按钮选中才可以显示出来
- 要第三人称在场景中漫游,需要将First Person Controller加入到场景
- Inspector窗口中的Static Checkbox: Checking this box tells Unity that a particular object in your scene will not be moving during the game, and as such can be lightmapped.
?
支持 RPC,整合了 RakNet,支持P2P,还提供了房间服务器和NAT穿透服务器,搞不定还有代理服务器。开房间娱乐性质的游戏不用写服务器逻辑Anything that uses Rigidbodies or realistic movement should use FixedUpdate, but instead of Update for every frame.Unity-4.0.1f2尚不支持Win8-Metro/WinPhone的导出
使用Unity进行Web MMO游戏开发技术研究
@张昆 2010-5-5
- 动态下载和加载资源:
- Web MMO需要尽量减少首次下载量,并能在游戏运行中动态加载资源
- 游戏运行时资源下载和加载,Unity Pro支持两种方法: 资源包和资源目录。非Pro版本智能使用资源目录方法。一个资源包是一个外部的资源集合,游戏中可以使用多个资源包,资源包是在发行版本以外存在的。资源目录是一些资源的集合,资源目录被包含在发行版本里面,但是并没有和任何游戏对象有关联。资源目录通过Edit->Project Settings->Player的First Streamed Level With Resource来设定
- 对Web MMO产品的建议
- 主要是资源大小的考虑,资源中,贴图是大头,需要尽量减少贴图使用量。卡通类游戏比较适合
- 由于动态下载和加载资源会一直存在,玩家角色在场景中的移动速度不宜过大,大场景不宜频繁切换。资源动态下载需要占用玩家一定网络带宽
- 使用Unity的准备工作:
- Unity毕竟是一款包含内容和功能很多的游戏引擎。需要花一些时间熟悉其编辑器、代码和开发环境、资源生产流程等主要功能。不建议项目开始前没有一定的准备期
Unity3D学习笔记,非常给力的一组学习笔记
- unity的主要使用者是关卡策划和程序员
- 目前Unity对中文的支持不是很好,因此在Unity中尽量不要使用中文,防止出现各种各样莫名其妙的异常
- 如何调整太阳光方向和天空盒太阳贴图方向一致?
- 首先在设计视图中拖动视角,让镜头中心对准天空盒上的太阳
- 然后在渲染设置中临时将天空盒设置为无(为了方便调整Sun的角度,否则天空盒太亮看不清楚)
- 然后选中Sun并使用旋转工具(快捷键E),将光线的方向正对自己
- 然后再将天空盒恢复即可
- 一个好的游戏没有好的配乐和音效,就好像无暇的水晶缺少了灯光的陪衬。而音乐不仅能渲染出玩家攻略游戏时的氛围,还能增加提高玩家对游戏的认知度 @音乐和音效
- 所有Prefab实例的属性都引用自Prefab的预设,当预设属性改变时,对应的实例属性也会相应改变。但当实例的某个属性被手工调整后,即使修改预设的属性值,该值也会以手工调整的值为准
- 随着360和Unity的合作,前者的360安全浏览器预装Unity3d的方案实施会给Unity进军中国市场带来可观的便捷
- Choosing GUI framework for your Unity3D project: EZGUI vs NGUI, Part I and Part II
- NGUI制作小地图
Directional light的Shadow Type:
- No Shadows
- Hard Shadow - 影子的轮廓比较清晰
- Soft Shadow - 影子边缘模糊一点,更加逼真
粒子系统:
- Particle Emitter: 只管发射粒子
- Particle Animator: 粒子动画器,负责对发射器产生的粒子进行二次加工,比如使粒子的颜色不断的变化,缩放粒子等
- Particle Renderer: 粒子渲染器,负责将粒子渲染到游戏中,并且可以决定粒子的材质、光影等
当选中Prefab的实例时,检视面板上就会显示预制对象菜单:
- Select:在工程面板中快速选取该实例引用的预制
- Revert:将实例修改过的参数全部还原为预制的参数
- Apply:将实例修改过的参数全部应用到预制,此时所有引用此预制的实例会一起受到影响而变动
yield用法:
- Unity3D使用C#实现Coroutines & Yield
- 所有使用yield的函数必须返回IEnumerator类型(这点和C# IEnumerable标准用法有差异!)
- 所有IEnumerator类型函数必须使用”StartCoroutine”这个函数触发,不能单独使用
- How do I use Yield in C#?
- Overview: Coroutines & Yield
- MonoBehaviour.StartCoroutine
不同颜色的字体需要创建不同的Materials, 其贴图设置为字体贴图, Shader要采用GUI/TextShader
Unity手册非官方翻译版 Convert unity javascript (unityscript) to C#只有public field才可进入Inspector窗口, 该功能可用[ NonSerialized]特性屏蔽
- 和Inspector窗口关联的public field重命名后Inspector中编辑的值会丢失!
- Be aware that any value adjusted in the Inspector will override the original value given to a variable within the script. It will not rewrite the value stated in the script, but simply replaces it when the game runs.? You can also revert to the values declared in the script by clicking on the Cog icon to the right of the component and choosing Reset from the drop-down menu that appears.
- public property不会进入Instactor
- enum在Inspector中会自动展示为ComboBox
动态调用, 解耦神器:
- 可通过SendMessage方法进行动态方法调用!
- 可采用Find/FindWithTag方法, 用字符串名称的方式直接查找GameObject对象
将Prefab直接拖入场景可进行查看 Where can i find the unityengine xml?, unity官方并未提供引擎dll对应的xml文档, 这对VisualStudio下的自动提示不友好WCF & Unity
- Service References的代码可用VisualStudio自带的“添加服务引用”功能,没必要非命令行用mono的svcutil。成功生成后需要将对应的C#代码文件拷贝到Assert下合适的目录中,否则不会参加编译
- 需要从C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0拷贝到*\Assets\Plugins下的dll有:
- System.Runtime.Serialization.dll
- System.Security.dll
- System.ServiceModel.dll
- System.IdentityModel.Selectors.dll // 该文件也是必要的,否则System.ServiceModel.dll不会被正确引入
- Consuming a WCF Service from Unity3D
- Is it possible to use WCF in scripts?
- Webservices In Unity
- Unity中使用WCF服务小教程
Unity会自动生成的两种项目文件,*-csharp.sln/*-vs.csproj或*.sln/*.csproj,前者是供VS用的,后者是供MonoDevelop用的,包含了自定义的项目类型*.unityproj不要手工向*-csharp.sln中加入任何project,这会在Unity重新生成后覆盖。可将sln另存为得以解决NGUI
- Unity界面插件NGUI基础教程
- Unity界面插件NGUI核心组件说明
- NGUI: Documentation
- 译文: Unity3d 界面插件NGUI
- 调整NGUI“米老鼠”大小:
TexturePacker
is a gui and command line tool to create sprite sheets or sprite atlases
- Request free license
- Works With Any Game Engine,包括cocos2d、CEGUI、Unity等,还可方便自定义输出格式
unity双开:
暂没有内嵌浏览器的支持 Embed Web Browser into unity The New GUI,将会在随后的unity新版中得到支持 bitverse
GUI库,在移动平台会遇到性能问题,但开发效率要比NGUI高 Unity脚本周期关系