13 [NetworkSettings(sendInterval = 0.033f)]
40 private Transform sharedWorldAnchorTransform;
51 private Vector3 localPosition;
57 private Quaternion localRotation;
64 [Command(channel = 1)]
67 localPosition = postion;
68 localRotation = rotation;
74 [SyncVar(hook =
"AnchorEstablishedChanged")]
75 bool AnchorEstablished;
83 private void CmdSendAnchorEstablished(
bool Established)
85 AnchorEstablished = Established;
86 if (Established && SharesSpatialAnchors && !isLocalPlayer)
88 Debug.Log(
"remote device likes the anchor");
90 anchorManager.AnchorFoundRemotely();
99 void AnchorEstablishedChanged(
bool update)
101 Debug.LogFormat(
"AnchorEstablished for {0} was {1} is now {2}", PlayerName, AnchorEstablished, update);
102 AnchorEstablished = update;
104 GetComponentInChildren<MeshRenderer>().enabled = update;
110 [SyncVar(hook =
"PlayerNameChanged")]
118 private void CmdSetPlayerName(
string playerName)
120 PlayerName = playerName;
127 void PlayerNameChanged(
string update)
129 Debug.LogFormat(
"Player name changing from {0} to {1}", PlayerName, update);
132 if (PlayerName.ToLower() ==
"spectatorviewpc")
134 gameObject.SetActive(
false);
138 #pragma warning disable 0414 139 [SyncVar(hook =
"PlayerIpChanged")]
144 #pragma warning restore 0414 151 private void CmdSetPlayerIp(
string playerIp)
160 void PlayerIpChanged(
string update)
168 [SyncVar(hook =
"SharesAnchorsChanged")]
176 private void CmdSetCanShareAnchors(
bool canShareAnchors)
178 Debug.Log(
"CMDSetCanShare " + canShareAnchors);
179 SharesSpatialAnchors = canShareAnchors;
186 void SharesAnchorsChanged(
bool update)
188 SharesSpatialAnchors = update;
189 Debug.LogFormat(
"{0} {1} share", PlayerName, SharesSpatialAnchors ?
"does" :
"does not");
207 Debug.LogError(
"This script required a SharedCollection script attached to a GameObject in the scene");
217 InitializeLocalPlayer();
221 Debug.Log(
"remote player");
222 GetComponentInChildren<MeshRenderer>().material.color = Color.red;
223 AnchorEstablishedChanged(AnchorEstablished);
224 SharesAnchorsChanged(SharesSpatialAnchors);
228 transform.SetParent(sharedWorldAnchorTransform);
231 private void Update()
235 if (!isLocalPlayer &&
string.IsNullOrEmpty(PlayerName) ==
false)
237 transform.localPosition = Vector3.Lerp(transform.localPosition, localPosition, 0.3f);
238 transform.localRotation = localRotation;
254 if (AnchorEstablished ==
false)
266 CmdTransform(transform.localPosition, transform.localRotation);
272 private void InitializeLocalPlayer()
276 Debug.Log(
"Setting instance for local player ");
278 Debug.LogFormat(
"Set local player name {0} IP {1}", networkDiscovery.broadcastData, networkDiscovery.
LocalIp);
279 CmdSetPlayerName(networkDiscovery.broadcastData);
280 CmdSetPlayerIp(networkDiscovery.
LocalIp);
282 #if UNITY_2017_2_OR_NEWER 283 CanShareAnchors = !
UnityEngine.XR.WSA.HolographicSettings.IsDisplayOpaque;
285 CanShareAnchors = !Application.isEditor &&
UnityEngine.VR.VRDevice.isPresent;
288 Debug.LogFormat(
"local player {0} share anchors ", (CanShareAnchors ?
"does" :
"does not"));
289 CmdSetCanShareAnchors(CanShareAnchors);
293 private void OnDestroy()
307 GetComponentInChildren<MeshRenderer>().material.color = Color.blue;
318 Vector3 bulletDir = transform.forward;
319 Vector3 bulletPos = transform.position + bulletDir * 1.5f;
322 GameObject nextBullet = (GameObject)Instantiate(bullet, sharedWorldAnchorTransform.InverseTransformPoint(bulletPos), Quaternion.Euler(bulletDir));
323 nextBullet.GetComponentInChildren<Rigidbody>().velocity = bulletDir * 1.0f;
324 NetworkServer.Spawn(nextBullet);
327 Destroy(nextBullet, 8.0f);
339 private void CmdSendSharedTransform(GameObject target, Vector3 pos, Quaternion rot)
355 CmdSendSharedTransform(target, pos, rot);