Gonna move to server authority
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f821a97809492a479cac0843442e245
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 4f821a97809492a479cac0843442e245
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,71 +1,71 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &897184729387425976
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 897184729387425978}
|
||||
- component: {fileID: 897184729387425977}
|
||||
- component: {fileID: 8550999602067651493}
|
||||
m_Layer: 0
|
||||
m_Name: Player
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &897184729387425978
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 897184729387425976}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 562, y: 368, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &897184729387425977
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 897184729387425976}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9b91ecbcc199f4492b9a91e820070131, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
sceneId: 0
|
||||
serverOnly: 0
|
||||
m_AssetId:
|
||||
hasSpawned: 0
|
||||
--- !u!114 &8550999602067651493
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 897184729387425976}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a472ac3ae1701d149861871cf416a46d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
syncMode: 0
|
||||
syncInterval: 0.1
|
||||
playerUIPrefab: {fileID: 5152941909035078397, guid: 22f1fa3a0aff72b46a371f667bb4fb30,
|
||||
type: 3}
|
||||
playerNumber: 0
|
||||
playerData: 0
|
||||
playerColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &897184729387425976
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 897184729387425978}
|
||||
- component: {fileID: 897184729387425977}
|
||||
- component: {fileID: 8550999602067651493}
|
||||
m_Layer: 0
|
||||
m_Name: Player
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &897184729387425978
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 897184729387425976}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 562, y: 368, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &897184729387425977
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 897184729387425976}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9b91ecbcc199f4492b9a91e820070131, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
sceneId: 0
|
||||
serverOnly: 0
|
||||
m_AssetId:
|
||||
hasSpawned: 0
|
||||
--- !u!114 &8550999602067651493
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 897184729387425976}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a472ac3ae1701d149861871cf416a46d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
syncMode: 0
|
||||
syncInterval: 0.1
|
||||
playerUIPrefab: {fileID: 5152941909035078397, guid: 22f1fa3a0aff72b46a371f667bb4fb30,
|
||||
type: 3}
|
||||
playerNumber: 0
|
||||
playerData: 0
|
||||
playerColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dc2c4328591bef748abb8df795c17202
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: dc2c4328591bef748abb8df795c17202
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,250 +1,250 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &507587715476979468
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7941985369064644521}
|
||||
- component: {fileID: 263176703837159862}
|
||||
- component: {fileID: 862087973501639025}
|
||||
m_Layer: 5
|
||||
m_Name: PlayerDataText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7941985369064644521
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 507587715476979468}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5939842025755258307}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 60, y: -45}
|
||||
m_SizeDelta: {x: 120, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &263176703837159862
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 507587715476979468}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &862087973501639025
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 507587715476979468}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_FontData:
|
||||
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_FontSize: 22
|
||||
m_FontStyle: 0
|
||||
m_BestFit: 0
|
||||
m_MinSize: 2
|
||||
m_MaxSize: 40
|
||||
m_Alignment: 4
|
||||
m_AlignByGeometry: 0
|
||||
m_RichText: 1
|
||||
m_HorizontalOverflow: 1
|
||||
m_VerticalOverflow: 1
|
||||
m_LineSpacing: 1
|
||||
m_Text: 'Data: 000'
|
||||
--- !u!1 &5152941909035078397
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5939842025755258307}
|
||||
- component: {fileID: 6858069060858394075}
|
||||
- component: {fileID: 1130938342127810670}
|
||||
- component: {fileID: 1800193220786703771}
|
||||
m_Layer: 5
|
||||
m_Name: PlayerUI
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5939842025755258307
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5152941909035078397}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children:
|
||||
- {fileID: 290719538378481902}
|
||||
- {fileID: 7941985369064644521}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 120, y: 60}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6858069060858394075
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5152941909035078397}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &1130938342127810670
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5152941909035078397}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0}
|
||||
m_RaycastTarget: 0
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &1800193220786703771
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5152941909035078397}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 64acca8c87e5ceb44bcbd56ef21e2950, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
image: {fileID: 1130938342127810670}
|
||||
playerNameText: {fileID: 2551726036882886172}
|
||||
playerDataText: {fileID: 862087973501639025}
|
||||
--- !u!1 &5516013313779480533
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 290719538378481902}
|
||||
- component: {fileID: 1473077327790139714}
|
||||
- component: {fileID: 2551726036882886172}
|
||||
m_Layer: 5
|
||||
m_Name: PlayerNameText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &290719538378481902
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5516013313779480533}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5939842025755258307}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 60, y: -15}
|
||||
m_SizeDelta: {x: 120, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1473077327790139714
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5516013313779480533}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &2551726036882886172
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5516013313779480533}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_FontData:
|
||||
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_FontSize: 22
|
||||
m_FontStyle: 0
|
||||
m_BestFit: 0
|
||||
m_MinSize: 2
|
||||
m_MaxSize: 40
|
||||
m_Alignment: 4
|
||||
m_AlignByGeometry: 0
|
||||
m_RichText: 1
|
||||
m_HorizontalOverflow: 1
|
||||
m_VerticalOverflow: 1
|
||||
m_LineSpacing: 1
|
||||
m_Text: Player 00
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &507587715476979468
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7941985369064644521}
|
||||
- component: {fileID: 263176703837159862}
|
||||
- component: {fileID: 862087973501639025}
|
||||
m_Layer: 5
|
||||
m_Name: PlayerDataText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7941985369064644521
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 507587715476979468}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5939842025755258307}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 60, y: -45}
|
||||
m_SizeDelta: {x: 120, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &263176703837159862
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 507587715476979468}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &862087973501639025
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 507587715476979468}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_FontData:
|
||||
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_FontSize: 22
|
||||
m_FontStyle: 0
|
||||
m_BestFit: 0
|
||||
m_MinSize: 2
|
||||
m_MaxSize: 40
|
||||
m_Alignment: 4
|
||||
m_AlignByGeometry: 0
|
||||
m_RichText: 1
|
||||
m_HorizontalOverflow: 1
|
||||
m_VerticalOverflow: 1
|
||||
m_LineSpacing: 1
|
||||
m_Text: 'Data: 000'
|
||||
--- !u!1 &5152941909035078397
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5939842025755258307}
|
||||
- component: {fileID: 6858069060858394075}
|
||||
- component: {fileID: 1130938342127810670}
|
||||
- component: {fileID: 1800193220786703771}
|
||||
m_Layer: 5
|
||||
m_Name: PlayerUI
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5939842025755258307
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5152941909035078397}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children:
|
||||
- {fileID: 290719538378481902}
|
||||
- {fileID: 7941985369064644521}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 120, y: 60}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6858069060858394075
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5152941909035078397}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &1130938342127810670
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5152941909035078397}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0}
|
||||
m_RaycastTarget: 0
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &1800193220786703771
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5152941909035078397}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 64acca8c87e5ceb44bcbd56ef21e2950, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
image: {fileID: 1130938342127810670}
|
||||
playerNameText: {fileID: 2551726036882886172}
|
||||
playerDataText: {fileID: 862087973501639025}
|
||||
--- !u!1 &5516013313779480533
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 290719538378481902}
|
||||
- component: {fileID: 1473077327790139714}
|
||||
- component: {fileID: 2551726036882886172}
|
||||
m_Layer: 5
|
||||
m_Name: PlayerNameText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &290719538378481902
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5516013313779480533}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5939842025755258307}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 60, y: -15}
|
||||
m_SizeDelta: {x: 120, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1473077327790139714
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5516013313779480533}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &2551726036882886172
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5516013313779480533}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_FontData:
|
||||
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_FontSize: 22
|
||||
m_FontStyle: 0
|
||||
m_BestFit: 0
|
||||
m_MinSize: 2
|
||||
m_MaxSize: 40
|
||||
m_Alignment: 4
|
||||
m_AlignByGeometry: 0
|
||||
m_RichText: 1
|
||||
m_HorizontalOverflow: 1
|
||||
m_VerticalOverflow: 1
|
||||
m_LineSpacing: 1
|
||||
m_Text: Player 00
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 22f1fa3a0aff72b46a371f667bb4fb30
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 22f1fa3a0aff72b46a371f667bb4fb30
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# Basic Example
|
||||
|
||||
This is a bare bones example of a running game with Network Manager and UI prefab players:
|
||||
|
||||
1. Remove all scenes from Build Settings, then add the Example scene alone.
|
||||
|
||||
2. Open the Example scene and build the project.
|
||||
|
||||
3. In the editor, click Play, and Server + Client or Server Only...it will be listening on port 7777.
|
||||
- If you clicked Host (Server + Client), the host player will appear as Player 00.
|
||||
|
||||
4. Run one or more instances (up to 16 total players) of the built application.
|
||||
|
||||
5. Click Client on each instance.
|
||||
|
||||
6. Now you will see all players in the editor and the clients, all with data being updated and synchronized.
|
||||
# Basic Example
|
||||
|
||||
This is a bare bones example of a running game with Network Manager and UI prefab players:
|
||||
|
||||
1. Remove all scenes from Build Settings, then add the Example scene alone.
|
||||
|
||||
2. Open the Example scene and build the project.
|
||||
|
||||
3. In the editor, click Play, and Server + Client or Server Only...it will be listening on port 7777.
|
||||
- If you clicked Host (Server + Client), the host player will appear as Player 00.
|
||||
|
||||
4. Run one or more instances (up to 16 total players) of the built application.
|
||||
|
||||
5. Click Client on each instance.
|
||||
|
||||
6. Now you will see all players in the editor and the clients, all with data being updated and synchronized.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 67177defd4d334a549e535f10506cc66
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 67177defd4d334a549e535f10506cc66
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 16f46473489d3364badc2f37c4db8634
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 16f46473489d3364badc2f37c4db8634
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b30904751905d3f4dacde62ac85ec7c2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: b30904751905d3f4dacde62ac85ec7c2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9c5291659f25af9409bbc25a2d37d628
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 9c5291659f25af9409bbc25a2d37d628
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
using UnityEngine;
|
||||
|
||||
/*
|
||||
Documentation: https://mirror-networking.gitbook.io/docs/components/network-manager
|
||||
API Reference: https://mirror-networking.com/docs/api/Mirror.NetworkManager.html
|
||||
*/
|
||||
|
||||
namespace Mirror.Examples.Basic
|
||||
{
|
||||
[AddComponentMenu("")]
|
||||
public class BasicNetManager : NetworkManager
|
||||
{
|
||||
[Header("Canvas UI")]
|
||||
|
||||
[Tooltip("Assign Main Panel so it can be turned on from Player:OnStartClient")]
|
||||
public RectTransform mainPanel;
|
||||
|
||||
[Tooltip("Assign Players Panel for instantiating PlayerUI as child")]
|
||||
public RectTransform playersPanel;
|
||||
|
||||
/// <summary>
|
||||
/// Called on the server when a client adds a new player with NetworkClient.AddPlayer.
|
||||
/// <para>The default implementation for this function creates a new player object from the playerPrefab.</para>
|
||||
/// </summary>
|
||||
/// <param name="conn">Connection from client.</param>
|
||||
public override void OnServerAddPlayer(NetworkConnection conn)
|
||||
{
|
||||
base.OnServerAddPlayer(conn);
|
||||
Player.ResetPlayerNumbers();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called on the server when a client disconnects.
|
||||
/// <para>This is called on the Server when a Client disconnects from the Server. Use an override to decide what should happen when a disconnection is detected.</para>
|
||||
/// </summary>
|
||||
/// <param name="conn">Connection from client.</param>
|
||||
public override void OnServerDisconnect(NetworkConnection conn)
|
||||
{
|
||||
base.OnServerDisconnect(conn);
|
||||
Player.ResetPlayerNumbers();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
using UnityEngine;
|
||||
|
||||
/*
|
||||
Documentation: https://mirror-networking.gitbook.io/docs/components/network-manager
|
||||
API Reference: https://mirror-networking.com/docs/api/Mirror.NetworkManager.html
|
||||
*/
|
||||
|
||||
namespace Mirror.Examples.Basic
|
||||
{
|
||||
[AddComponentMenu("")]
|
||||
public class BasicNetManager : NetworkManager
|
||||
{
|
||||
[Header("Canvas UI")]
|
||||
|
||||
[Tooltip("Assign Main Panel so it can be turned on from Player:OnStartClient")]
|
||||
public RectTransform mainPanel;
|
||||
|
||||
[Tooltip("Assign Players Panel for instantiating PlayerUI as child")]
|
||||
public RectTransform playersPanel;
|
||||
|
||||
/// <summary>
|
||||
/// Called on the server when a client adds a new player with NetworkClient.AddPlayer.
|
||||
/// <para>The default implementation for this function creates a new player object from the playerPrefab.</para>
|
||||
/// </summary>
|
||||
/// <param name="conn">Connection from client.</param>
|
||||
public override void OnServerAddPlayer(NetworkConnection conn)
|
||||
{
|
||||
base.OnServerAddPlayer(conn);
|
||||
Player.ResetPlayerNumbers();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called on the server when a client disconnects.
|
||||
/// <para>This is called on the Server when a Client disconnects from the Server. Use an override to decide what should happen when a disconnection is detected.</para>
|
||||
/// </summary>
|
||||
/// <param name="conn">Connection from client.</param>
|
||||
public override void OnServerDisconnect(NetworkConnection conn)
|
||||
{
|
||||
base.OnServerDisconnect(conn);
|
||||
Player.ResetPlayerNumbers();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 20460c43f0320ed4baf8c1dcf953eafa
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 20460c43f0320ed4baf8c1dcf953eafa
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,138 +1,138 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Mirror.Examples.Basic
|
||||
{
|
||||
public class Player : NetworkBehaviour
|
||||
{
|
||||
// Events that the UI will subscribe to
|
||||
public event System.Action<int> OnPlayerNumberChanged;
|
||||
public event System.Action<Color32> OnPlayerColorChanged;
|
||||
public event System.Action<int> OnPlayerDataChanged;
|
||||
|
||||
// Players List to manage playerNumber
|
||||
internal static readonly List<Player> playersList = new List<Player>();
|
||||
|
||||
internal static void ResetPlayerNumbers()
|
||||
{
|
||||
int playerNumber = 0;
|
||||
foreach (Player player in playersList)
|
||||
{
|
||||
player.playerNumber = playerNumber++;
|
||||
}
|
||||
}
|
||||
|
||||
[Header("Player UI")]
|
||||
public GameObject playerUIPrefab;
|
||||
GameObject playerUI;
|
||||
|
||||
[Header("SyncVars")]
|
||||
|
||||
/// <summary>
|
||||
/// This is appended to the player name text, e.g. "Player 01"
|
||||
/// </summary>
|
||||
[SyncVar(hook = nameof(PlayerNumberChanged))]
|
||||
public int playerNumber = 0;
|
||||
|
||||
/// <summary>
|
||||
/// This is updated by UpdateData which is called from OnStartServer via InvokeRepeating
|
||||
/// </summary>
|
||||
[SyncVar(hook = nameof(PlayerDataChanged))]
|
||||
public int playerData = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Random color for the playerData text, assigned in OnStartServer
|
||||
/// </summary>
|
||||
[SyncVar(hook = nameof(PlayerColorChanged))]
|
||||
public Color32 playerColor = Color.white;
|
||||
|
||||
// This is called by the hook of playerNumber SyncVar above
|
||||
void PlayerNumberChanged(int _, int newPlayerNumber)
|
||||
{
|
||||
OnPlayerNumberChanged?.Invoke(newPlayerNumber);
|
||||
}
|
||||
|
||||
// This is called by the hook of playerData SyncVar above
|
||||
void PlayerDataChanged(int _, int newPlayerData)
|
||||
{
|
||||
OnPlayerDataChanged?.Invoke(newPlayerData);
|
||||
}
|
||||
|
||||
// This is called by the hook of playerColor SyncVar above
|
||||
void PlayerColorChanged(Color32 _, Color32 newPlayerColor)
|
||||
{
|
||||
OnPlayerColorChanged?.Invoke(newPlayerColor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is invoked for NetworkBehaviour objects when they become active on the server.
|
||||
/// <para>This could be triggered by NetworkServer.Listen() for objects in the scene, or by NetworkServer.Spawn() for objects that are dynamically created.</para>
|
||||
/// <para>This will be called for objects on a "host" as well as for object on a dedicated server.</para>
|
||||
/// </summary>
|
||||
public override void OnStartServer()
|
||||
{
|
||||
base.OnStartServer();
|
||||
|
||||
// Add this to the static Players List
|
||||
playersList.Add(this);
|
||||
|
||||
// set the Player Color SyncVar
|
||||
playerColor = Random.ColorHSV(0f, 1f, 0.9f, 0.9f, 1f, 1f);
|
||||
|
||||
// Start generating updates
|
||||
InvokeRepeating(nameof(UpdateData), 1, 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked on the server when the object is unspawned
|
||||
/// <para>Useful for saving object data in persistent storage</para>
|
||||
/// </summary>
|
||||
public override void OnStopServer()
|
||||
{
|
||||
CancelInvoke();
|
||||
playersList.Remove(this);
|
||||
}
|
||||
|
||||
// This only runs on the server, called from OnStartServer via InvokeRepeating
|
||||
[ServerCallback]
|
||||
void UpdateData()
|
||||
{
|
||||
playerData = Random.Range(100, 1000);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called on every NetworkBehaviour when it is activated on a client.
|
||||
/// <para>Objects on the host have this function called, as there is a local client on the host. The values of SyncVars on object are guaranteed to be initialized correctly with the latest state from the server when this function is called on the client.</para>
|
||||
/// </summary>
|
||||
public override void OnStartClient()
|
||||
{
|
||||
// Activate the main panel
|
||||
((BasicNetManager)NetworkManager.singleton).mainPanel.gameObject.SetActive(true);
|
||||
|
||||
// Instantiate the player UI as child of the Players Panel
|
||||
playerUI = Instantiate(playerUIPrefab, ((BasicNetManager)NetworkManager.singleton).playersPanel);
|
||||
|
||||
// Set this player object in PlayerUI to wire up event handlers
|
||||
playerUI.GetComponent<PlayerUI>().SetPlayer(this, isLocalPlayer);
|
||||
|
||||
// Invoke all event handlers with the current data
|
||||
OnPlayerNumberChanged.Invoke(playerNumber);
|
||||
OnPlayerColorChanged.Invoke(playerColor);
|
||||
OnPlayerDataChanged.Invoke(playerData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is invoked on clients when the server has caused this object to be destroyed.
|
||||
/// <para>This can be used as a hook to invoke effects or do client specific cleanup.</para>
|
||||
/// </summary>
|
||||
public override void OnStopClient()
|
||||
{
|
||||
// Remove this player's UI object
|
||||
Destroy(playerUI);
|
||||
|
||||
// Disable the main panel for local player
|
||||
if (isLocalPlayer)
|
||||
((BasicNetManager)NetworkManager.singleton).mainPanel.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Mirror.Examples.Basic
|
||||
{
|
||||
public class Player : NetworkBehaviour
|
||||
{
|
||||
// Events that the UI will subscribe to
|
||||
public event System.Action<int> OnPlayerNumberChanged;
|
||||
public event System.Action<Color32> OnPlayerColorChanged;
|
||||
public event System.Action<int> OnPlayerDataChanged;
|
||||
|
||||
// Players List to manage playerNumber
|
||||
internal static readonly List<Player> playersList = new List<Player>();
|
||||
|
||||
internal static void ResetPlayerNumbers()
|
||||
{
|
||||
int playerNumber = 0;
|
||||
foreach (Player player in playersList)
|
||||
{
|
||||
player.playerNumber = playerNumber++;
|
||||
}
|
||||
}
|
||||
|
||||
[Header("Player UI")]
|
||||
public GameObject playerUIPrefab;
|
||||
GameObject playerUI;
|
||||
|
||||
[Header("SyncVars")]
|
||||
|
||||
/// <summary>
|
||||
/// This is appended to the player name text, e.g. "Player 01"
|
||||
/// </summary>
|
||||
[SyncVar(hook = nameof(PlayerNumberChanged))]
|
||||
public int playerNumber = 0;
|
||||
|
||||
/// <summary>
|
||||
/// This is updated by UpdateData which is called from OnStartServer via InvokeRepeating
|
||||
/// </summary>
|
||||
[SyncVar(hook = nameof(PlayerDataChanged))]
|
||||
public int playerData = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Random color for the playerData text, assigned in OnStartServer
|
||||
/// </summary>
|
||||
[SyncVar(hook = nameof(PlayerColorChanged))]
|
||||
public Color32 playerColor = Color.white;
|
||||
|
||||
// This is called by the hook of playerNumber SyncVar above
|
||||
void PlayerNumberChanged(int _, int newPlayerNumber)
|
||||
{
|
||||
OnPlayerNumberChanged?.Invoke(newPlayerNumber);
|
||||
}
|
||||
|
||||
// This is called by the hook of playerData SyncVar above
|
||||
void PlayerDataChanged(int _, int newPlayerData)
|
||||
{
|
||||
OnPlayerDataChanged?.Invoke(newPlayerData);
|
||||
}
|
||||
|
||||
// This is called by the hook of playerColor SyncVar above
|
||||
void PlayerColorChanged(Color32 _, Color32 newPlayerColor)
|
||||
{
|
||||
OnPlayerColorChanged?.Invoke(newPlayerColor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is invoked for NetworkBehaviour objects when they become active on the server.
|
||||
/// <para>This could be triggered by NetworkServer.Listen() for objects in the scene, or by NetworkServer.Spawn() for objects that are dynamically created.</para>
|
||||
/// <para>This will be called for objects on a "host" as well as for object on a dedicated server.</para>
|
||||
/// </summary>
|
||||
public override void OnStartServer()
|
||||
{
|
||||
base.OnStartServer();
|
||||
|
||||
// Add this to the static Players List
|
||||
playersList.Add(this);
|
||||
|
||||
// set the Player Color SyncVar
|
||||
playerColor = Random.ColorHSV(0f, 1f, 0.9f, 0.9f, 1f, 1f);
|
||||
|
||||
// Start generating updates
|
||||
InvokeRepeating(nameof(UpdateData), 1, 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked on the server when the object is unspawned
|
||||
/// <para>Useful for saving object data in persistent storage</para>
|
||||
/// </summary>
|
||||
public override void OnStopServer()
|
||||
{
|
||||
CancelInvoke();
|
||||
playersList.Remove(this);
|
||||
}
|
||||
|
||||
// This only runs on the server, called from OnStartServer via InvokeRepeating
|
||||
[ServerCallback]
|
||||
void UpdateData()
|
||||
{
|
||||
playerData = Random.Range(100, 1000);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called on every NetworkBehaviour when it is activated on a client.
|
||||
/// <para>Objects on the host have this function called, as there is a local client on the host. The values of SyncVars on object are guaranteed to be initialized correctly with the latest state from the server when this function is called on the client.</para>
|
||||
/// </summary>
|
||||
public override void OnStartClient()
|
||||
{
|
||||
// Activate the main panel
|
||||
((BasicNetManager)NetworkManager.singleton).mainPanel.gameObject.SetActive(true);
|
||||
|
||||
// Instantiate the player UI as child of the Players Panel
|
||||
playerUI = Instantiate(playerUIPrefab, ((BasicNetManager)NetworkManager.singleton).playersPanel);
|
||||
|
||||
// Set this player object in PlayerUI to wire up event handlers
|
||||
playerUI.GetComponent<PlayerUI>().SetPlayer(this, isLocalPlayer);
|
||||
|
||||
// Invoke all event handlers with the current data
|
||||
OnPlayerNumberChanged.Invoke(playerNumber);
|
||||
OnPlayerColorChanged.Invoke(playerColor);
|
||||
OnPlayerDataChanged.Invoke(playerData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is invoked on clients when the server has caused this object to be destroyed.
|
||||
/// <para>This can be used as a hook to invoke effects or do client specific cleanup.</para>
|
||||
/// </summary>
|
||||
public override void OnStopClient()
|
||||
{
|
||||
// Remove this player's UI object
|
||||
Destroy(playerUI);
|
||||
|
||||
// Disable the main panel for local player
|
||||
if (isLocalPlayer)
|
||||
((BasicNetManager)NetworkManager.singleton).mainPanel.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a472ac3ae1701d149861871cf416a46d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: a472ac3ae1701d149861871cf416a46d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,64 +1,64 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Mirror.Examples.Basic
|
||||
{
|
||||
public class PlayerUI : MonoBehaviour
|
||||
{
|
||||
[Header("Player Components")]
|
||||
public Image image;
|
||||
|
||||
[Header("Child Text Objects")]
|
||||
public Text playerNameText;
|
||||
public Text playerDataText;
|
||||
|
||||
Player player;
|
||||
|
||||
/// <summary>
|
||||
/// Caches the controlling Player object, subscribes to its events
|
||||
/// </summary>
|
||||
/// <param name="player">Player object that controls this UI</param>
|
||||
/// <param name="isLocalPlayer">true if the Player object is the Local Player</param>
|
||||
public void SetPlayer(Player player, bool isLocalPlayer)
|
||||
{
|
||||
// cache reference to the player that controls this UI object
|
||||
this.player = player;
|
||||
|
||||
// subscribe to the events raised by SyncVar Hooks on the Player object
|
||||
player.OnPlayerNumberChanged += OnPlayerNumberChanged;
|
||||
player.OnPlayerColorChanged += OnPlayerColorChanged;
|
||||
player.OnPlayerDataChanged += OnPlayerDataChanged;
|
||||
|
||||
// add a visual background for the local player in the UI
|
||||
if (isLocalPlayer)
|
||||
image.color = new Color(1f, 1f, 1f, 0.1f);
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
player.OnPlayerNumberChanged -= OnPlayerNumberChanged;
|
||||
player.OnPlayerColorChanged -= OnPlayerColorChanged;
|
||||
player.OnPlayerDataChanged -= OnPlayerDataChanged;
|
||||
}
|
||||
|
||||
// This value can change as clients leave and join
|
||||
void OnPlayerNumberChanged(int newPlayerNumber)
|
||||
{
|
||||
playerNameText.text = string.Format("Player {0:00}", newPlayerNumber);
|
||||
}
|
||||
|
||||
// Random color set by Player::OnStartServer
|
||||
void OnPlayerColorChanged(Color32 newPlayerColor)
|
||||
{
|
||||
playerNameText.color = newPlayerColor;
|
||||
}
|
||||
|
||||
// This updates from Player::UpdateData via InvokeRepeating on server
|
||||
void OnPlayerDataChanged(int newPlayerData)
|
||||
{
|
||||
// Show the data in the UI
|
||||
playerDataText.text = string.Format("Data: {0:000}", newPlayerData);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Mirror.Examples.Basic
|
||||
{
|
||||
public class PlayerUI : MonoBehaviour
|
||||
{
|
||||
[Header("Player Components")]
|
||||
public Image image;
|
||||
|
||||
[Header("Child Text Objects")]
|
||||
public Text playerNameText;
|
||||
public Text playerDataText;
|
||||
|
||||
Player player;
|
||||
|
||||
/// <summary>
|
||||
/// Caches the controlling Player object, subscribes to its events
|
||||
/// </summary>
|
||||
/// <param name="player">Player object that controls this UI</param>
|
||||
/// <param name="isLocalPlayer">true if the Player object is the Local Player</param>
|
||||
public void SetPlayer(Player player, bool isLocalPlayer)
|
||||
{
|
||||
// cache reference to the player that controls this UI object
|
||||
this.player = player;
|
||||
|
||||
// subscribe to the events raised by SyncVar Hooks on the Player object
|
||||
player.OnPlayerNumberChanged += OnPlayerNumberChanged;
|
||||
player.OnPlayerColorChanged += OnPlayerColorChanged;
|
||||
player.OnPlayerDataChanged += OnPlayerDataChanged;
|
||||
|
||||
// add a visual background for the local player in the UI
|
||||
if (isLocalPlayer)
|
||||
image.color = new Color(1f, 1f, 1f, 0.1f);
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
player.OnPlayerNumberChanged -= OnPlayerNumberChanged;
|
||||
player.OnPlayerColorChanged -= OnPlayerColorChanged;
|
||||
player.OnPlayerDataChanged -= OnPlayerDataChanged;
|
||||
}
|
||||
|
||||
// This value can change as clients leave and join
|
||||
void OnPlayerNumberChanged(int newPlayerNumber)
|
||||
{
|
||||
playerNameText.text = string.Format("Player {0:00}", newPlayerNumber);
|
||||
}
|
||||
|
||||
// Random color set by Player::OnStartServer
|
||||
void OnPlayerColorChanged(Color32 newPlayerColor)
|
||||
{
|
||||
playerNameText.color = newPlayerColor;
|
||||
}
|
||||
|
||||
// This updates from Player::UpdateData via InvokeRepeating on server
|
||||
void OnPlayerDataChanged(int newPlayerData)
|
||||
{
|
||||
// Show the data in the UI
|
||||
playerDataText.text = string.Format("Data: {0:000}", newPlayerData);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 64acca8c87e5ceb44bcbd56ef21e2950
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 64acca8c87e5ceb44bcbd56ef21e2950
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
Reference in New Issue
Block a user