private void OnPostControllerUpdated() { IArmModelVisualProvider armModelVisualProvider = armModel as IArmModelVisualProvider; if (armModelVisualProvider == null) { return; } // Shoulder Joint. shoulderJoint.localPosition = armModelVisualProvider.ShoulderPosition; shoulderJoint.localRotation = armModelVisualProvider.ShoulderRotation; // Elbow Joint. elbowJoint.localPosition = armModelVisualProvider.ElbowPosition; elbowJoint.localRotation = armModelVisualProvider.ElbowRotation; // Bicep Limb. Vector3 elbowShoulderDiff = elbowJoint.localPosition - shoulderJoint.localPosition; Vector3 bicepPosition = shoulderJoint.localPosition + (elbowShoulderDiff * 0.5f); bicepLimb.localPosition = bicepPosition; bicepLimb.LookAt(shoulderJoint, elbowJoint.forward); bicepLimb.localScale = new Vector3(1.0f, 1.0f, elbowShoulderDiff.magnitude * BICEP_SCALE_FACTOR); // Wrist Joint. wristJoint.localPosition = armModelVisualProvider.WristPosition; wristJoint.localRotation = armModelVisualProvider.WristRotation; Vector3 wristDir = armModelVisualProvider.WristRotation * Vector3.forward; wristJoint.localPosition = wristJoint.localPosition + (wristDir * wristOffset); // Forearm Limb. Vector3 wristElbowDiff = wristJoint.localPosition - elbowJoint.localPosition; Vector3 forearmPosition = elbowJoint.localPosition + (wristElbowDiff * 0.5f); forearmLimb.localPosition = forearmPosition; forearmLimb.LookAt(elbowJoint, wristJoint.up); forearmLimb.localScale = new Vector3(1.0f, 1.0f, wristElbowDiff.magnitude * FOREARM_SCALE_FACTOR); if (laser != null) { if (isLaserHighlighted) { laser.startColor = laserHighlightColor; laser.enabled = true; } else { laser.startColor = laserDefaultColor; } Color color = laser.startColor; color.a *= armModel.PreferredAlpha; laser.startColor = color; laser.endColor = Color.clear; } }
void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { if (stream.isWriting) { // We own this player: send the others our data IArmModelVisualProvider armModelVisual = armModel as IArmModelVisualProvider; stream.SendNext(armModelVisual.ShoulderPosition); stream.SendNext(armModelVisual.ElbowPosition); stream.SendNext(armModelVisual.WristPosition); stream.SendNext(armModelVisual.ShoulderRotation); stream.SendNext(armModelVisual.ElbowRotation); stream.SendNext(armModelVisual.WristRotation); } else { // Network player, receive data correctShoulderPos = (Vector3)stream.ReceiveNext(); correctElbowPos = (Vector3)stream.ReceiveNext(); correctWristPos = (Vector3)stream.ReceiveNext(); correctShoulderRotation = (Quaternion)stream.ReceiveNext(); correctElbowRotation = (Quaternion)stream.ReceiveNext(); correctWristRotation = (Quaternion)stream.ReceiveNext(); } }