3D & 2D drawing
這個模組展示了如何同步3D點以建立線轉譯器製作的3D繪圖。
3D繪圖
原則
3D繪圖由線轉譯器的群所組成,附有一個常見的把手,在完成繪圖後可以透過把手來拿取及移動。
線轉譯器是在基於本機的位置中,這允許它們沿著把手移動。
繪圖由多條線組成。
資料同步是基於資料同步協助工具附加元件。
已同步資料
Draw
類別使用一個來自資料同步協助工具附加元件的環緩衝,以儲存繪圖資料。更精確地說,它是RingBufferLosslessSyncBehaviour
的一個子類別,協助工具的一個版本,其同步所有通過環緩衝的資料,這樣延遲加入者也可以接收完整的繪圖。
環緩衝同步DrawPoint
輸入項目。一個DrawPoint
含有一個向量3及一個浮點數,並且其值取決於浮點值:
一個正值說明一個常規點。
Vector3
含有在目前線中新增的點的本機位置。一個
NEW_LINE_PRESSURE
(-1)值說明一個線更改。向量3含有開始的線的顏色(r/g/b)。針對這些點來建立一個新的線轉譯器請注意,在這個原型程式碼之中,所有資料儲存在Fusion已連網屬性上,或透過可靠的傳輸API來同步。在實際案例中,包括在持久度方面,Fusion應該用於即時同步,而第三方存儲服務應該用於長期資料持久度。
繪圖
3D筆持有一個Drawer
元件,其生成一個繪圖預製件,這持有一個Draw
元件。Draw
元件確保透過Fusion來同步所有已繪製點。
使用一個按鈕來觸發繪圖(在VR控制器、桌面的空白鍵上觸發)。
2D繪圖
原則
2D繪圖是(使用者)不可見的3D繪圖,由專用相機記錄,其在白板材質上投射轉譯結果。
為了效能的目的,只在使用靠近白板的筆,或移動透過筆建立的繪圖時,才啟用這個相機。
繪圖
在白板表面上的接觸將觸發繪圖,接觸的深度決定繪圖的寬度。
注意事項:阻擋尖端模組程式碼與這個白板檢測有相似之處。在未來的版本中,它們大概將相互作用。
顏色選擇
一個ColorSelection
元件可以被新增到一個繪圖器,以同步筆顏色調整。
在FixedUpdateNetwork
期間調用CheckColorModification()
方法,以檢查本機使用者是否使用搖桿以更改筆顏色。
C#
public override void FixedUpdateNetwork()
{
if (Object == null || Object.HasStateAuthority == false) return;
CheckColorModification();
}
在這個案例中,ChangePenColor()
更新已連網變數PenColor
。這樣的話,在所有玩家上調用OnColorChanged()
(利用更改偵測器)。
C#
[Networked]
public Color PenColor { get; set; }
public override void Render()
{
base.Render();
foreach(var changedVar in changeDetector.DetectChanges(this))
{
if (changedVar == nameof(PenColor))
{
OnColorChanged();
}
}
}
void OnColorChanged()
{
UpdatePenMaterials();
}
然後,UpdatePenMaterials()
更新筆的材質,並且UpdateDrawColor()
結束先前的繪圖,且以新的顏色來開始一個新的繪圖。
相依性
- 資料同步協助工具附加元件
- 阻擋接觸附加元件
- 互動式選單附加元件
- 回饋附加元件
示範
可在Assets\Photon\FusionAddons\Drawing\Demo\Scenes\
資料夾中找到一個示範場景。
場景含有2D筆與多個白板:
第一個簡單的方形白板,附有一個
BlockingSurface
元件以預防筆穿過表面。請確保方盒碰撞器IsTrigger
布林值被設定為真。
下層相機被設定為透視。
也請確保白板的相機的CullingMask
包含了用於3D線及(如有)白板背景的圖層。
以相同的方式,玩家的裝備的相機不應該包含了白板背景(利用相機的轉譯材質,它是可見的)。第二個簡單的白板,附有雙倍寬度。
下層相機被設定為正投影。
相機的輸出材質必須被設定為與方形白板相比具有雙倍寬度解析度的轉譯材質。第三個白板附有一個視覺效果,其包含一個背景材質。如同前述說明,背景材質的遊戲物件圖層不應該被包含在玩家裝備相機之中(但是必須被包含在白板相機的揀選遮罩中)。
這個白板包含了一個附有顏色選擇功能的3D筆。
當放開筆時,出現一個圖釘,其允許玩家移動線。
場景也含有兩個3D筆。
當放開筆時,出現一個把手,其允許玩家移動3D線。
下載
這個附加元件的最新版本被包含在附加元件專案之中
已支援拓撲
- 共享模式
更改記錄
- 版本1.0.3:出於回饋命名空間調整的修正
- 版本1.0.2:新增大型白板,附有視覺效果預製件
- 版本1.0.1:新增示範場景+預製件更新+新增命名空間
- 版本1.0.0:第一個版本