Unity3D學習筆記

  • 111

  • 編輯器:
    1. Hierarchy窗口中是場景中的Game Object列表
    2. Project窗口中是磁盤上Assets文件夾中的內容,可用來創建Game Object
  • 調試:
    1. 調試用Debug.Log()或者print函數打日誌
    2. 目前完全無法採用VisualStudio進行調試,只能用MonoDevelop。因Unity採用的是Mono運行時引擎而不是CLR,參考Debugging using Visual Studio 2010
      1. 另發現UnityVS插件,Write and debug your Unity games inside Visual Studio
      2. 官方文檔: Debugger
    3. MonoDevelop對Unity的attach調試不能跨dll
  • Mono:
    1. Unity自帶Mono版本可能是2.6
      1. Which version of mono used in Unity 3.2?
    2. 目前應謹慎考慮採用Mono寫需長時間運行的服務器程序
  • MonoDevelop:
    1. MonoDevelop寫的源碼文件會以UTF8 Unix結尾方式保存
    2. Unity自帶的MonoDevelop和官方MonoDevelop的有區別的,不要升級MonoDevelop
  • 實用函數:
    1. Application.LoadLevel()可以切換場景
  • 資源管理:
    1. 文件打包用的是AssetBundle
    2. 所有通過Resources類加載的資源必須放在名爲Resources的目錄中
      1. 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.
      2. 不同Resources目錄同名目錄加載規則無法預測!
    3. Reading Excel Files and Sheets into Unity,用的是直接COM讀取excel的方式,沒有參與資源管線
    4. Reading Text Data Into A Unity Game
    5. 所有需要通過散包方式加載的文件必須通過WWW的方式,加載後可自動識別movie、text、texture和bytes四種格式
    6. Unity3d 動態讀取外部文件,包括對已封裝好的內部資源的加載和外部散包資源的加載
    7. 在Unity3D的WebGame中實現資源動態加載
  • 自帶GUI:
    1. Used GUILayout.FlexibleSpace to center your automatic GUILayout
  • 引用第三方庫:
    1. Unity支持PInvoke(Platform Invocation Services)方式的插件,Unity加載Plugin時遇到的一些問題
    2. Plugins (Pro/Mobile-Only Feature)
  • 團隊工作:
    1. SO HOW DO TEAMS WORK ON A BIG UNITY3D PROJECT?
  • 編譯與發佈:
    1. 定製Build流程: Build Player Pipeline
    2. Unity發佈的exe是非託管的,但邏輯dll是放在GAME_Data\Managed下的,代碼完全可以反編譯
    3. 沒發現Unity編譯後的資源目錄Game_Data中的文件結構和編輯器中的Project目錄有明顯的直接對應關係
    4. 編譯後資源都被放到sharedassets*.assets這樣的加密文件中,其中*可能是場景編號; Scene文件可能被放到了level*中
    5. Resources和其他目錄不一樣,其他目錄編譯完後會被自動打包合併,而Resources會有一個直接對應的resources.asset文件
    6. 相同的源反覆編譯生成的二進制不變
    7. 添加空場景後Game_Data/mainData發生改變
      1. prefab和各種資源關聯啥的會自動處理的,只把用到的打包
    8. 編輯器中Import Package但沒有真正使用不會對編譯結果造成影響
    9. Game.exe始終是穩定不變的
  • 版本管理:
    1. 即使採用了Force Text選項,ProjectSettings下很多asset文件也還是二進制格式的
  • WebBrowser相關:
    1. WPF WebBrowser 與 Unity3D 交互操作
    2. 可通過Application.ExternalCall方法調用瀏覽器js方法
    3. WPF webBrowser 與 unity3d 交互操作
  • 字體:
    1. 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]
  • 其他:
    1. Unity3D實用工具彙總
    2. Convert unity javascript (unityscript) to C#
    3. Unity3D屏幕截圖
    4. Unity目前能在手機上做到的效果,其中shader開放可免費使用
    5. 採用雙色半圓拼接餅狀圖是個技巧 
      Image[1]
    6. Unity問題集(不斷更新中)
  • Unity中寫C#腳本要注意的問題(僅限於MonoBehaviour子類)
    1. Inherit from MonoBehaviour
    2. Use the Awake or Start function to do initialisation
    3. The class name must match the file name
    4. Coroutines have a different syntax in C#
      1. Coroutines have to have a return type of IEnumerator and you yield using "yield return" instead of just "yield"
    5. Don't use namespaces
    6. Only member variables are serialized and are shown in the Inspector
    7. Avoid using the constructor or variable initializers
      1. Never initialize any values in the constructor or variable initializers in a MonoBehaviour script. Instead use Awake or Start for this purpose.
  • AssertBundle
    1. Unity bundle的製作和使用
    2. Build asset bundle .unity3d
  • Editor擴展腳本:
    1. Editor腳本是可以用C#寫的,編譯完後重啓Unity生效
    2. 不要在Editor腳本中採用中文菜單,有一定可能down機
    3. 如果亂碼,需要將文件保存爲UTF8格式
  • 壓縮方式用的是lzma
  • Unity的動態下載關卡與動態下載資源
  • Unity3D命令行Build,這個對版本製作有用
  • 版本控制:
    1. Unity3d版本控制,哪些文件該放到svn的問題解決
    2. Unity目前的版本已經把需要svn控制的文件單獨歸類放到Project Settings裏了,現在只需要將Assets和ProjectSettings兩目錄加入svn即可 @Using External Version Control Systems with Unity
    3. 必須進行以下設置纔可將項目加入到svn管理: 
      Image(1)Image(2)
    4. meta文件爲Unity內部使用,不要手工更改,也必須加入svn
      1. Unity內部是用GUID做文件間引用的
    5. Force Text可以將場景文件序列化爲文本,以利於版本控制,默認爲二進制
      1. Unity資源序列化採用的是YAML
  • 場景加載進度條
  • 關於Unity3D的協程(Coroutine)
  • NGUI:
    1. Unity3D強大的UI插件(NGUI)
    2. NGUI: Documentation
    3. 中文教程: Unity界面插件NGUI基礎教程Unity 3D 學習筆記 - 秒大刀 - 秒大刀 博客
    4. 中文教程: Unity界面插件NGUI核心組件說明
    5. 相同Depth的控件會存在z排序不穩定問題!複雜界面要進行合理的規劃
  • Unity內建Package簡要說明
  • Unity引用第三方dll隨便拖到項目任何目錄就可以了
  • 所引用的託管dll必須是net3.5版本以下的(包括)
  • 如果託管dll依賴非託管dll,則pc standalone版本的可行,web版的有安全限制,移動版也不可行,甚至System.IO名字空間都是受限的
  • protobuf
    1. protobuf-net要採用net20版本的,不要用mono版的,據說有坑
    2. protobuf-csharp-port? and How to choose between protobuf-csharp-port and protobuf-net
  • 微端構造AssetBundle的時候不加BuildAssetBundleOptions.DeterministicAssetBundle選項,兩次出來的md5碼就不一樣
  • System.Diagnostics.Debug.Assert無法在Unity中使用
    1. Debugging context in Unity3D
    2. 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調試 
    Image(3)
  • protobuf編解碼在Unity Editor中運行正常,但單獨部署運行拋出TypeInitializationException的問題
    1. 如果發現Unity Editor中運行正常而單獨運行時不正常,可以考慮將Api Compatibility Level改爲.NET 2.0而不是其Subset 
      Image(4)
  • Terrain:
    1. Hightmap Resolution會比Terrain Resolution大1
    2. 移動平臺小地形最好用模型,或者將Unity自帶的Terrain用插件導出爲模型,省性能。Unity Terrain依賴shader 2.0,某些手機不支持,即使導出地圖也依賴shader 2.0,自己做地形模型一張貼圖即可搞定
    3. Skybox的設置在Edit/RenderSettings/Skybox Material下,確保Game Overlay按鈕選中纔可以顯示出來 
      Image(5)
    4. 要第三人稱在場景中漫遊,需要將First Person Controller加入到場景
    5. 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. 
      Image(6)?
  • 支持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的導出 
    Image(7)
  • 使用Unity進行Web MMO遊戲開發技術研究 @張昆 2010-5-5
    1. 動態下載和加載資源:
      1. Web MMO需要儘量減少首次下載量,並能在遊戲運行中動態加載資源
      2. 遊戲運行時資源下載和加載,Unity Pro支持兩種方法: 資源包和資源目錄。非Pro版本智能使用資源目錄方法。一個資源包是一個外部的資源集合,遊戲中可以使用多個資源包,資源包是在發行版本以外存在的。資源目錄是一些資源的集合,資源目錄被包含在發行版本里面,但是並沒有和任何遊戲對象有關聯。資源目錄通過Edit->Project Settings->Player的First Streamed Level With Resource來設定
    2. 對Web MMO產品的建議
      1. 主要是資源大小的考慮,資源中,貼圖是大頭,需要儘量減少貼圖使用量。卡通類遊戲比較適合
      2. 由於動態下載和加載資源會一直存在,玩家角色在場景中的移動速度不宜過大,大場景不宜頻繁切換。資源動態下載需要佔用玩家一定網絡帶寬
    3. 使用Unity的準備工作:
      1. Unity畢竟是一款包含內容和功能很多的遊戲引擎。需要花一些時間熟悉其編輯器、代碼和開發環境、資源生產流程等主要功能。不建議項目開始前沒有一定的準備期
  • Unity3D學習筆記,非常給力的一組學習筆記
    1. unity的主要使用者是關卡策劃和程序員
    2. 目前Unity對中文的支持不是很好,因此在Unity中儘量不要使用中文,防止出現各種各樣莫名其妙的異常
    3. 如何調整太陽光方向和天空盒太陽貼圖方向一致?
      1. 首先在設計視圖中拖動視角,讓鏡頭中心對準天空盒上的太陽
      2. 然後在渲染設置中臨時將天空盒設置爲無(爲了方便調整Sun的角度,否則天空盒太亮看不清楚)
      3. 然後選中Sun並使用旋轉工具(快捷鍵E),將光線的方向正對自己
      4. 然後再將天空盒恢復即可 
        Image(8)
    4. 一個好的遊戲沒有好的配樂和音效,就好像無暇的水晶缺少了燈光的陪襯。而音樂不僅能渲染出玩家攻略遊戲時的氛圍,還能增加提高玩家對遊戲的認知度 @音樂和音效
    5. 所有Prefab實例的屬性都引用自Prefab的預設,當預設屬性改變時,對應的實例屬性也會相應改變。但當實例的某個屬性被手工調整後,即使修改預設的屬性值,該值也會以手工調整的值爲準
    6. 隨着360和Unity的合作,前者的360安全瀏覽器預裝Unity3d的方案實施會給Unity進軍中國市場帶來可觀的便捷
    7. Choosing GUI framework for your Unity3D project: EZGUI vs NGUI, Part I and Part II
    8. NGUI製作小地圖
  • Directional light的Shadow Type:
    1. No Shadows 
      Image(9)
    2. Hard Shadow - 影子的輪廓比較清晰 
      Image(10)
    3. Soft Shadow - 影子邊緣模糊一點,更加逼真 
      Image(11)
  • 粒子系統:
    1. Particle Emitter: 只管發射粒子
    2. Particle Animator: 粒子動畫器,負責對發射器產生的粒子進行二次加工,比如使粒子的顏色不斷的變化,縮放粒子等
    3. Particle Renderer: 粒子渲染器,負責將粒子渲染到遊戲中,並且可以決定粒子的材質、光影等
  • 當選中Prefab的實例時,檢視面板上就會顯示預製對象菜單:
    1. Select:在工程面板中快速選取該實例引用的預製
    2. Revert:將實例修改過的參數全部還原爲預製的參數
    3. Apply:將實例修改過的參數全部應用到預製,此時所有引用此預製的實例會一起受到影響而變動
  • yield用法:
    1. Unity3D使用C#實現Coroutines & Yield
      1. 所有使用yield的函數必須返回IEnumerator類型(這點和C# IEnumerable標準用法有差異!)
      2. 所有IEnumerator類型函數必須使用”StartCoroutine”這個函數觸發,不能單獨使用
    2. How do I use Yield in C#?
    3. Overview: Coroutines & Yield
    4. MonoBehaviour.StartCoroutine
  • 不同顏色的字體需要創建不同的Materials, 其貼圖設置爲字體貼圖, Shader要採用GUI/TextShader 
    Image(12)
  • Unity手冊非官方翻譯版
  • Convert unity javascript (unityscript) to C#
  • 只有public field纔可進入Inspector窗口, 該功能可用[NonSerialized]特性屏蔽
    1. 和Inspector窗口關聯的public field重命名後Inspector中編輯的值會丟失!
    2. 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.
    3. public property不會進入Instactor
    4. enum在Inspector中會自動展示爲ComboBox
  • 動態調用, 解耦神器:
    1. 可通過SendMessage方法進行動態方法調用!
    2. 可採用Find/FindWithTag方法, 用字符串名稱的方式直接查找GameObject對象
  • 將Prefab直接拖入場景可進行查看
  • Where can i find the unityengine xml?, unity官方並未提供引擎dll對應的xml文檔, 這對VisualStudio下的自動提示不友好
  • WCF & Unity
    1. Service References的代碼可用VisualStudio自帶的“添加服務引用”功能,沒必要非命令行用mono的svcutil。成功生成後需要將對應的C#代碼文件拷貝到Assert下合適的目錄中,否則不會參加編譯
    2. 需要從C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0拷貝到*\Assets\Plugins下的dll有:
      1. System.Runtime.Serialization.dll
      2. System.Security.dll
      3. System.ServiceModel.dll
      4. System.IdentityModel.Selectors.dll // 該文件也是必要的,否則System.ServiceModel.dll不會被正確引入
    3. Consuming a WCF Service from Unity3D
    4. Is it possible to use WCF in scripts?
    5. Webservices In Unity
    6. Unity中使用WCF服務小教程
  • Unity會自動生成的兩種項目文件,*-csharp.sln/*-vs.csproj或*.sln/*.csproj,前者是供VS用的,後者是供MonoDevelop用的,包含了自定義的項目類型*.unityproj
  • 不要手工向*-csharp.sln中加入任何project,這會在Unity重新生成後覆蓋。可將sln另存爲得以解決
  • NGUI
    1. Unity界面插件NGUI基礎教程
    2. Unity界面插件NGUI核心組件說明
    3. NGUI: Documentation
      1. 譯文: Unity3d 界面插件NGUI
    4. 調整NGUI“米老鼠”大小: 
      Image(15) Image(16)Image(17)
  • TexturePacker is a gui and command line tool to create sprite sheets or sprite atlases
    1. Request free license
    2. Works With Any Game Engine,包括cocos2d、CEGUI、Unity等,還可方便自定義輸出格式
  • unity雙開: 
    Image(13)Image(14)
  • 暫沒有內嵌瀏覽器的支持Embed Web Browser into unity
  • The New GUI,將會在隨後的unity新版中得到支持
  • bitverse GUI庫,在移動平臺會遇到性能問題,但開發效率要比NGUI高
  • Unity腳本週期關係編輯器:
    1. Hierarchy窗口中是場景中的Game Object列表
    2. Project窗口中是磁盤上Assets文件夾中的內容,可用來創建Game Object
  • 調試:
    1. 調試用Debug.Log()或者print函數打日誌
    2. 目前完全無法採用VisualStudio進行調試,只能用MonoDevelop。因Unity採用的是Mono運行時引擎而不是CLR,參考Debugging using Visual Studio 2010
      1. 另發現UnityVS插件,Write and debug your Unity games inside Visual Studio
      2. 官方文檔: Debugger
    3. MonoDevelop對Unity的attach調試不能跨dll
  • Mono:
    1. Unity自帶Mono版本可能是2.6
      1. Which version of mono used in Unity 3.2?
    2. 目前應謹慎考慮採用Mono寫需長時間運行的服務器程序
  • MonoDevelop:
    1. MonoDevelop寫的源碼文件會以UTF8 Unix結尾方式保存
    2. Unity自帶的MonoDevelop和官方MonoDevelop的有區別的,不要升級MonoDevelop
  • 實用函數:
    1. Application.LoadLevel()可以切換場景
  • 資源管理:
    1. 文件打包用的是AssetBundle
    2. 所有通過Resources類加載的資源必須放在名爲Resources的目錄中
      1. 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.
      2. 不同Resources目錄同名目錄加載規則無法預測!
    3. Reading Excel Files and Sheets into Unity,用的是直接COM讀取excel的方式,沒有參與資源管線
    4. Reading Text Data Into A Unity Game
    5. 所有需要通過散包方式加載的文件必須通過WWW的方式,加載後可自動識別movie、text、texture和bytes四種格式
    6. Unity3d 動態讀取外部文件,包括對已封裝好的內部資源的加載和外部散包資源的加載
    7. 在Unity3D的WebGame中實現資源動態加載
  • 自帶GUI:
    1. Used GUILayout.FlexibleSpace to center your automatic GUILayout
  • 引用第三方庫:
    1. Unity支持PInvoke(Platform Invocation Services)方式的插件,Unity加載Plugin時遇到的一些問題
    2. Plugins (Pro/Mobile-Only Feature)
  • 團隊工作:
    1. SO HOW DO TEAMS WORK ON A BIG UNITY3D PROJECT?
  • 編譯與發佈:
    1. 定製Build流程: Build Player Pipeline
    2. Unity發佈的exe是非託管的,但邏輯dll是放在GAME_Data\Managed下的,代碼完全可以反編譯
    3. 沒發現Unity編譯後的資源目錄Game_Data中的文件結構和編輯器中的Project目錄有明顯的直接對應關係
    4. 編譯後資源都被放到sharedassets*.assets這樣的加密文件中,其中*可能是場景編號; Scene文件可能被放到了level*中
    5. Resources和其他目錄不一樣,其他目錄編譯完後會被自動打包合併,而Resources會有一個直接對應的resources.asset文件
    6. 相同的源反覆編譯生成的二進制不變
    7. 添加空場景後Game_Data/mainData發生改變
      1. prefab和各種資源關聯啥的會自動處理的,只把用到的打包
    8. 編輯器中Import Package但沒有真正使用不會對編譯結果造成影響
    9. Game.exe始終是穩定不變的
  • 版本管理:
    1. 即使採用了Force Text選項,ProjectSettings下很多asset文件也還是二進制格式的
  • WebBrowser相關:
    1. WPF WebBrowser 與 Unity3D 交互操作
    2. 可通過Application.ExternalCall方法調用瀏覽器js方法
    3. WPF webBrowser 與 unity3d 交互操作
  • 字體:
    1. 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]
  • 其他:
    1. Unity3D實用工具彙總
    2. Convert unity javascript (unityscript) to C#
    3. Unity3D屏幕截圖
    4. Unity目前能在手機上做到的效果,其中shader開放可免費使用
    5. 採用雙色半圓拼接餅狀圖是個技巧 
      Image[1]
    6. Unity問題集(不斷更新中)
  • Unity中寫C#腳本要注意的問題(僅限於MonoBehaviour子類)
    1. Inherit from MonoBehaviour
    2. Use the Awake or Start function to do initialisation
    3. The class name must match the file name
    4. Coroutines have a different syntax in C#
      1. Coroutines have to have a return type of IEnumerator and you yield using "yield return" instead of just "yield"
    5. Don't use namespaces
    6. Only member variables are serialized and are shown in the Inspector
    7. Avoid using the constructor or variable initializers
      1. Never initialize any values in the constructor or variable initializers in a MonoBehaviour script. Instead use Awake or Start for this purpose.
  • AssertBundle
    1. Unity bundle的製作和使用
    2. Build asset bundle .unity3d
  • Editor擴展腳本:
    1. Editor腳本是可以用C#寫的,編譯完後重啓Unity生效
    2. 不要在Editor腳本中採用中文菜單,有一定可能down機
    3. 如果亂碼,需要將文件保存爲UTF8格式
  • 壓縮方式用的是lzma
  • Unity的動態下載關卡與動態下載資源
  • Unity3D命令行Build,這個對版本製作有用
  • 版本控制:
    1. Unity3d版本控制,哪些文件該放到svn的問題解決
    2. Unity目前的版本已經把需要svn控制的文件單獨歸類放到Project Settings裏了,現在只需要將Assets和ProjectSettings兩目錄加入svn即可 @Using External Version Control Systems with Unity
    3. 必須進行以下設置纔可將項目加入到svn管理: 
      Image(1)Image(2)
    4. meta文件爲Unity內部使用,不要手工更改,也必須加入svn
      1. Unity內部是用GUID做文件間引用的
    5. Force Text可以將場景文件序列化爲文本,以利於版本控制,默認爲二進制
      1. Unity資源序列化採用的是YAML
  • 場景加載進度條
  • 關於Unity3D的協程(Coroutine)
  • NGUI:
    1. Unity3D強大的UI插件(NGUI)
    2. NGUI: Documentation
    3. 中文教程: Unity界面插件NGUI基礎教程Unity 3D 學習筆記 - 秒大刀 - 秒大刀 博客
    4. 中文教程: Unity界面插件NGUI核心組件說明
    5. 相同Depth的控件會存在z排序不穩定問題!複雜界面要進行合理的規劃
  • Unity內建Package簡要說明
  • Unity引用第三方dll隨便拖到項目任何目錄就可以了
  • 所引用的託管dll必須是net3.5版本以下的(包括)
  • 如果託管dll依賴非託管dll,則pc standalone版本的可行,web版的有安全限制,移動版也不可行,甚至System.IO名字空間都是受限的
  • protobuf
    1. protobuf-net要採用net20版本的,不要用mono版的,據說有坑
    2. protobuf-csharp-port? and How to choose between protobuf-csharp-port and protobuf-net
  • 微端構造AssetBundle的時候不加BuildAssetBundleOptions.DeterministicAssetBundle選項,兩次出來的md5碼就不一樣
  • System.Diagnostics.Debug.Assert無法在Unity中使用
    1. Debugging context in Unity3D
    2. 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調試 
    Image(3)
  • protobuf編解碼在Unity Editor中運行正常,但單獨部署運行拋出TypeInitializationException的問題
    1. 如果發現Unity Editor中運行正常而單獨運行時不正常,可以考慮將Api Compatibility Level改爲.NET 2.0而不是其Subset 
      Image(4)
  • Terrain:
    1. Hightmap Resolution會比Terrain Resolution大1
    2. 移動平臺小地形最好用模型,或者將Unity自帶的Terrain用插件導出爲模型,省性能。Unity Terrain依賴shader 2.0,某些手機不支持,即使導出地圖也依賴shader 2.0,自己做地形模型一張貼圖即可搞定
    3. Skybox的設置在Edit/RenderSettings/Skybox Material下,確保Game Overlay按鈕選中纔可以顯示出來 
      Image(5)
    4. 要第三人稱在場景中漫遊,需要將First Person Controller加入到場景
    5. 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. 
      Image(6)?
  • 支持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的導出 
    Image(7)
  • 使用Unity進行Web MMO遊戲開發技術研究 @張昆 2010-5-5
    1. 動態下載和加載資源:
      1. Web MMO需要儘量減少首次下載量,並能在遊戲運行中動態加載資源
      2. 遊戲運行時資源下載和加載,Unity Pro支持兩種方法: 資源包和資源目錄。非Pro版本智能使用資源目錄方法。一個資源包是一個外部的資源集合,遊戲中可以使用多個資源包,資源包是在發行版本以外存在的。資源目錄是一些資源的集合,資源目錄被包含在發行版本里面,但是並沒有和任何遊戲對象有關聯。資源目錄通過Edit->Project Settings->Player的First Streamed Level With Resource來設定
    2. 對Web MMO產品的建議
      1. 主要是資源大小的考慮,資源中,貼圖是大頭,需要儘量減少貼圖使用量。卡通類遊戲比較適合
      2. 由於動態下載和加載資源會一直存在,玩家角色在場景中的移動速度不宜過大,大場景不宜頻繁切換。資源動態下載需要佔用玩家一定網絡帶寬
    3. 使用Unity的準備工作:
      1. Unity畢竟是一款包含內容和功能很多的遊戲引擎。需要花一些時間熟悉其編輯器、代碼和開發環境、資源生產流程等主要功能。不建議項目開始前沒有一定的準備期
  • Unity3D學習筆記,非常給力的一組學習筆記
    1. unity的主要使用者是關卡策劃和程序員
    2. 目前Unity對中文的支持不是很好,因此在Unity中儘量不要使用中文,防止出現各種各樣莫名其妙的異常
    3. 如何調整太陽光方向和天空盒太陽貼圖方向一致?
      1. 首先在設計視圖中拖動視角,讓鏡頭中心對準天空盒上的太陽
      2. 然後在渲染設置中臨時將天空盒設置爲無(爲了方便調整Sun的角度,否則天空盒太亮看不清楚)
      3. 然後選中Sun並使用旋轉工具(快捷鍵E),將光線的方向正對自己
      4. 然後再將天空盒恢復即可 
        Image(8)
    4. 一個好的遊戲沒有好的配樂和音效,就好像無暇的水晶缺少了燈光的陪襯。而音樂不僅能渲染出玩家攻略遊戲時的氛圍,還能增加提高玩家對遊戲的認知度 @音樂和音效
    5. 所有Prefab實例的屬性都引用自Prefab的預設,當預設屬性改變時,對應的實例屬性也會相應改變。但當實例的某個屬性被手工調整後,即使修改預設的屬性值,該值也會以手工調整的值爲準
    6. 隨着360和Unity的合作,前者的360安全瀏覽器預裝Unity3d的方案實施會給Unity進軍中國市場帶來可觀的便捷
    7. Choosing GUI framework for your Unity3D project: EZGUI vs NGUI, Part I and Part II
    8. NGUI製作小地圖
  • Directional light的Shadow Type:
    1. No Shadows 
      Image(9)
    2. Hard Shadow - 影子的輪廓比較清晰 
      Image(10)
    3. Soft Shadow - 影子邊緣模糊一點,更加逼真 
      Image(11)
  • 粒子系統:
    1. Particle Emitter: 只管發射粒子
    2. Particle Animator: 粒子動畫器,負責對發射器產生的粒子進行二次加工,比如使粒子的顏色不斷的變化,縮放粒子等
    3. Particle Renderer: 粒子渲染器,負責將粒子渲染到遊戲中,並且可以決定粒子的材質、光影等
  • 當選中Prefab的實例時,檢視面板上就會顯示預製對象菜單:
    1. Select:在工程面板中快速選取該實例引用的預製
    2. Revert:將實例修改過的參數全部還原爲預製的參數
    3. Apply:將實例修改過的參數全部應用到預製,此時所有引用此預製的實例會一起受到影響而變動
  • yield用法:
    1. Unity3D使用C#實現Coroutines & Yield
      1. 所有使用yield的函數必須返回IEnumerator類型(這點和C# IEnumerable標準用法有差異!)
      2. 所有IEnumerator類型函數必須使用”StartCoroutine”這個函數觸發,不能單獨使用
    2. How do I use Yield in C#?
    3. Overview: Coroutines & Yield
    4. MonoBehaviour.StartCoroutine
  • 不同顏色的字體需要創建不同的Materials, 其貼圖設置爲字體貼圖, Shader要採用GUI/TextShader 
    Image(12)
  • Unity手冊非官方翻譯版
  • Convert unity javascript (unityscript) to C#
  • 只有public field纔可進入Inspector窗口, 該功能可用[NonSerialized]特性屏蔽
    1. 和Inspector窗口關聯的public field重命名後Inspector中編輯的值會丟失!
    2. 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.
    3. public property不會進入Instactor
    4. enum在Inspector中會自動展示爲ComboBox
  • 動態調用, 解耦神器:
    1. 可通過SendMessage方法進行動態方法調用!
    2. 可採用Find/FindWithTag方法, 用字符串名稱的方式直接查找GameObject對象
  • 將Prefab直接拖入場景可進行查看
  • Where can i find the unityengine xml?, unity官方並未提供引擎dll對應的xml文檔, 這對VisualStudio下的自動提示不友好
  • WCF & Unity
    1. Service References的代碼可用VisualStudio自帶的“添加服務引用”功能,沒必要非命令行用mono的svcutil。成功生成後需要將對應的C#代碼文件拷貝到Assert下合適的目錄中,否則不會參加編譯
    2. 需要從C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0拷貝到*\Assets\Plugins下的dll有:
      1. System.Runtime.Serialization.dll
      2. System.Security.dll
      3. System.ServiceModel.dll
      4. System.IdentityModel.Selectors.dll // 該文件也是必要的,否則System.ServiceModel.dll不會被正確引入
    3. Consuming a WCF Service from Unity3D
    4. Is it possible to use WCF in scripts?
    5. Webservices In Unity
    6. Unity中使用WCF服務小教程
  • Unity會自動生成的兩種項目文件,*-csharp.sln/*-vs.csproj或*.sln/*.csproj,前者是供VS用的,後者是供MonoDevelop用的,包含了自定義的項目類型*.unityproj
  • 不要手工向*-csharp.sln中加入任何project,這會在Unity重新生成後覆蓋。可將sln另存爲得以解決
  • NGUI
    1. Unity界面插件NGUI基礎教程
    2. Unity界面插件NGUI核心組件說明
    3. NGUI: Documentation
      1. 譯文: Unity3d 界面插件NGUI
    4. 調整NGUI“米老鼠”大小: 
      Image(15) Image(16)Image(17)
  • TexturePacker is a gui and command line tool to create sprite sheets or sprite atlases
    1. Request free license
    2. Works With Any Game Engine,包括cocos2d、CEGUI、Unity等,還可方便自定義輸出格式
  • unity雙開: 
    Image(13)Image(14)
  • 暫沒有內嵌瀏覽器的支持Embed Web Browser into unity
  • The New GUI,將會在隨後的unity新版中得到支持
  • bitverse GUI庫,在移動平臺會遇到性能問題,但開發效率要比NGUI高
  • Unity腳本週期關係


  • 編輯器:
    1. Hierarchy窗口中是場景中的Game Object列表
    2. Project窗口中是磁盤上Assets文件夾中的內容,可用來創建Game Object
  • 調試:
    1. 調試用Debug.Log()或者print函數打日誌
    2. 目前完全無法採用VisualStudio進行調試,只能用MonoDevelop。因Unity採用的是Mono運行時引擎而不是CLR,參考Debugging using Visual Studio 2010
      1. 另發現UnityVS插件,Write and debug your Unity games inside Visual Studio
      2. 官方文檔: Debugger
    3. MonoDevelop對Unity的attach調試不能跨dll
  • Mono:
    1. Unity自帶Mono版本可能是2.6
      1. Which version of mono used in Unity 3.2?
    2. 目前應謹慎考慮採用Mono寫需長時間運行的服務器程序
  • MonoDevelop:
    1. MonoDevelop寫的源碼文件會以UTF8 Unix結尾方式保存
    2. Unity自帶的MonoDevelop和官方MonoDevelop的有區別的,不要升級MonoDevelop
  • 實用函數:
    1. Application.LoadLevel()可以切換場景
  • 資源管理:
    1. 文件打包用的是AssetBundle
    2. 所有通過Resources類加載的資源必須放在名爲Resources的目錄中
      1. 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.
      2. 不同Resources目錄同名目錄加載規則無法預測!
    3. Reading Excel Files and Sheets into Unity,用的是直接COM讀取excel的方式,沒有參與資源管線
    4. Reading Text Data Into A Unity Game
    5. 所有需要通過散包方式加載的文件必須通過WWW的方式,加載後可自動識別movie、text、texture和bytes四種格式
    6. Unity3d 動態讀取外部文件,包括對已封裝好的內部資源的加載和外部散包資源的加載
    7. 在Unity3D的WebGame中實現資源動態加載
  • 自帶GUI:
    1. Used GUILayout.FlexibleSpace to center your automatic GUILayout
  • 引用第三方庫:
    1. Unity支持PInvoke(Platform Invocation Services)方式的插件,Unity加載Plugin時遇到的一些問題
    2. Plugins (Pro/Mobile-Only Feature)
  • 團隊工作:
    1. SO HOW DO TEAMS WORK ON A BIG UNITY3D PROJECT?
  • 編譯與發佈:
    1. 定製Build流程: Build Player Pipeline
    2. Unity發佈的exe是非託管的,但邏輯dll是放在GAME_Data\Managed下的,代碼完全可以反編譯
    3. 沒發現Unity編譯後的資源目錄Game_Data中的文件結構和編輯器中的Project目錄有明顯的直接對應關係
    4. 編譯後資源都被放到sharedassets*.assets這樣的加密文件中,其中*可能是場景編號; Scene文件可能被放到了level*中
    5. Resources和其他目錄不一樣,其他目錄編譯完後會被自動打包合併,而Resources會有一個直接對應的resources.asset文件
    6. 相同的源反覆編譯生成的二進制不變
    7. 添加空場景後Game_Data/mainData發生改變
      1. prefab和各種資源關聯啥的會自動處理的,只把用到的打包
    8. 編輯器中Import Package但沒有真正使用不會對編譯結果造成影響
    9. Game.exe始終是穩定不變的
  • 版本管理:
    1. 即使採用了Force Text選項,ProjectSettings下很多asset文件也還是二進制格式的
  • WebBrowser相關:
    1. WPF WebBrowser 與 Unity3D 交互操作
    2. 可通過Application.ExternalCall方法調用瀏覽器js方法
    3. WPF webBrowser 與 unity3d 交互操作
  • 字體:
    1. 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]
  • 其他:
    1. Unity3D實用工具彙總
    2. Convert unity javascript (unityscript) to C#
    3. Unity3D屏幕截圖
    4. Unity目前能在手機上做到的效果,其中shader開放可免費使用
    5. 採用雙色半圓拼接餅狀圖是個技巧 
      Image[1]
    6. Unity問題集(不斷更新中)
  • Unity中寫C#腳本要注意的問題(僅限於MonoBehaviour子類)
    1. Inherit from MonoBehaviour
    2. Use the Awake or Start function to do initialisation
    3. The class name must match the file name
    4. Coroutines have a different syntax in C#
      1. Coroutines have to have a return type of IEnumerator and you yield using "yield return" instead of just "yield"
    5. Don't use namespaces
    6. Only member variables are serialized and are shown in the Inspector
    7. Avoid using the constructor or variable initializers
      1. Never initialize any values in the constructor or variable initializers in a MonoBehaviour script. Instead use Awake or Start for this purpose.
  • AssertBundle
    1. Unity bundle的製作和使用
    2. Build asset bundle .unity3d
  • Editor擴展腳本:
    1. Editor腳本是可以用C#寫的,編譯完後重啓Unity生效
    2. 不要在Editor腳本中採用中文菜單,有一定可能down機
    3. 如果亂碼,需要將文件保存爲UTF8格式
  • 壓縮方式用的是lzma
  • Unity的動態下載關卡與動態下載資源
  • Unity3D命令行Build,這個對版本製作有用
  • 版本控制:
    1. Unity3d版本控制,哪些文件該放到svn的問題解決
    2. Unity目前的版本已經把需要svn控制的文件單獨歸類放到Project Settings裏了,現在只需要將Assets和ProjectSettings兩目錄加入svn即可 @Using External Version Control Systems with Unity
    3. 必須進行以下設置纔可將項目加入到svn管理: 
      Image(1)Image(2)
    4. meta文件爲Unity內部使用,不要手工更改,也必須加入svn
      1. Unity內部是用GUID做文件間引用的
    5. Force Text可以將場景文件序列化爲文本,以利於版本控制,默認爲二進制
      1. Unity資源序列化採用的是YAML
  • 場景加載進度條
  • 關於Unity3D的協程(Coroutine)
  • NGUI:
    1. Unity3D強大的UI插件(NGUI)
    2. NGUI: Documentation
    3. 中文教程: Unity界面插件NGUI基礎教程Unity 3D 學習筆記 - 秒大刀 - 秒大刀 博客
    4. 中文教程: Unity界面插件NGUI核心組件說明
    5. 相同Depth的控件會存在z排序不穩定問題!複雜界面要進行合理的規劃
  • Unity內建Package簡要說明
  • Unity引用第三方dll隨便拖到項目任何目錄就可以了
  • 所引用的託管dll必須是net3.5版本以下的(包括)
  • 如果託管dll依賴非託管dll,則pc standalone版本的可行,web版的有安全限制,移動版也不可行,甚至System.IO名字空間都是受限的
  • protobuf
    1. protobuf-net要採用net20版本的,不要用mono版的,據說有坑
    2. protobuf-csharp-port? and How to choose between protobuf-csharp-port and protobuf-net
  • 微端構造AssetBundle的時候不加BuildAssetBundleOptions.DeterministicAssetBundle選項,兩次出來的md5碼就不一樣
  • System.Diagnostics.Debug.Assert無法在Unity中使用
    1. Debugging context in Unity3D
    2. 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調試 
    Image(3)
  • protobuf編解碼在Unity Editor中運行正常,但單獨部署運行拋出TypeInitializationException的問題
    1. 如果發現Unity Editor中運行正常而單獨運行時不正常,可以考慮將Api Compatibility Level改爲.NET 2.0而不是其Subset 
      Image(4)
  • Terrain:
    1. Hightmap Resolution會比Terrain Resolution大1
    2. 移動平臺小地形最好用模型,或者將Unity自帶的Terrain用插件導出爲模型,省性能。Unity Terrain依賴shader 2.0,某些手機不支持,即使導出地圖也依賴shader 2.0,自己做地形模型一張貼圖即可搞定
    3. Skybox的設置在Edit/RenderSettings/Skybox Material下,確保Game Overlay按鈕選中纔可以顯示出來 
      Image(5)
    4. 要第三人稱在場景中漫遊,需要將First Person Controller加入到場景
    5. 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. 
      Image(6)?
  • 支持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的導出 
    Image(7)
  • 使用Unity進行Web MMO遊戲開發技術研究 @張昆 2010-5-5
    1. 動態下載和加載資源:
      1. Web MMO需要儘量減少首次下載量,並能在遊戲運行中動態加載資源
      2. 遊戲運行時資源下載和加載,Unity Pro支持兩種方法: 資源包和資源目錄。非Pro版本智能使用資源目錄方法。一個資源包是一個外部的資源集合,遊戲中可以使用多個資源包,資源包是在發行版本以外存在的。資源目錄是一些資源的集合,資源目錄被包含在發行版本里面,但是並沒有和任何遊戲對象有關聯。資源目錄通過Edit->Project Settings->Player的First Streamed Level With Resource來設定
    2. 對Web MMO產品的建議
      1. 主要是資源大小的考慮,資源中,貼圖是大頭,需要儘量減少貼圖使用量。卡通類遊戲比較適合
      2. 由於動態下載和加載資源會一直存在,玩家角色在場景中的移動速度不宜過大,大場景不宜頻繁切換。資源動態下載需要佔用玩家一定網絡帶寬
    3. 使用Unity的準備工作:
      1. Unity畢竟是一款包含內容和功能很多的遊戲引擎。需要花一些時間熟悉其編輯器、代碼和開發環境、資源生產流程等主要功能。不建議項目開始前沒有一定的準備期
  • Unity3D學習筆記,非常給力的一組學習筆記
    1. unity的主要使用者是關卡策劃和程序員
    2. 目前Unity對中文的支持不是很好,因此在Unity中儘量不要使用中文,防止出現各種各樣莫名其妙的異常
    3. 如何調整太陽光方向和天空盒太陽貼圖方向一致?
      1. 首先在設計視圖中拖動視角,讓鏡頭中心對準天空盒上的太陽
      2. 然後在渲染設置中臨時將天空盒設置爲無(爲了方便調整Sun的角度,否則天空盒太亮看不清楚)
      3. 然後選中Sun並使用旋轉工具(快捷鍵E),將光線的方向正對自己
      4. 然後再將天空盒恢復即可 
        Image(8)
    4. 一個好的遊戲沒有好的配樂和音效,就好像無暇的水晶缺少了燈光的陪襯。而音樂不僅能渲染出玩家攻略遊戲時的氛圍,還能增加提高玩家對遊戲的認知度 @音樂和音效
    5. 所有Prefab實例的屬性都引用自Prefab的預設,當預設屬性改變時,對應的實例屬性也會相應改變。但當實例的某個屬性被手工調整後,即使修改預設的屬性值,該值也會以手工調整的值爲準
    6. 隨着360和Unity的合作,前者的360安全瀏覽器預裝Unity3d的方案實施會給Unity進軍中國市場帶來可觀的便捷
    7. Choosing GUI framework for your Unity3D project: EZGUI vs NGUI, Part I and Part II
    8. NGUI製作小地圖
  • Directional light的Shadow Type:
    1. No Shadows 
      Image(9)
    2. Hard Shadow - 影子的輪廓比較清晰 
      Image(10)
    3. Soft Shadow - 影子邊緣模糊一點,更加逼真 
      Image(11)
  • 粒子系統:
    1. Particle Emitter: 只管發射粒子
    2. Particle Animator: 粒子動畫器,負責對發射器產生的粒子進行二次加工,比如使粒子的顏色不斷的變化,縮放粒子等
    3. Particle Renderer: 粒子渲染器,負責將粒子渲染到遊戲中,並且可以決定粒子的材質、光影等
  • 當選中Prefab的實例時,檢視面板上就會顯示預製對象菜單:
    1. Select:在工程面板中快速選取該實例引用的預製
    2. Revert:將實例修改過的參數全部還原爲預製的參數
    3. Apply:將實例修改過的參數全部應用到預製,此時所有引用此預製的實例會一起受到影響而變動
  • yield用法:
    1. Unity3D使用C#實現Coroutines & Yield
      1. 所有使用yield的函數必須返回IEnumerator類型(這點和C# IEnumerable標準用法有差異!)
      2. 所有IEnumerator類型函數必須使用”StartCoroutine”這個函數觸發,不能單獨使用
    2. How do I use Yield in C#?
    3. Overview: Coroutines & Yield
    4. MonoBehaviour.StartCoroutine
  • 不同顏色的字體需要創建不同的Materials, 其貼圖設置爲字體貼圖, Shader要採用GUI/TextShader 
    Image(12)
  • Unity手冊非官方翻譯版
  • Convert unity javascript (unityscript) to C#
  • 只有public field纔可進入Inspector窗口, 該功能可用[NonSerialized]特性屏蔽
    1. 和Inspector窗口關聯的public field重命名後Inspector中編輯的值會丟失!
    2. 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.
    3. public property不會進入Instactor
    4. enum在Inspector中會自動展示爲ComboBox
  • 動態調用, 解耦神器:
    1. 可通過SendMessage方法進行動態方法調用!
    2. 可採用Find/FindWithTag方法, 用字符串名稱的方式直接查找GameObject對象
  • 將Prefab直接拖入場景可進行查看
  • Where can i find the unityengine xml?, unity官方並未提供引擎dll對應的xml文檔, 這對VisualStudio下的自動提示不友好
  • WCF & Unity
    1. Service References的代碼可用VisualStudio自帶的“添加服務引用”功能,沒必要非命令行用mono的svcutil。成功生成後需要將對應的C#代碼文件拷貝到Assert下合適的目錄中,否則不會參加編譯
    2. 需要從C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0拷貝到*\Assets\Plugins下的dll有:
      1. System.Runtime.Serialization.dll
      2. System.Security.dll
      3. System.ServiceModel.dll
      4. System.IdentityModel.Selectors.dll // 該文件也是必要的,否則System.ServiceModel.dll不會被正確引入
    3. Consuming a WCF Service from Unity3D
    4. Is it possible to use WCF in scripts?
    5. Webservices In Unity
    6. Unity中使用WCF服務小教程
  • Unity會自動生成的兩種項目文件,*-csharp.sln/*-vs.csproj或*.sln/*.csproj,前者是供VS用的,後者是供MonoDevelop用的,包含了自定義的項目類型*.unityproj
  • 不要手工向*-csharp.sln中加入任何project,這會在Unity重新生成後覆蓋。可將sln另存爲得以解決
  • NGUI
    1. Unity界面插件NGUI基礎教程
    2. Unity界面插件NGUI核心組件說明
    3. NGUI: Documentation
      1. 譯文: Unity3d 界面插件NGUI
    4. 調整NGUI“米老鼠”大小: 
      Image(15) Image(16)Image(17)
  • TexturePacker is a gui and command line tool to create sprite sheets or sprite atlases
    1. Request free license
    2. Works With Any Game Engine,包括cocos2d、CEGUI、Unity等,還可方便自定義輸出格式
  • unity雙開: 
    Image(13)Image(14)
  • 暫沒有內嵌瀏覽器的支持Embed Web Browser into unity
  • The New GUI,將會在隨後的unity新版中得到支持
  • bitverse GUI庫,在移動平臺會遇到性能問題,但開發效率要比NGUI高
  • Unity腳本週期關係
  • 編輯器:
    1. Hierarchy窗口中是場景中的Game Object列表
    2. Project窗口中是磁盤上Assets文件夾中的內容,可用來創建Game Object
  • 調試:
    1. 調試用Debug.Log()或者print函數打日誌
    2. 目前完全無法採用VisualStudio進行調試,只能用MonoDevelop。因Unity採用的是Mono運行時引擎而不是CLR,參考Debugging using Visual Studio 2010
      1. 另發現UnityVS插件,Write and debug your Unity games inside Visual Studio
      2. 官方文檔: Debugger
    3. MonoDevelop對Unity的attach調試不能跨dll
  • Mono:
    1. Unity自帶Mono版本可能是2.6
      1. Which version of mono used in Unity 3.2?
    2. 目前應謹慎考慮採用Mono寫需長時間運行的服務器程序
  • MonoDevelop:
    1. MonoDevelop寫的源碼文件會以UTF8 Unix結尾方式保存
    2. Unity自帶的MonoDevelop和官方MonoDevelop的有區別的,不要升級MonoDevelop
  • 實用函數:
    1. Application.LoadLevel()可以切換場景
  • 資源管理:
    1. 文件打包用的是AssetBundle
    2. 所有通過Resources類加載的資源必須放在名爲Resources的目錄中
      1. 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.
      2. 不同Resources目錄同名目錄加載規則無法預測!
    3. Reading Excel Files and Sheets into Unity,用的是直接COM讀取excel的方式,沒有參與資源管線
    4. Reading Text Data Into A Unity Game
    5. 所有需要通過散包方式加載的文件必須通過WWW的方式,加載後可自動識別movie、text、texture和bytes四種格式
    6. Unity3d 動態讀取外部文件,包括對已封裝好的內部資源的加載和外部散包資源的加載
    7. 在Unity3D的WebGame中實現資源動態加載
  • 自帶GUI:
    1. Used GUILayout.FlexibleSpace to center your automatic GUILayout
  • 引用第三方庫:
    1. Unity支持PInvoke(Platform Invocation Services)方式的插件,Unity加載Plugin時遇到的一些問題
    2. Plugins (Pro/Mobile-Only Feature)
  • 團隊工作:
    1. SO HOW DO TEAMS WORK ON A BIG UNITY3D PROJECT?
  • 編譯與發佈:
    1. 定製Build流程: Build Player Pipeline
    2. Unity發佈的exe是非託管的,但邏輯dll是放在GAME_Data\Managed下的,代碼完全可以反編譯
    3. 沒發現Unity編譯後的資源目錄Game_Data中的文件結構和編輯器中的Project目錄有明顯的直接對應關係
    4. 編譯後資源都被放到sharedassets*.assets這樣的加密文件中,其中*可能是場景編號; Scene文件可能被放到了level*中
    5. Resources和其他目錄不一樣,其他目錄編譯完後會被自動打包合併,而Resources會有一個直接對應的resources.asset文件
    6. 相同的源反覆編譯生成的二進制不變
    7. 添加空場景後Game_Data/mainData發生改變
      1. prefab和各種資源關聯啥的會自動處理的,只把用到的打包
    8. 編輯器中Import Package但沒有真正使用不會對編譯結果造成影響
    9. Game.exe始終是穩定不變的
  • 版本管理:
    1. 即使採用了Force Text選項,ProjectSettings下很多asset文件也還是二進制格式的
  • WebBrowser相關:
    1. WPF WebBrowser 與 Unity3D 交互操作
    2. 可通過Application.ExternalCall方法調用瀏覽器js方法
    3. WPF webBrowser 與 unity3d 交互操作
  • 字體:
    1. 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]
  • 其他:
    1. Unity3D實用工具彙總
    2. Convert unity javascript (unityscript) to C#
    3. Unity3D屏幕截圖
    4. Unity目前能在手機上做到的效果,其中shader開放可免費使用
    5. 採用雙色半圓拼接餅狀圖是個技巧 
      Image[1]
    6. Unity問題集(不斷更新中)
  • Unity中寫C#腳本要注意的問題(僅限於MonoBehaviour子類)
    1. Inherit from MonoBehaviour
    2. Use the Awake or Start function to do initialisation
    3. The class name must match the file name
    4. Coroutines have a different syntax in C#
      1. Coroutines have to have a return type of IEnumerator and you yield using "yield return" instead of just "yield"
    5. Don't use namespaces
    6. Only member variables are serialized and are shown in the Inspector
    7. Avoid using the constructor or variable initializers
      1. Never initialize any values in the constructor or variable initializers in a MonoBehaviour script. Instead use Awake or Start for this purpose.
  • AssertBundle
    1. Unity bundle的製作和使用
    2. Build asset bundle .unity3d
  • Editor擴展腳本:
    1. Editor腳本是可以用C#寫的,編譯完後重啓Unity生效
    2. 不要在Editor腳本中採用中文菜單,有一定可能down機
    3. 如果亂碼,需要將文件保存爲UTF8格式
  • 壓縮方式用的是lzma
  • Unity的動態下載關卡與動態下載資源
  • Unity3D命令行Build,這個對版本製作有用
  • 版本控制:
    1. Unity3d版本控制,哪些文件該放到svn的問題解決
    2. Unity目前的版本已經把需要svn控制的文件單獨歸類放到Project Settings裏了,現在只需要將Assets和ProjectSettings兩目錄加入svn即可 @Using External Version Control Systems with Unity
    3. 必須進行以下設置纔可將項目加入到svn管理: 
      Image(1)Image(2)
    4. meta文件爲Unity內部使用,不要手工更改,也必須加入svn
      1. Unity內部是用GUID做文件間引用的
    5. Force Text可以將場景文件序列化爲文本,以利於版本控制,默認爲二進制
      1. Unity資源序列化採用的是YAML
  • 場景加載進度條
  • 關於Unity3D的協程(Coroutine)
  • NGUI:
    1. Unity3D強大的UI插件(NGUI)
    2. NGUI: Documentation
    3. 中文教程: Unity界面插件NGUI基礎教程Unity 3D 學習筆記 - 秒大刀 - 秒大刀 博客
    4. 中文教程: Unity界面插件NGUI核心組件說明
    5. 相同Depth的控件會存在z排序不穩定問題!複雜界面要進行合理的規劃
  • Unity內建Package簡要說明
  • Unity引用第三方dll隨便拖到項目任何目錄就可以了
  • 所引用的託管dll必須是net3.5版本以下的(包括)
  • 如果託管dll依賴非託管dll,則pc standalone版本的可行,web版的有安全限制,移動版也不可行,甚至System.IO名字空間都是受限的
  • protobuf
    1. protobuf-net要採用net20版本的,不要用mono版的,據說有坑
    2. protobuf-csharp-port? and How to choose between protobuf-csharp-port and protobuf-net
  • 微端構造AssetBundle的時候不加BuildAssetBundleOptions.DeterministicAssetBundle選項,兩次出來的md5碼就不一樣
  • System.Diagnostics.Debug.Assert無法在Unity中使用
    1. Debugging context in Unity3D
    2. 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調試 
    Image(3)
  • protobuf編解碼在Unity Editor中運行正常,但單獨部署運行拋出TypeInitializationException的問題
    1. 如果發現Unity Editor中運行正常而單獨運行時不正常,可以考慮將Api Compatibility Level改爲.NET 2.0而不是其Subset 
      Image(4)
  • Terrain:
    1. Hightmap Resolution會比Terrain Resolution大1
    2. 移動平臺小地形最好用模型,或者將Unity自帶的Terrain用插件導出爲模型,省性能。Unity Terrain依賴shader 2.0,某些手機不支持,即使導出地圖也依賴shader 2.0,自己做地形模型一張貼圖即可搞定
    3. Skybox的設置在Edit/RenderSettings/Skybox Material下,確保Game Overlay按鈕選中纔可以顯示出來 
      Image(5)
    4. 要第三人稱在場景中漫遊,需要將First Person Controller加入到場景
    5. 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. 
      Image(6)?
  • 支持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的導出 
    Image(7)
  • 使用Unity進行Web MMO遊戲開發技術研究 @張昆 2010-5-5
    1. 動態下載和加載資源:
      1. Web MMO需要儘量減少首次下載量,並能在遊戲運行中動態加載資源
      2. 遊戲運行時資源下載和加載,Unity Pro支持兩種方法: 資源包和資源目錄。非Pro版本智能使用資源目錄方法。一個資源包是一個外部的資源集合,遊戲中可以使用多個資源包,資源包是在發行版本以外存在的。資源目錄是一些資源的集合,資源目錄被包含在發行版本里面,但是並沒有和任何遊戲對象有關聯。資源目錄通過Edit->Project Settings->Player的First Streamed Level With Resource來設定
    2. 對Web MMO產品的建議
      1. 主要是資源大小的考慮,資源中,貼圖是大頭,需要儘量減少貼圖使用量。卡通類遊戲比較適合
      2. 由於動態下載和加載資源會一直存在,玩家角色在場景中的移動速度不宜過大,大場景不宜頻繁切換。資源動態下載需要佔用玩家一定網絡帶寬
    3. 使用Unity的準備工作:
      1. Unity畢竟是一款包含內容和功能很多的遊戲引擎。需要花一些時間熟悉其編輯器、代碼和開發環境、資源生產流程等主要功能。不建議項目開始前沒有一定的準備期
  • Unity3D學習筆記,非常給力的一組學習筆記
    1. unity的主要使用者是關卡策劃和程序員
    2. 目前Unity對中文的支持不是很好,因此在Unity中儘量不要使用中文,防止出現各種各樣莫名其妙的異常
    3. 如何調整太陽光方向和天空盒太陽貼圖方向一致?
      1. 首先在設計視圖中拖動視角,讓鏡頭中心對準天空盒上的太陽
      2. 然後在渲染設置中臨時將天空盒設置爲無(爲了方便調整Sun的角度,否則天空盒太亮看不清楚)
      3. 然後選中Sun並使用旋轉工具(快捷鍵E),將光線的方向正對自己
      4. 然後再將天空盒恢復即可 
        Image(8)
    4. 一個好的遊戲沒有好的配樂和音效,就好像無暇的水晶缺少了燈光的陪襯。而音樂不僅能渲染出玩家攻略遊戲時的氛圍,還能增加提高玩家對遊戲的認知度 @音樂和音效
    5. 所有Prefab實例的屬性都引用自Prefab的預設,當預設屬性改變時,對應的實例屬性也會相應改變。但當實例的某個屬性被手工調整後,即使修改預設的屬性值,該值也會以手工調整的值爲準
    6. 隨着360和Unity的合作,前者的360安全瀏覽器預裝Unity3d的方案實施會給Unity進軍中國市場帶來可觀的便捷
    7. Choosing GUI framework for your Unity3D project: EZGUI vs NGUI, Part I and Part II
    8. NGUI製作小地圖
  • Directional light的Shadow Type:
    1. No Shadows 
      Image(9)
    2. Hard Shadow - 影子的輪廓比較清晰 
      Image(10)
    3. Soft Shadow - 影子邊緣模糊一點,更加逼真 
      Image(11)
  • 粒子系統:
    1. Particle Emitter: 只管發射粒子
    2. Particle Animator: 粒子動畫器,負責對發射器產生的粒子進行二次加工,比如使粒子的顏色不斷的變化,縮放粒子等
    3. Particle Renderer: 粒子渲染器,負責將粒子渲染到遊戲中,並且可以決定粒子的材質、光影等
  • 當選中Prefab的實例時,檢視面板上就會顯示預製對象菜單:
    1. Select:在工程面板中快速選取該實例引用的預製
    2. Revert:將實例修改過的參數全部還原爲預製的參數
    3. Apply:將實例修改過的參數全部應用到預製,此時所有引用此預製的實例會一起受到影響而變動
  • yield用法:
    1. Unity3D使用C#實現Coroutines & Yield
      1. 所有使用yield的函數必須返回IEnumerator類型(這點和C# IEnumerable標準用法有差異!)
      2. 所有IEnumerator類型函數必須使用”StartCoroutine”這個函數觸發,不能單獨使用
    2. How do I use Yield in C#?
    3. Overview: Coroutines & Yield
    4. MonoBehaviour.StartCoroutine
  • 不同顏色的字體需要創建不同的Materials, 其貼圖設置爲字體貼圖, Shader要採用GUI/TextShader 
    Image(12)
  • Unity手冊非官方翻譯版
  • Convert unity javascript (unityscript) to C#
  • 只有public field纔可進入Inspector窗口, 該功能可用[NonSerialized]特性屏蔽
    1. 和Inspector窗口關聯的public field重命名後Inspector中編輯的值會丟失!
    2. 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.
    3. public property不會進入Instactor
    4. enum在Inspector中會自動展示爲ComboBox
  • 動態調用, 解耦神器:
    1. 可通過SendMessage方法進行動態方法調用!
    2. 可採用Find/FindWithTag方法, 用字符串名稱的方式直接查找GameObject對象
  • 將Prefab直接拖入場景可進行查看
  • Where can i find the unityengine xml?, unity官方並未提供引擎dll對應的xml文檔, 這對VisualStudio下的自動提示不友好
  • WCF & Unity
    1. Service References的代碼可用VisualStudio自帶的“添加服務引用”功能,沒必要非命令行用mono的svcutil。成功生成後需要將對應的C#代碼文件拷貝到Assert下合適的目錄中,否則不會參加編譯
    2. 需要從C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0拷貝到*\Assets\Plugins下的dll有:
      1. System.Runtime.Serialization.dll
      2. System.Security.dll
      3. System.ServiceModel.dll
      4. System.IdentityModel.Selectors.dll // 該文件也是必要的,否則System.ServiceModel.dll不會被正確引入
    3. Consuming a WCF Service from Unity3D
    4. Is it possible to use WCF in scripts?
    5. Webservices In Unity
    6. Unity中使用WCF服務小教程
  • Unity會自動生成的兩種項目文件,*-csharp.sln/*-vs.csproj或*.sln/*.csproj,前者是供VS用的,後者是供MonoDevelop用的,包含了自定義的項目類型*.unityproj
  • 不要手工向*-csharp.sln中加入任何project,這會在Unity重新生成後覆蓋。可將sln另存爲得以解決
  • NGUI
    1. Unity界面插件NGUI基礎教程
    2. Unity界面插件NGUI核心組件說明
    3. NGUI: Documentation
      1. 譯文: Unity3d 界面插件NGUI
    4. 調整NGUI“米老鼠”大小: 
      Image(15) Image(16)Image(17)
  • TexturePacker is a gui and command line tool to create sprite sheets or sprite atlases
    1. Request free license
    2. Works With Any Game Engine,包括cocos2d、CEGUI、Unity等,還可方便自定義輸出格式
  • unity雙開: 
    Image(13)Image(14)
  • 暫沒有內嵌瀏覽器的支持Embed Web Browser into unity
  • The New GUI,將會在隨後的unity新版中得到支持
  • bitverse GUI庫,在移動平臺會遇到性能問題,但開發效率要比NGUI高
  • Unity腳本週期關係編輯器:
    1. Hierarchy窗口中是場景中的Game Object列表
    2. Project窗口中是磁盤上Assets文件夾中的內容,可用來創建Game Object
  • 調試:
    1. 調試用Debug.Log()或者print函數打日誌
    2. 目前完全無法採用VisualStudio進行調試,只能用MonoDevelop。因Unity採用的是Mono運行時引擎而不是CLR,參考Debugging using Visual Studio 2010
      1. 另發現UnityVS插件,Write and debug your Unity games inside Visual Studio
      2. 官方文檔: Debugger
    3. MonoDevelop對Unity的attach調試不能跨dll
  • Mono:
    1. Unity自帶Mono版本可能是2.6
      1. Which version of mono used in Unity 3.2?
    2. 目前應謹慎考慮採用Mono寫需長時間運行的服務器程序
  • MonoDevelop:
    1. MonoDevelop寫的源碼文件會以UTF8 Unix結尾方式保存
    2. Unity自帶的MonoDevelop和官方MonoDevelop的有區別的,不要升級MonoDevelop
  • 實用函數:
    1. Application.LoadLevel()可以切換場景
  • 資源管理:
    1. 文件打包用的是AssetBundle
    2. 所有通過Resources類加載的資源必須放在名爲Resources的目錄中
      1. 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.
      2. 不同Resources目錄同名目錄加載規則無法預測!
    3. Reading Excel Files and Sheets into Unity,用的是直接COM讀取excel的方式,沒有參與資源管線
    4. Reading Text Data Into A Unity Game
    5. 所有需要通過散包方式加載的文件必須通過WWW的方式,加載後可自動識別movie、text、texture和bytes四種格式
    6. Unity3d 動態讀取外部文件,包括對已封裝好的內部資源的加載和外部散包資源的加載
    7. 在Unity3D的WebGame中實現資源動態加載
  • 自帶GUI:
    1. Used GUILayout.FlexibleSpace to center your automatic GUILayout
  • 引用第三方庫:
    1. Unity支持PInvoke(Platform Invocation Services)方式的插件,Unity加載Plugin時遇到的一些問題
    2. Plugins (Pro/Mobile-Only Feature)
  • 團隊工作:
    1. SO HOW DO TEAMS WORK ON A BIG UNITY3D PROJECT?
  • 編譯與發佈:
    1. 定製Build流程: Build Player Pipeline
    2. Unity發佈的exe是非託管的,但邏輯dll是放在GAME_Data\Managed下的,代碼完全可以反編譯
    3. 沒發現Unity編譯後的資源目錄Game_Data中的文件結構和編輯器中的Project目錄有明顯的直接對應關係
    4. 編譯後資源都被放到sharedassets*.assets這樣的加密文件中,其中*可能是場景編號; Scene文件可能被放到了level*中
    5. Resources和其他目錄不一樣,其他目錄編譯完後會被自動打包合併,而Resources會有一個直接對應的resources.asset文件
    6. 相同的源反覆編譯生成的二進制不變
    7. 添加空場景後Game_Data/mainData發生改變
      1. prefab和各種資源關聯啥的會自動處理的,只把用到的打包
    8. 編輯器中Import Package但沒有真正使用不會對編譯結果造成影響
    9. Game.exe始終是穩定不變的
  • 版本管理:
    1. 即使採用了Force Text選項,ProjectSettings下很多asset文件也還是二進制格式的
  • WebBrowser相關:
    1. WPF WebBrowser 與 Unity3D 交互操作
    2. 可通過Application.ExternalCall方法調用瀏覽器js方法
    3. WPF webBrowser 與 unity3d 交互操作
  • 字體:
    1. 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]
  • 其他:
    1. Unity3D實用工具彙總
    2. Convert unity javascript (unityscript) to C#
    3. Unity3D屏幕截圖
    4. Unity目前能在手機上做到的效果,其中shader開放可免費使用
    5. 採用雙色半圓拼接餅狀圖是個技巧 
      Image[1]
    6. Unity問題集(不斷更新中)
  • Unity中寫C#腳本要注意的問題(僅限於MonoBehaviour子類)
    1. Inherit from MonoBehaviour
    2. Use the Awake or Start function to do initialisation
    3. The class name must match the file name
    4. Coroutines have a different syntax in C#
      1. Coroutines have to have a return type of IEnumerator and you yield using "yield return" instead of just "yield"
    5. Don't use namespaces
    6. Only member variables are serialized and are shown in the Inspector
    7. Avoid using the constructor or variable initializers
      1. Never initialize any values in the constructor or variable initializers in a MonoBehaviour script. Instead use Awake or Start for this purpose.
  • AssertBundle
    1. Unity bundle的製作和使用
    2. Build asset bundle .unity3d
  • Editor擴展腳本:
    1. Editor腳本是可以用C#寫的,編譯完後重啓Unity生效
    2. 不要在Editor腳本中採用中文菜單,有一定可能down機
    3. 如果亂碼,需要將文件保存爲UTF8格式
  • 壓縮方式用的是lzma
  • Unity的動態下載關卡與動態下載資源
  • Unity3D命令行Build,這個對版本製作有用
  • 版本控制:
    1. Unity3d版本控制,哪些文件該放到svn的問題解決
    2. Unity目前的版本已經把需要svn控制的文件單獨歸類放到Project Settings裏了,現在只需要將Assets和ProjectSettings兩目錄加入svn即可 @Using External Version Control Systems with Unity
    3. 必須進行以下設置纔可將項目加入到svn管理: 
      Image(1)Image(2)
    4. meta文件爲Unity內部使用,不要手工更改,也必須加入svn
      1. Unity內部是用GUID做文件間引用的
    5. Force Text可以將場景文件序列化爲文本,以利於版本控制,默認爲二進制
      1. Unity資源序列化採用的是YAML
  • 場景加載進度條
  • 關於Unity3D的協程(Coroutine)
  • NGUI:
    1. Unity3D強大的UI插件(NGUI)
    2. NGUI: Documentation
    3. 中文教程: Unity界面插件NGUI基礎教程Unity 3D 學習筆記 - 秒大刀 - 秒大刀 博客
    4. 中文教程: Unity界面插件NGUI核心組件說明
    5. 相同Depth的控件會存在z排序不穩定問題!複雜界面要進行合理的規劃
  • Unity內建Package簡要說明
  • Unity引用第三方dll隨便拖到項目任何目錄就可以了
  • 所引用的託管dll必須是net3.5版本以下的(包括)
  • 如果託管dll依賴非託管dll,則pc standalone版本的可行,web版的有安全限制,移動版也不可行,甚至System.IO名字空間都是受限的
  • protobuf
    1. protobuf-net要採用net20版本的,不要用mono版的,據說有坑
    2. protobuf-csharp-port? and How to choose between protobuf-csharp-port and protobuf-net
  • 微端構造AssetBundle的時候不加BuildAssetBundleOptions.DeterministicAssetBundle選項,兩次出來的md5碼就不一樣
  • System.Diagnostics.Debug.Assert無法在Unity中使用
    1. Debugging context in Unity3D
    2. 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調試 
    Image(3)
  • protobuf編解碼在Unity Editor中運行正常,但單獨部署運行拋出TypeInitializationException的問題
    1. 如果發現Unity Editor中運行正常而單獨運行時不正常,可以考慮將Api Compatibility Level改爲.NET 2.0而不是其Subset 
      Image(4)
  • Terrain:
    1. Hightmap Resolution會比Terrain Resolution大1
    2. 移動平臺小地形最好用模型,或者將Unity自帶的Terrain用插件導出爲模型,省性能。Unity Terrain依賴shader 2.0,某些手機不支持,即使導出地圖也依賴shader 2.0,自己做地形模型一張貼圖即可搞定
    3. Skybox的設置在Edit/RenderSettings/Skybox Material下,確保Game Overlay按鈕選中纔可以顯示出來 
      Image(5)
    4. 要第三人稱在場景中漫遊,需要將First Person Controller加入到場景
    5. 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. 
      Image(6)?
  • 支持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的導出 
    Image(7)
  • 使用Unity進行Web MMO遊戲開發技術研究 @張昆 2010-5-5
    1. 動態下載和加載資源:
      1. Web MMO需要儘量減少首次下載量,並能在遊戲運行中動態加載資源
      2. 遊戲運行時資源下載和加載,Unity Pro支持兩種方法: 資源包和資源目錄。非Pro版本智能使用資源目錄方法。一個資源包是一個外部的資源集合,遊戲中可以使用多個資源包,資源包是在發行版本以外存在的。資源目錄是一些資源的集合,資源目錄被包含在發行版本里面,但是並沒有和任何遊戲對象有關聯。資源目錄通過Edit->Project Settings->Player的First Streamed Level With Resource來設定
    2. 對Web MMO產品的建議
      1. 主要是資源大小的考慮,資源中,貼圖是大頭,需要儘量減少貼圖使用量。卡通類遊戲比較適合
      2. 由於動態下載和加載資源會一直存在,玩家角色在場景中的移動速度不宜過大,大場景不宜頻繁切換。資源動態下載需要佔用玩家一定網絡帶寬
    3. 使用Unity的準備工作:
      1. Unity畢竟是一款包含內容和功能很多的遊戲引擎。需要花一些時間熟悉其編輯器、代碼和開發環境、資源生產流程等主要功能。不建議項目開始前沒有一定的準備期
  • Unity3D學習筆記,非常給力的一組學習筆記
    1. unity的主要使用者是關卡策劃和程序員
    2. 目前Unity對中文的支持不是很好,因此在Unity中儘量不要使用中文,防止出現各種各樣莫名其妙的異常
    3. 如何調整太陽光方向和天空盒太陽貼圖方向一致?
      1. 首先在設計視圖中拖動視角,讓鏡頭中心對準天空盒上的太陽
      2. 然後在渲染設置中臨時將天空盒設置爲無(爲了方便調整Sun的角度,否則天空盒太亮看不清楚)
      3. 然後選中Sun並使用旋轉工具(快捷鍵E),將光線的方向正對自己
      4. 然後再將天空盒恢復即可 
        Image(8)
    4. 一個好的遊戲沒有好的配樂和音效,就好像無暇的水晶缺少了燈光的陪襯。而音樂不僅能渲染出玩家攻略遊戲時的氛圍,還能增加提高玩家對遊戲的認知度 @音樂和音效
    5. 所有Prefab實例的屬性都引用自Prefab的預設,當預設屬性改變時,對應的實例屬性也會相應改變。但當實例的某個屬性被手工調整後,即使修改預設的屬性值,該值也會以手工調整的值爲準
    6. 隨着360和Unity的合作,前者的360安全瀏覽器預裝Unity3d的方案實施會給Unity進軍中國市場帶來可觀的便捷
    7. Choosing GUI framework for your Unity3D project: EZGUI vs NGUI, Part I and Part II
    8. NGUI製作小地圖
  • Directional light的Shadow Type:
    1. No Shadows 
      Image(9)
    2. Hard Shadow - 影子的輪廓比較清晰 
      Image(10)
    3. Soft Shadow - 影子邊緣模糊一點,更加逼真 
      Image(11)
  • 粒子系統:
    1. Particle Emitter: 只管發射粒子
    2. Particle Animator: 粒子動畫器,負責對發射器產生的粒子進行二次加工,比如使粒子的顏色不斷的變化,縮放粒子等
    3. Particle Renderer: 粒子渲染器,負責將粒子渲染到遊戲中,並且可以決定粒子的材質、光影等
  • 當選中Prefab的實例時,檢視面板上就會顯示預製對象菜單:
    1. Select:在工程面板中快速選取該實例引用的預製
    2. Revert:將實例修改過的參數全部還原爲預製的參數
    3. Apply:將實例修改過的參數全部應用到預製,此時所有引用此預製的實例會一起受到影響而變動
  • yield用法:
    1. Unity3D使用C#實現Coroutines & Yield
      1. 所有使用yield的函數必須返回IEnumerator類型(這點和C# IEnumerable標準用法有差異!)
      2. 所有IEnumerator類型函數必須使用”StartCoroutine”這個函數觸發,不能單獨使用
    2. How do I use Yield in C#?
    3. Overview: Coroutines & Yield
    4. MonoBehaviour.StartCoroutine
  • 不同顏色的字體需要創建不同的Materials, 其貼圖設置爲字體貼圖, Shader要採用GUI/TextShader 
    Image(12)
  • Unity手冊非官方翻譯版
  • Convert unity javascript (unityscript) to C#
  • 只有public field纔可進入Inspector窗口, 該功能可用[NonSerialized]特性屏蔽
    1. 和Inspector窗口關聯的public field重命名後Inspector中編輯的值會丟失!
    2. 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.
    3. public property不會進入Instactor
    4. enum在Inspector中會自動展示爲ComboBox
  • 動態調用, 解耦神器:
    1. 可通過SendMessage方法進行動態方法調用!
    2. 可採用Find/FindWithTag方法, 用字符串名稱的方式直接查找GameObject對象
  • 將Prefab直接拖入場景可進行查看
  • Where can i find the unityengine xml?, unity官方並未提供引擎dll對應的xml文檔, 這對VisualStudio下的自動提示不友好
  • WCF & Unity
    1. Service References的代碼可用VisualStudio自帶的“添加服務引用”功能,沒必要非命令行用mono的svcutil。成功生成後需要將對應的C#代碼文件拷貝到Assert下合適的目錄中,否則不會參加編譯
    2. 需要從C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0拷貝到*\Assets\Plugins下的dll有:
      1. System.Runtime.Serialization.dll
      2. System.Security.dll
      3. System.ServiceModel.dll
      4. System.IdentityModel.Selectors.dll // 該文件也是必要的,否則System.ServiceModel.dll不會被正確引入
    3. Consuming a WCF Service from Unity3D
    4. Is it possible to use WCF in scripts?
    5. Webservices In Unity
    6. Unity中使用WCF服務小教程
  • Unity會自動生成的兩種項目文件,*-csharp.sln/*-vs.csproj或*.sln/*.csproj,前者是供VS用的,後者是供MonoDevelop用的,包含了自定義的項目類型*.unityproj
  • 不要手工向*-csharp.sln中加入任何project,這會在Unity重新生成後覆蓋。可將sln另存爲得以解決
  • NGUI
    1. Unity界面插件NGUI基礎教程
    2. Unity界面插件NGUI核心組件說明
    3. NGUI: Documentation
      1. 譯文: Unity3d 界面插件NGUI
    4. 調整NGUI“米老鼠”大小: 
      Image(15) Image(16)Image(17)
  • TexturePacker is a gui and command line tool to create sprite sheets or sprite atlases
    1. Request free license
    2. Works With Any Game Engine,包括cocos2d、CEGUI、Unity等,還可方便自定義輸出格式
  • unity雙開: 
    Image(13)Image(14)
  • 暫沒有內嵌瀏覽器的支持Embed Web Browser into unity
  • The New GUI,將會在隨後的unity新版中得到支持
  • bitverse GUI庫,在移動平臺會遇到性能問題,但開發效率要比NGUI高
  • Unity腳本週期關係
  • 編輯器:
    1. Hierarchy窗口中是場景中的Game Object列表
    2. Project窗口中是磁盤上Assets文件夾中的內容,可用來創建Game Object
  • 調試:
    1. 調試用Debug.Log()或者print函數打日誌
    2. 目前完全無法採用VisualStudio進行調試,只能用MonoDevelop。因Unity採用的是Mono運行時引擎而不是CLR,參考Debugging using Visual Studio 2010
      1. 另發現UnityVS插件,Write and debug your Unity games inside Visual Studio
      2. 官方文檔: Debugger
    3. MonoDevelop對Unity的attach調試不能跨dll
  • Mono:
    1. Unity自帶Mono版本可能是2.6
      1. Which version of mono used in Unity 3.2?
    2. 目前應謹慎考慮採用Mono寫需長時間運行的服務器程序
  • MonoDevelop:
    1. MonoDevelop寫的源碼文件會以UTF8 Unix結尾方式保存
    2. Unity自帶的MonoDevelop和官方MonoDevelop的有區別的,不要升級MonoDevelop
  • 實用函數:
    1. Application.LoadLevel()可以切換場景
  • 資源管理:
    1. 文件打包用的是AssetBundle
    2. 所有通過Resources類加載的資源必須放在名爲Resources的目錄中
      1. 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.
      2. 不同Resources目錄同名目錄加載規則無法預測!
    3. Reading Excel Files and Sheets into Unity,用的是直接COM讀取excel的方式,沒有參與資源管線
    4. Reading Text Data Into A Unity Game
    5. 所有需要通過散包方式加載的文件必須通過WWW的方式,加載後可自動識別movie、text、texture和bytes四種格式
    6. Unity3d 動態讀取外部文件,包括對已封裝好的內部資源的加載和外部散包資源的加載
    7. 在Unity3D的WebGame中實現資源動態加載
  • 自帶GUI:
    1. Used GUILayout.FlexibleSpace to center your automatic GUILayout
  • 引用第三方庫:
    1. Unity支持PInvoke(Platform Invocation Services)方式的插件,Unity加載Plugin時遇到的一些問題
    2. Plugins (Pro/Mobile-Only Feature)
  • 團隊工作:
    1. SO HOW DO TEAMS WORK ON A BIG UNITY3D PROJECT?
  • 編譯與發佈:
    1. 定製Build流程: Build Player Pipeline
    2. Unity發佈的exe是非託管的,但邏輯dll是放在GAME_Data\Managed下的,代碼完全可以反編譯
    3. 沒發現Unity編譯後的資源目錄Game_Data中的文件結構和編輯器中的Project目錄有明顯的直接對應關係
    4. 編譯後資源都被放到sharedassets*.assets這樣的加密文件中,其中*可能是場景編號; Scene文件可能被放到了level*中
    5. Resources和其他目錄不一樣,其他目錄編譯完後會被自動打包合併,而Resources會有一個直接對應的resources.asset文件
    6. 相同的源反覆編譯生成的二進制不變
    7. 添加空場景後Game_Data/mainData發生改變
      1. prefab和各種資源關聯啥的會自動處理的,只把用到的打包
    8. 編輯器中Import Package但沒有真正使用不會對編譯結果造成影響
    9. Game.exe始終是穩定不變的
  • 版本管理:
    1. 即使採用了Force Text選項,ProjectSettings下很多asset文件也還是二進制格式的
  • WebBrowser相關:
    1. WPF WebBrowser 與 Unity3D 交互操作
    2. 可通過Application.ExternalCall方法調用瀏覽器js方法
    3. WPF webBrowser 與 unity3d 交互操作
  • 字體:
    1. 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]
  • 其他:
    1. Unity3D實用工具彙總
    2. Convert unity javascript (unityscript) to C#
    3. Unity3D屏幕截圖
    4. Unity目前能在手機上做到的效果,其中shader開放可免費使用
    5. 採用雙色半圓拼接餅狀圖是個技巧 
      Image[1]
    6. Unity問題集(不斷更新中)
  • Unity中寫C#腳本要注意的問題(僅限於MonoBehaviour子類)
    1. Inherit from MonoBehaviour
    2. Use the Awake or Start function to do initialisation
    3. The class name must match the file name
    4. Coroutines have a different syntax in C#
      1. Coroutines have to have a return type of IEnumerator and you yield using "yield return" instead of just "yield"
    5. Don't use namespaces
    6. Only member variables are serialized and are shown in the Inspector
    7. Avoid using the constructor or variable initializers
      1. Never initialize any values in the constructor or variable initializers in a MonoBehaviour script. Instead use Awake or Start for this purpose.
  • AssertBundle
    1. Unity bundle的製作和使用
    2. Build asset bundle .unity3d
  • Editor擴展腳本:
    1. Editor腳本是可以用C#寫的,編譯完後重啓Unity生效
    2. 不要在Editor腳本中採用中文菜單,有一定可能down機
    3. 如果亂碼,需要將文件保存爲UTF8格式
  • 壓縮方式用的是lzma
  • Unity的動態下載關卡與動態下載資源
  • Unity3D命令行Build,這個對版本製作有用
  • 版本控制:
    1. Unity3d版本控制,哪些文件該放到svn的問題解決
    2. Unity目前的版本已經把需要svn控制的文件單獨歸類放到Project Settings裏了,現在只需要將Assets和ProjectSettings兩目錄加入svn即可 @Using External Version Control Systems with Unity
    3. 必須進行以下設置纔可將項目加入到svn管理: 
      Image(1)Image(2)
    4. meta文件爲Unity內部使用,不要手工更改,也必須加入svn
      1. Unity內部是用GUID做文件間引用的
    5. Force Text可以將場景文件序列化爲文本,以利於版本控制,默認爲二進制
      1. Unity資源序列化採用的是YAML
  • 場景加載進度條
  • 關於Unity3D的協程(Coroutine)
  • NGUI:
    1. Unity3D強大的UI插件(NGUI)
    2. NGUI: Documentation
    3. 中文教程: Unity界面插件NGUI基礎教程Unity 3D 學習筆記 - 秒大刀 - 秒大刀 博客
    4. 中文教程: Unity界面插件NGUI核心組件說明
    5. 相同Depth的控件會存在z排序不穩定問題!複雜界面要進行合理的規劃
  • Unity內建Package簡要說明
  • Unity引用第三方dll隨便拖到項目任何目錄就可以了
  • 所引用的託管dll必須是net3.5版本以下的(包括)
  • 如果託管dll依賴非託管dll,則pc standalone版本的可行,web版的有安全限制,移動版也不可行,甚至System.IO名字空間都是受限的
  • protobuf
    1. protobuf-net要採用net20版本的,不要用mono版的,據說有坑
    2. protobuf-csharp-port? and How to choose between protobuf-csharp-port and protobuf-net
  • 微端構造AssetBundle的時候不加BuildAssetBundleOptions.DeterministicAssetBundle選項,兩次出來的md5碼就不一樣
  • System.Diagnostics.Debug.Assert無法在Unity中使用
    1. Debugging context in Unity3D
    2. 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調試 
    Image(3)
  • protobuf編解碼在Unity Editor中運行正常,但單獨部署運行拋出TypeInitializationException的問題
    1. 如果發現Unity Editor中運行正常而單獨運行時不正常,可以考慮將Api Compatibility Level改爲.NET 2.0而不是其Subset 
      Image(4)
  • Terrain:
    1. Hightmap Resolution會比Terrain Resolution大1
    2. 移動平臺小地形最好用模型,或者將Unity自帶的Terrain用插件導出爲模型,省性能。Unity Terrain依賴shader 2.0,某些手機不支持,即使導出地圖也依賴shader 2.0,自己做地形模型一張貼圖即可搞定
    3. Skybox的設置在Edit/RenderSettings/Skybox Material下,確保Game Overlay按鈕選中纔可以顯示出來 
      Image(5)
    4. 要第三人稱在場景中漫遊,需要將First Person Controller加入到場景
    5. 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. 
      Image(6)?
  • 支持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的導出 
    Image(7)
  • 使用Unity進行Web MMO遊戲開發技術研究 @張昆 2010-5-5
    1. 動態下載和加載資源:
      1. Web MMO需要儘量減少首次下載量,並能在遊戲運行中動態加載資源
      2. 遊戲運行時資源下載和加載,Unity Pro支持兩種方法: 資源包和資源目錄。非Pro版本智能使用資源目錄方法。一個資源包是一個外部的資源集合,遊戲中可以使用多個資源包,資源包是在發行版本以外存在的。資源目錄是一些資源的集合,資源目錄被包含在發行版本里面,但是並沒有和任何遊戲對象有關聯。資源目錄通過Edit->Project Settings->Player的First Streamed Level With Resource來設定
    2. 對Web MMO產品的建議
      1. 主要是資源大小的考慮,資源中,貼圖是大頭,需要儘量減少貼圖使用量。卡通類遊戲比較適合
      2. 由於動態下載和加載資源會一直存在,玩家角色在場景中的移動速度不宜過大,大場景不宜頻繁切換。資源動態下載需要佔用玩家一定網絡帶寬
    3. 使用Unity的準備工作:
      1. Unity畢竟是一款包含內容和功能很多的遊戲引擎。需要花一些時間熟悉其編輯器、代碼和開發環境、資源生產流程等主要功能。不建議項目開始前沒有一定的準備期
  • Unity3D學習筆記,非常給力的一組學習筆記
    1. unity的主要使用者是關卡策劃和程序員
    2. 目前Unity對中文的支持不是很好,因此在Unity中儘量不要使用中文,防止出現各種各樣莫名其妙的異常
    3. 如何調整太陽光方向和天空盒太陽貼圖方向一致?
      1. 首先在設計視圖中拖動視角,讓鏡頭中心對準天空盒上的太陽
      2. 然後在渲染設置中臨時將天空盒設置爲無(爲了方便調整Sun的角度,否則天空盒太亮看不清楚)
      3. 然後選中Sun並使用旋轉工具(快捷鍵E),將光線的方向正對自己
      4. 然後再將天空盒恢復即可 
        Image(8)
    4. 一個好的遊戲沒有好的配樂和音效,就好像無暇的水晶缺少了燈光的陪襯。而音樂不僅能渲染出玩家攻略遊戲時的氛圍,還能增加提高玩家對遊戲的認知度 @音樂和音效
    5. 所有Prefab實例的屬性都引用自Prefab的預設,當預設屬性改變時,對應的實例屬性也會相應改變。但當實例的某個屬性被手工調整後,即使修改預設的屬性值,該值也會以手工調整的值爲準
    6. 隨着360和Unity的合作,前者的360安全瀏覽器預裝Unity3d的方案實施會給Unity進軍中國市場帶來可觀的便捷
    7. Choosing GUI framework for your Unity3D project: EZGUI vs NGUI, Part I and Part II
    8. NGUI製作小地圖
  • Directional light的Shadow Type:
    1. No Shadows 
      Image(9)
    2. Hard Shadow - 影子的輪廓比較清晰 
      Image(10)
    3. Soft Shadow - 影子邊緣模糊一點,更加逼真 
      Image(11)
  • 粒子系統:
    1. Particle Emitter: 只管發射粒子
    2. Particle Animator: 粒子動畫器,負責對發射器產生的粒子進行二次加工,比如使粒子的顏色不斷的變化,縮放粒子等
    3. Particle Renderer: 粒子渲染器,負責將粒子渲染到遊戲中,並且可以決定粒子的材質、光影等
  • 當選中Prefab的實例時,檢視面板上就會顯示預製對象菜單:
    1. Select:在工程面板中快速選取該實例引用的預製
    2. Revert:將實例修改過的參數全部還原爲預製的參數
    3. Apply:將實例修改過的參數全部應用到預製,此時所有引用此預製的實例會一起受到影響而變動
  • yield用法:
    1. Unity3D使用C#實現Coroutines & Yield
      1. 所有使用yield的函數必須返回IEnumerator類型(這點和C# IEnumerable標準用法有差異!)
      2. 所有IEnumerator類型函數必須使用”StartCoroutine”這個函數觸發,不能單獨使用
    2. How do I use Yield in C#?
    3. Overview: Coroutines & Yield
    4. MonoBehaviour.StartCoroutine
  • 不同顏色的字體需要創建不同的Materials, 其貼圖設置爲字體貼圖, Shader要採用GUI/TextShader 
    Image(12)
  • Unity手冊非官方翻譯版
  • Convert unity javascript (unityscript) to C#
  • 只有public field纔可進入Inspector窗口, 該功能可用[NonSerialized]特性屏蔽
    1. 和Inspector窗口關聯的public field重命名後Inspector中編輯的值會丟失!
    2. 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.
    3. public property不會進入Instactor
    4. enum在Inspector中會自動展示爲ComboBox
  • 動態調用, 解耦神器:
    1. 可通過SendMessage方法進行動態方法調用!
    2. 可採用Find/FindWithTag方法, 用字符串名稱的方式直接查找GameObject對象
  • 將Prefab直接拖入場景可進行查看
  • Where can i find the unityengine xml?, unity官方並未提供引擎dll對應的xml文檔, 這對VisualStudio下的自動提示不友好
  • WCF & Unity
    1. Service References的代碼可用VisualStudio自帶的“添加服務引用”功能,沒必要非命令行用mono的svcutil。成功生成後需要將對應的C#代碼文件拷貝到Assert下合適的目錄中,否則不會參加編譯
    2. 需要從C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0拷貝到*\Assets\Plugins下的dll有:
      1. System.Runtime.Serialization.dll
      2. System.Security.dll
      3. System.ServiceModel.dll
      4. System.IdentityModel.Selectors.dll // 該文件也是必要的,否則System.ServiceModel.dll不會被正確引入
    3. Consuming a WCF Service from Unity3D
    4. Is it possible to use WCF in scripts?
    5. Webservices In Unity
    6. Unity中使用WCF服務小教程
  • Unity會自動生成的兩種項目文件,*-csharp.sln/*-vs.csproj或*.sln/*.csproj,前者是供VS用的,後者是供MonoDevelop用的,包含了自定義的項目類型*.unityproj
  • 不要手工向*-csharp.sln中加入任何project,這會在Unity重新生成後覆蓋。可將sln另存爲得以解決
  • NGUI
    1. Unity界面插件NGUI基礎教程
    2. Unity界面插件NGUI核心組件說明
    3. NGUI: Documentation
      1. 譯文: Unity3d 界面插件NGUI
    4. 調整NGUI“米老鼠”大小: 
      Image(15) Image(16)Image(17)
  • TexturePacker is a gui and command line tool to create sprite sheets or sprite atlases
    1. Request free license
    2. Works With Any Game Engine,包括cocos2d、CEGUI、Unity等,還可方便自定義輸出格式
  • unity雙開: 
    Image(13)Image(14)
  • 暫沒有內嵌瀏覽器的支持Embed Web Browser into unity
  • The New GUI,將會在隨後的unity新版中得到支持
  • bitverse GUI庫,在移動平臺會遇到性能問題,但開發效率要比NGUI高
  • Unity腳本週期關係
  • 發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章