igdshare 110220: 以傳統程式開發者角度切入 unity3d
DESCRIPTION
An introductory to Unity3D engine for programmers who are already familiar with SDL, D3D, OpenGL, Ogre.. or so. http://blog.igdshare.org http://www.youtube.com/user/igdshareTRANSCRIPT
以傳統程式開發者的角度切入UNITY3D
傳統程式開發者
程式開發的過程以非視覺化方式來完成視覺化的程式
Windows
Windows 32API,MFC
Windows
VB, C#, DotNet, ( Windows Forms )
傳統程式開發者
程式開發的過程以非視覺化方式來完成視覺化的程式
3D Game
Ogre, SDL,DX API,OpenGL API
3D Game
Unity3D …
Unity3D
Rendering Engine Editor Publishing
Unity3D
Rendering Engine Editor Publishing
Unity3D
Rendering Engine Editor Publishing
程式開發者在 Unity3D 中的角色
Editor
Publishing System (Compiler)
成品 (執行檔)
物件反應, 行為
3D模型執行流程
美工貼圖
場景編輯
程式開發者在 Unity3D 中的角色
Editor
物件反應, 行為
3D模型
場景編輯
執行流程
美工貼圖
Publishing System (Compiler)
成品 (執行檔)
程式開發者在 Unity3D 中的角色
Editor
物件反應, 行為
3D模型
場景編輯
執行流程
美工貼圖
Publishing System (Compiler)
成品 (執行檔)
Unity3D API
如何開始?
新增一個 Script File (C#, javascript,…) 使用 Unity 提供的 API 設定此 Script File 為 Main Camera 的行為 (依
附在 Main Camera 上)。
Init.csInit.js
OnAwake
Update
OnRenderObject
OnDisable
於初始化程式時呼叫
每繪一個 frame 呼叫一次
每繪一個 frame 呼叫一次
於程式結束時呼叫
如何開始?
將 unity3d 當成 rendering engine 來使用 Unity3d editor 視為輔助工具
Debug 快速視覺化編輯場景
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
如何變換場景 ? 變換 editor 預編的場景 (scene)
Loadlevel LoadlevelAdditive
變換程式動態產生的場景 Multi-camera with culling mask Create and Destroy object
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
如何隱藏視窗外框 ? unity 沒有這個 api Dllimport win32 api
GetActiveWindow HWND GetWindowLong SetWindowLong
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
執行時期載入模型及圖檔 ? 使用 Unity 支援的指令 (WWW)
只能載入特定格式檔案 (jpg, png, fbx, .asset,…)
自行對檔案解碼 freeimage library …
幾個開發中遇到的疑問
執行時期載入模型 3dsmax, maya,… 輸出或轉成 fbx 檔案… 使用 editor 載入 fbx 模型並利用 editor 預編場景
(各個模型位置, 旋轉角度,…) 輸出成 .asset 格式檔案 上述工作可由美術獨立完成 程式執行時使用 WWW api 將 .asset 檔案載入
幾個開發中遇到的疑問
執行時期載入圖檔 程式執行時使用 WWW api 將 .jpg 或 .png 載入
限制 只能載入 jpg, png 格式檔案 載入非 2次方大小圖檔會自動對圖片進行線性濾
鏡縮放
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
要不要使用 Unity3D 提供的 GUI ? 快速, 基本功能完整, 可更換 skin
限制 GUI 不可與 GameObject 互動 GUI 的移動, 旋轉, 縮放, uv coord 控制,不如
GameObject 來的容易 不可使用自訂的 shader
幾個開發中遇到的疑問
要不要使用 Unity3D 提供的 GUI ? 自製 UI 所需要的功能
使用正交投影矩陣之 Camera 3D Mesh + Texture 3D Text
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
使用 MeshText 還是 GUI Text ? MeshText
可用於 GUI Text 可與 3d object 互動 貼圖於 3d 物件上 被 3d 物件摭蔽
可自訂 shader
GUI Text 只用於 GUI
幾個開發中遇到的疑問
使用 MeshText 還是 GUI Text ? 將 Camera 的投影模式設定成 Orthographic,並設
定 Orthographic Size 為 Screen.height 的 0.5 倍。 設定 3D Text 物件 Scale 的 x, 和 y 固定是 10
倍,此時的 Font Size 值效果將與 GUI Text 的 Font Size 值效果相同。
幾個開發中遇到的疑問
使用 MeshText 還是 GUI Text ?
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
使用 Unity3D 提供的 IME 支援 ? Unity3d 支援 IME,
只顯示 composition window Candidate window, Reading Window, 仍舊使用 win32 native window 來顯示
幾個開發中遇到的疑問
使用 Unity3D 提供的 IME 支援 ? 全螢幕模式下無法顯示 Reading Window 及
Candidate Window。
幾個開發中遇到的疑問
使用 Unity3D 提供的 IME 支援 ? 自製 IME
IME 處理函數 (參考 DX SDK) 關閉原本 Unity3D 在 IME 的功能 接管 Unity3D 原本的 WndProc function, 處理 IME 相關之
message。
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
如何擷取 Unity3D 的 WndProc Message ?
Windows
Unity WndProc Function
幾個開發中遇到的疑問
如何擷取 Unity3D 的 WndProc Message ?
Windows
Custom WndProc Function
Unity WndProc Function
幾個開發中遇到的疑問
如何擷取 Unity3D 的 WndProc Message ?
pUnityWndProc =(WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)CustomWndProc);
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
Embedded html browser QtWebKit
本身具有 html renderer, 輸出成 bmp 格式圖檔
Unity3D WebKit Wrapper QtWebKitDLL
URL URL
BYTE Image(RGBA32)
float Texture(Color Array)
幾個開發中遇到的疑問
Embedded html browser
幾個開發中遇到的疑問
Embedded html browser
幾個開發中遇到的疑問
如何變換場景 ? 如何隱藏視窗外框 ? 執行時期載入模型及圖檔 ? 要不要使用 Unity3D 提供的 GUI ? 使用 MeshText 還是 GUI Text ? 使用 Unity3D 提供的 IME 支援 ? 如何擷取 Unity3D 的 WndProc Message ? Embedded html browser ? 使用 Lua Script engine ?
幾個開發中遇到的疑問
使用 Lua Script engine ?
Unity3D
C#, javascript,…
Lua Script Game Logic
High level GameAPIHigh level Rendering API
幾個開發中遇到的疑問
使用 Lua Script engine ? Compiling lua dll with stdcall Dllimport lua function
thank you