instantiation working nicely, including when objects join later
parent
0167ca3003
commit
1a57cd3879
|
|
@ -9,7 +9,7 @@ public abstract class NetworkObject: MonoBehaviour, NetworkSyncable
|
||||||
{
|
{
|
||||||
public NetworkPlayer owner;
|
public NetworkPlayer owner;
|
||||||
public string networkId; //this is forged from the combination of the creator's id (-1 in the case of a scene object) and an object id, so it's always unique for a room
|
public string networkId; //this is forged from the combination of the creator's id (-1 in the case of a scene object) and an object id, so it's always unique for a room
|
||||||
|
public string prefabName; //this may be empty if it's not a prefab (scene object)
|
||||||
public abstract byte[] getSyncMessage();
|
public abstract byte[] getSyncMessage();
|
||||||
public abstract void handleSyncMessage(byte[] message);
|
public abstract void handleSyncMessage(byte[] message);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1150,101 +1150,6 @@ CanvasRenderer:
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 711524766}
|
m_GameObject: {fileID: 711524766}
|
||||||
m_CullTransparentMesh: 1
|
m_CullTransparentMesh: 1
|
||||||
--- !u!1 &720148908
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 720148909}
|
|
||||||
- component: {fileID: 720148912}
|
|
||||||
- component: {fileID: 720148911}
|
|
||||||
- component: {fileID: 720148910}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Sphere
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &720148909
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 720148908}
|
|
||||||
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: 1720689858}
|
|
||||||
m_RootOrder: 0
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!135 &720148910
|
|
||||||
SphereCollider:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 720148908}
|
|
||||||
m_Material: {fileID: 0}
|
|
||||||
m_IsTrigger: 0
|
|
||||||
m_Enabled: 1
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Radius: 0.5
|
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!23 &720148911
|
|
||||||
MeshRenderer:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 720148908}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_CastShadows: 1
|
|
||||||
m_ReceiveShadows: 1
|
|
||||||
m_DynamicOccludee: 1
|
|
||||||
m_MotionVectors: 1
|
|
||||||
m_LightProbeUsage: 1
|
|
||||||
m_ReflectionProbeUsage: 1
|
|
||||||
m_RayTracingMode: 2
|
|
||||||
m_RayTraceProcedural: 0
|
|
||||||
m_RenderingLayerMask: 1
|
|
||||||
m_RendererPriority: 0
|
|
||||||
m_Materials:
|
|
||||||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
|
||||||
m_StaticBatchInfo:
|
|
||||||
firstSubMesh: 0
|
|
||||||
subMeshCount: 0
|
|
||||||
m_StaticBatchRoot: {fileID: 0}
|
|
||||||
m_ProbeAnchor: {fileID: 0}
|
|
||||||
m_LightProbeVolumeOverride: {fileID: 0}
|
|
||||||
m_ScaleInLightmap: 1
|
|
||||||
m_ReceiveGI: 1
|
|
||||||
m_PreserveUVs: 0
|
|
||||||
m_IgnoreNormalsForChartDetection: 0
|
|
||||||
m_ImportantGI: 0
|
|
||||||
m_StitchLightmapSeams: 1
|
|
||||||
m_SelectedEditorRenderState: 3
|
|
||||||
m_MinimumChartSize: 4
|
|
||||||
m_AutoUVMaxDistance: 0.5
|
|
||||||
m_AutoUVMaxAngle: 89
|
|
||||||
m_LightmapParameters: {fileID: 0}
|
|
||||||
m_SortingLayerID: 0
|
|
||||||
m_SortingLayer: 0
|
|
||||||
m_SortingOrder: 0
|
|
||||||
m_AdditionalVertexStreams: {fileID: 0}
|
|
||||||
--- !u!33 &720148912
|
|
||||||
MeshFilter:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 720148908}
|
|
||||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
|
||||||
--- !u!1 &720503449
|
--- !u!1 &720503449
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -1919,7 +1824,8 @@ MonoBehaviour:
|
||||||
userid: -1
|
userid: -1
|
||||||
room:
|
room:
|
||||||
playerPrefab: {fileID: 6139051692386484099, guid: d4158ab9c4a204cdbba28d3273fc1fb3, type: 3}
|
playerPrefab: {fileID: 6139051692386484099, guid: d4158ab9c4a204cdbba28d3273fc1fb3, type: 3}
|
||||||
prefabs: []
|
prefabs:
|
||||||
|
- {fileID: 8565720275311462452, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
connected: 0
|
connected: 0
|
||||||
--- !u!1 &1154194181
|
--- !u!1 &1154194181
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -2750,54 +2656,6 @@ RectTransform:
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
m_SizeDelta: {x: -20, y: -20}
|
m_SizeDelta: {x: -20, y: -20}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!1 &1720689856
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 1720689858}
|
|
||||||
- component: {fileID: 1720689857}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: TestNetworkedGameObject
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!114 &1720689857
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1720689856}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 3f1f9b0bbd93a484a987c51f1107ebe5, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
owner: {fileID: 0}
|
|
||||||
networkId:
|
|
||||||
targetPosition: {x: 0, y: 0, z: 0}
|
|
||||||
targetRotation: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
--- !u!4 &1720689858
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1720689856}
|
|
||||||
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: 720148909}
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_RootOrder: 6
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!1 &1760805524
|
--- !u!1 &1760805524
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -3530,3 +3388,60 @@ CanvasRenderer:
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 2144436499}
|
m_GameObject: {fileID: 2144436499}
|
||||||
m_CullTransparentMesh: 1
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!1001 &8565720276829121781
|
||||||
|
PrefabInstance:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Modification:
|
||||||
|
m_TransformParent: {fileID: 0}
|
||||||
|
m_Modifications:
|
||||||
|
- target: {fileID: 8565720275311462453, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_Name
|
||||||
|
value: TestNetworkedGameObject
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_RootOrder
|
||||||
|
value: 6
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_SourcePrefab: {fileID: 100100000, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,145 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &8565720275311462453
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 8565720275311462455}
|
||||||
|
- component: {fileID: 8565720275311462452}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: TestNetworkedGameObject
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &8565720275311462455
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8565720275311462453}
|
||||||
|
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: 8565720276181857624}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_RootOrder: 0
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &8565720275311462452
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8565720275311462453}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 3f1f9b0bbd93a484a987c51f1107ebe5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
owner: {fileID: 0}
|
||||||
|
networkId:
|
||||||
|
targetPosition: {x: 0, y: 0, z: 0}
|
||||||
|
targetRotation: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!1 &8565720276181857625
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 8565720276181857624}
|
||||||
|
- component: {fileID: 8565720276181857605}
|
||||||
|
- component: {fileID: 8565720276181857626}
|
||||||
|
- component: {fileID: 8565720276181857627}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Sphere
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &8565720276181857624
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8565720276181857625}
|
||||||
|
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: 8565720275311462455}
|
||||||
|
m_RootOrder: 0
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!33 &8565720276181857605
|
||||||
|
MeshFilter:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8565720276181857625}
|
||||||
|
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
|
--- !u!23 &8565720276181857626
|
||||||
|
MeshRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8565720276181857625}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_CastShadows: 1
|
||||||
|
m_ReceiveShadows: 1
|
||||||
|
m_DynamicOccludee: 1
|
||||||
|
m_MotionVectors: 1
|
||||||
|
m_LightProbeUsage: 1
|
||||||
|
m_ReflectionProbeUsage: 1
|
||||||
|
m_RayTracingMode: 2
|
||||||
|
m_RayTraceProcedural: 0
|
||||||
|
m_RenderingLayerMask: 1
|
||||||
|
m_RendererPriority: 0
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_StaticBatchInfo:
|
||||||
|
firstSubMesh: 0
|
||||||
|
subMeshCount: 0
|
||||||
|
m_StaticBatchRoot: {fileID: 0}
|
||||||
|
m_ProbeAnchor: {fileID: 0}
|
||||||
|
m_LightProbeVolumeOverride: {fileID: 0}
|
||||||
|
m_ScaleInLightmap: 1
|
||||||
|
m_ReceiveGI: 1
|
||||||
|
m_PreserveUVs: 0
|
||||||
|
m_IgnoreNormalsForChartDetection: 0
|
||||||
|
m_ImportantGI: 0
|
||||||
|
m_StitchLightmapSeams: 1
|
||||||
|
m_SelectedEditorRenderState: 3
|
||||||
|
m_MinimumChartSize: 4
|
||||||
|
m_AutoUVMaxDistance: 0.5
|
||||||
|
m_AutoUVMaxAngle: 89
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_SortingLayerID: 0
|
||||||
|
m_SortingLayer: 0
|
||||||
|
m_SortingOrder: 0
|
||||||
|
m_AdditionalVertexStreams: {fileID: 0}
|
||||||
|
--- !u!135 &8565720276181857627
|
||||||
|
SphereCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8565720276181857625}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IsTrigger: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Radius: 0.5
|
||||||
|
m_Center: {x: 0, y: 0, z: 0}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6e4a023f70e01405e8b249a4488fe319
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -32,9 +32,13 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer
|
||||||
public bool IsTracking => true;
|
public bool IsTracking => true;
|
||||||
bool isMaster = false;
|
bool isMaster = false;
|
||||||
|
|
||||||
void Awake()
|
|
||||||
|
|
||||||
|
void Start()
|
||||||
{
|
{
|
||||||
myObject.owner = this;
|
myObject.owner = this;
|
||||||
|
this.manager = GameObject.FindObjectOfType<NetworkManager>();
|
||||||
|
manager.onPlayerJoined += handlePlayerJoined;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
// Update is called once per frame
|
||||||
|
|
@ -58,6 +62,23 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void handlePlayerJoined(NetworkPlayer player)
|
||||||
|
{
|
||||||
|
//if this is the local player, go through the objects that I own, and send instantiation messages for the ones that have prefab names
|
||||||
|
if (this.isLocal)
|
||||||
|
{
|
||||||
|
foreach(KeyValuePair<string,NetworkObject> kvp in manager.objects)
|
||||||
|
{
|
||||||
|
if(kvp.Value.owner == this && kvp.Value.prefabName != "")
|
||||||
|
{
|
||||||
|
manager.sendTo(0, "7," + kvp.Value.networkId + "," + kvp.Value.prefabName);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void handleMessage(NetworkManager.Message m)
|
public void handleMessage(NetworkManager.Message m)
|
||||||
{
|
{
|
||||||
//these are generally things that come from the "owner" and should be enacted locally, where appropriate
|
//these are generally things that come from the "owner" and should be enacted locally, where appropriate
|
||||||
|
|
@ -133,27 +154,29 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer
|
||||||
}
|
}
|
||||||
case "6": //I'm trying to take ownership of an object
|
case "6": //I'm trying to take ownership of an object
|
||||||
{
|
{
|
||||||
int objectId = int.Parse(sections[1]);
|
string networkId = sections[1];
|
||||||
int creatorId = int.Parse(sections[2]);
|
|
||||||
string objectKey = creatorId + "-" + objectId;
|
|
||||||
if (manager.objects.ContainsKey(objectKey))
|
|
||||||
{
|
|
||||||
manager.objects[objectKey].owner = this;
|
|
||||||
|
|
||||||
|
if (manager.objects.ContainsKey(networkId))
|
||||||
|
{
|
||||||
|
manager.objects[networkId].owner = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "7": //I'm trying to instantiate an object (sent to everyone)
|
case "7": //I'm trying to instantiate an object
|
||||||
{
|
{
|
||||||
int objectId = int.Parse(sections[1]);
|
string networkId = sections[1];
|
||||||
string prefabName = sections[2];
|
string prefabName = sections[2];
|
||||||
|
if (manager.objects.ContainsKey(networkId))
|
||||||
|
{
|
||||||
|
break; //we already have this one, ignore
|
||||||
|
}
|
||||||
NetworkObject temp = manager.prefabs.Find((prefab) => prefab.name == prefabName);
|
NetworkObject temp = manager.prefabs.Find((prefab) => prefab.name == prefabName);
|
||||||
if (temp != null)
|
if (temp != null)
|
||||||
{
|
{
|
||||||
NetworkObject instance = GameObject.Instantiate<NetworkObject>(temp);
|
NetworkObject instance = GameObject.Instantiate<NetworkObject>(temp);
|
||||||
instance.networkId = this.userid + "-" + objectId;
|
instance.networkId = networkId;
|
||||||
|
instance.prefabName = prefabName;
|
||||||
instance.owner = this;
|
instance.owner = this;
|
||||||
manager.objects.Add(instance.networkId, instance);
|
manager.objects.Add(instance.networkId, instance);
|
||||||
}
|
}
|
||||||
|
|
@ -162,16 +185,12 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer
|
||||||
}
|
}
|
||||||
case "8": //I'm trying to destroy a gameobject I own (I guess this is sent to everyone)
|
case "8": //I'm trying to destroy a gameobject I own (I guess this is sent to everyone)
|
||||||
{
|
{
|
||||||
int objectId = int.Parse(sections[1]);
|
string networkId = sections[1];
|
||||||
int creatorId = int.Parse(sections[2]);
|
|
||||||
string objectKey = creatorId + "-" + objectId;
|
if (manager.objects.ContainsKey(networkId) && manager.objects[networkId].owner == this)
|
||||||
if (manager.objects.ContainsKey(objectKey))
|
|
||||||
{
|
{
|
||||||
if (manager.objects[objectKey].owner == this)
|
GameObject.Destroy(manager.objects[networkId].gameObject);
|
||||||
{
|
manager.objects.Remove(networkId);
|
||||||
GameObject.Destroy(manager.objects[objectKey].gameObject);
|
|
||||||
}
|
|
||||||
manager.objects.Remove(objectKey);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -218,8 +237,42 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void instantiateObject(string prefab)
|
public NetworkObject networkInstantiate(string prefabName)
|
||||||
{
|
{
|
||||||
|
if (!isLocal)
|
||||||
|
{
|
||||||
|
return null; //must be the local player to call instantiate
|
||||||
|
}
|
||||||
|
string networkId = this.userid + "-" + lastObjectId++;
|
||||||
|
|
||||||
|
|
||||||
|
NetworkObject temp = manager.prefabs.Find((prefab) => prefab.name == prefabName);
|
||||||
|
if (temp != null)
|
||||||
|
{
|
||||||
|
NetworkObject instance = GameObject.Instantiate<NetworkObject>(temp);
|
||||||
|
instance.networkId = networkId;
|
||||||
|
instance.prefabName = prefabName;
|
||||||
|
instance.owner = this;
|
||||||
|
manager.objects.Add(instance.networkId, instance);
|
||||||
|
|
||||||
|
manager.sendTo(0, "7," + networkId + "," + prefabName);
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void networkDestroy(string networkId)
|
||||||
|
{
|
||||||
|
if (!manager.objects.ContainsKey(networkId) || manager.objects[networkId].owner != this || !isLocal) return; //must be the local owner of the object to destroy it
|
||||||
|
manager.sendTo(3, "8," + networkId); //send to all, which will make me delete as well
|
||||||
|
}
|
||||||
|
|
||||||
|
public void takeOwnership(string networkId)
|
||||||
|
{
|
||||||
|
if (!manager.objects.ContainsKey(networkId) || !isLocal) return; //must exist and be the the local player
|
||||||
|
|
||||||
|
manager.objects[networkId].owner = this; //immediately successful
|
||||||
|
manager.sendTo(2, "6," + networkId); //must be ordered, so that ownership transfers are not confused
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class PlayerController : NetworkObject
|
||||||
|
{
|
||||||
|
|
||||||
|
public Vector3 targetPosition;
|
||||||
|
public Quaternion targetRotation;
|
||||||
|
|
||||||
|
|
||||||
|
public override byte[] getSyncMessage()
|
||||||
|
{
|
||||||
|
float[] data = new float[7];
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
data[i] = transform.position[i];
|
||||||
|
data[i + 3] = transform.rotation[i];
|
||||||
|
}
|
||||||
|
data[6] = transform.rotation[3];
|
||||||
|
|
||||||
|
byte[] toReturn = new byte[sizeof(float) * data.Length];
|
||||||
|
Buffer.BlockCopy(data, 0, toReturn, 0, toReturn.Length);
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void handleSyncMessage(byte[] message)
|
||||||
|
{
|
||||||
|
float[] data = new float[7];
|
||||||
|
Buffer.BlockCopy(message, 0, data, 0, message.Length);
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
targetPosition[i] = data[i];
|
||||||
|
targetRotation[i] = data[i + 3];
|
||||||
|
}
|
||||||
|
targetRotation[3] = data[6];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start is called before the first frame update
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
StartCoroutine(syncBehavior());
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator syncBehavior()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (owner != null && owner.isLocal)
|
||||||
|
{
|
||||||
|
|
||||||
|
owner.syncObject(this);
|
||||||
|
}
|
||||||
|
yield return new WaitForSeconds(.1f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Update is called once per frame
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
if (owner != null && !owner.isLocal)
|
||||||
|
{
|
||||||
|
transform.position = Vector3.Lerp(transform.position, targetPosition, .1f);
|
||||||
|
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, .1f);
|
||||||
|
}
|
||||||
|
else if(owner != null && owner.isLocal)
|
||||||
|
{
|
||||||
|
Vector3 movement = new Vector3();
|
||||||
|
movement.x += Input.GetAxis("Horizontal");
|
||||||
|
movement.y += Input.GetAxis("Vertical");
|
||||||
|
movement.z = 0;
|
||||||
|
transform.Translate(movement * Time.deltaTime);
|
||||||
|
|
||||||
|
if (Input.GetKeyDown(KeyCode.Space))
|
||||||
|
{
|
||||||
|
owner.networkInstantiate("TestNetworkedGameObject");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 89e3af759df774692a566a166b4bf69b
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -13,7 +13,7 @@ GameObject:
|
||||||
- component: {fileID: 6854617867369839}
|
- component: {fileID: 6854617867369839}
|
||||||
- component: {fileID: 5845716565458182149}
|
- component: {fileID: 5845716565458182149}
|
||||||
- component: {fileID: 5713671764962751473}
|
- component: {fileID: 5713671764962751473}
|
||||||
- component: {fileID: 2513801069545108573}
|
- component: {fileID: -4404668399269848200}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: PlayerPrefab
|
m_Name: PlayerPrefab
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
|
|
@ -109,7 +109,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: d8d3b6de660834e3e898725928251405, type: 3}
|
m_Script: {fileID: 11500000, guid: d8d3b6de660834e3e898725928251405, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
myObject: {fileID: 2513801069545108573}
|
myObject: {fileID: -4404668399269848200}
|
||||||
userid: 0
|
userid: 0
|
||||||
username:
|
username:
|
||||||
room:
|
room:
|
||||||
|
|
@ -118,7 +118,7 @@ MonoBehaviour:
|
||||||
lastObjectId: 0
|
lastObjectId: 0
|
||||||
commsNetwork: {fileID: 0}
|
commsNetwork: {fileID: 0}
|
||||||
dissonanceID:
|
dissonanceID:
|
||||||
--- !u!114 &2513801069545108573
|
--- !u!114 &-4404668399269848200
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
|
@ -127,7 +127,7 @@ MonoBehaviour:
|
||||||
m_GameObject: {fileID: 6139051692386484099}
|
m_GameObject: {fileID: 6139051692386484099}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 3f1f9b0bbd93a484a987c51f1107ebe5, type: 3}
|
m_Script: {fileID: 11500000, guid: 89e3af759df774692a566a166b4bf69b, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
owner: {fileID: 5713671764962751473}
|
owner: {fileID: 5713671764962751473}
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ def decode_message(client,message):
|
||||||
masterId = rooms[roomName].master.id
|
masterId = rooms[roomName].master.id
|
||||||
else:
|
else:
|
||||||
#create the room and join it as master
|
#create the room and join it as master
|
||||||
rooms[roomName] = types.SimpleNamespace(name=roomName,clients=[client],master=client,room_lock=threading.Lock())
|
rooms[roomName] = types.SimpleNamespace(name=roomName,clients=[client],master=client, room_lock=threading.Lock())
|
||||||
masterId = client.id
|
masterId = client.id
|
||||||
|
|
||||||
current_clients = rooms[roomName].clients
|
current_clients = rooms[roomName].clients
|
||||||
|
|
@ -145,14 +145,13 @@ def decode_message(client,message):
|
||||||
if messageType == '3' and len(decodedMessage) > 2:
|
if messageType == '3' and len(decodedMessage) > 2:
|
||||||
subMessageType = decodedMessage[1]
|
subMessageType = decodedMessage[1]
|
||||||
if subMessageType == '0':
|
if subMessageType == '0':
|
||||||
#send a message to everyone in the room (not synced)
|
#send a message to everyone else in the room (not synced)
|
||||||
send_room_message(client.room,f"3:{client.id}:{decodedMessage[2]}\n",client)
|
send_room_message(client.room,f"3:{client.id}:{decodedMessage[2]}\n",client)
|
||||||
elif subMessageType == '1':
|
elif subMessageType == '1': #everyone including the client who sent it
|
||||||
send_room_message(client.room,f"3:{client.id}:{decodedMessage[2]}\n")
|
send_room_message(client.room,f"3:{client.id}:{decodedMessage[2]}\n")
|
||||||
elif subMessageType == '2':
|
elif subMessageType == '2': #everyone but the client, ensures order within the room
|
||||||
#send a message to everyone in the room (not synced)
|
|
||||||
send_synced_room_message(client.room,f"3:{client.id}:{decodedMessage[2]}\n",client)
|
send_synced_room_message(client.room,f"3:{client.id}:{decodedMessage[2]}\n",client)
|
||||||
elif subMessageType == '3':
|
elif subMessageType == '3': #everyone including the client, ensuring order
|
||||||
send_synced_room_message(client.room,f"3:{client.id}:{decodedMessage[2]}\n")
|
send_synced_room_message(client.room,f"3:{client.id}:{decodedMessage[2]}\n")
|
||||||
|
|
||||||
def client_read_thread(conn, addr, client):
|
def client_read_thread(conn, addr, client):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue