Skip to content

Instantly share code, notes, and snippets.

@jminor
Last active December 5, 2019 08:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jminor/791124147dbd720708126ec3c727f94f to your computer and use it in GitHub Desktop.
Save jminor/791124147dbd720708126ec3c727f94f to your computer and use it in GitHub Desktop.
Unity Synced Object, via OSC
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class OSCSyncedObject : MonoBehaviour {
public OSC osc;
public string address = "/example/obj1";
public bool forceSend;
public float lastSyncTime;
private Vector3 lastPosition;
private Quaternion lastRotation;
private Vector3 lastScale;
void OnEnable() {
lastSyncTime = Time.time;
lastPosition = transform.position;
lastRotation = transform.rotation;
lastScale = transform.localScale;
if (osc != null && address != null) {
osc.AddAddressHandler(address, UpdateXform);
}
}
void OnDisable() {
if (osc != null && address != null) {
osc.RemoveAddressHandler(address, UpdateXform);
}
}
public void SendXform() {
lastPosition = transform.position;
lastRotation = transform.rotation;
lastScale = transform.localScale;
osc.Send(new OscMessage(
address,
lastPosition.x,
lastPosition.y,
lastPosition.z,
lastRotation.x,
lastRotation.y,
lastRotation.z,
lastRotation.w,
lastScale.x,
lastScale.y,
lastScale.z
));
}
void UpdateXform(OscMessage message) {
lastPosition = new Vector3(
message.GetFloat(0),
message.GetFloat(1),
message.GetFloat(2)
);
lastRotation = new Quaternion(
message.GetFloat(3),
message.GetFloat(4),
message.GetFloat(5),
message.GetFloat(6)
);
lastScale = new Vector3(
message.GetFloat(7),
message.GetFloat(8),
message.GetFloat(9)
);
transform.position = lastPosition;
transform.rotation = lastRotation;
transform.localScale = lastScale;
lastSyncTime = Time.time;
}
void Update() {
Vector3 pos = transform.position;
if (forceSend || pos != lastPosition) {
SendXform();
}
forceSend = false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment