天天看點

unity3D 學習筆記

  • 編輯器:
    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. 采用雙色半圓拼接餅狀圖是個技巧 
      unity3D 學習筆記
    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管理: 
      unity3D 學習筆記
      unity3D 學習筆記
    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基礎教程
      unity3D 學習筆記
    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調試 
    unity3D 學習筆記
  • protobuf編解碼在Unity Editor中運作正常,但單獨部署運作抛出TypeInitializationException的問題
    1. 如果發現Unity Editor中運作正常而單獨運作時不正常,可以考慮将Api Compatibility Level改為.NET 2.0而不是其Subset 
      unity3D 學習筆記
  • 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按鈕選中才可以顯示出來 
      unity3D 學習筆記
    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. 
      unity3D 學習筆記
      ?
  • 支援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的導出 
    unity3D 學習筆記
  • 使用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. 然後再将天空盒恢複即可 
        unity3D 學習筆記
    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 
      unity3D 學習筆記
    2. Hard Shadow - 影子的輪廓比較清晰 
      unity3D 學習筆記
    3. Soft Shadow - 影子邊緣模糊一點,更加逼真 
      unity3D 學習筆記
  • 粒子系統:
    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 
    unity3D 學習筆記
  • 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“米老鼠”大小: 
      unity3D 學習筆記
      unity3D 學習筆記
      unity3D 學習筆記
  • 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雙開: 
    unity3D 學習筆記
    unity3D 學習筆記
  • 暫沒有内嵌浏覽器的支援Embed Web Browser into unity
  • The New GUI,将會在随後的unity新版中得到支援
  • bitverse GUI庫,在移動平台會遇到性能問題,但開發效率要比NGUI高
  • Unity腳本周期關系