Compare commits

...

2 Commits

Author SHA1 Message Date
d63d3cedd2 Add convex mesh colliders for GLTF meshes 2025-06-11 14:38:36 +02:00
48d538a73a Update remote thing pose 2025-06-11 14:23:51 +02:00
3 changed files with 24 additions and 5 deletions

View File

@ -133,9 +133,9 @@ namespace RoboidControl.Unity {
rb.velocity = 0.9f * rb.velocity + 0.1f * forwardSpeed * transform.forward; rb.velocity = 0.9f * rb.velocity + 0.1f * forwardSpeed * transform.forward;
rb.angularVelocity = 0.9f * rb.angularVelocity + 0.1f * turningSpeed * Vector3.up; rb.angularVelocity = 0.9f * rb.angularVelocity + 0.1f * turningSpeed * Vector3.up;
core.position = LinearAlgebra.Spherical.FromVector3(this.transform.localPosition); core.ReplacePosition(LinearAlgebra.Spherical.FromVector3(this.transform.localPosition));
core.orientation = LinearAlgebra.SwingTwist.FromQuaternion(this.transform.localRotation); core.ReplaceOrientation(LinearAlgebra.SwingTwist.FromQuaternion(this.transform.localRotation));
} }
} }
} }

View File

@ -177,6 +177,7 @@ namespace RoboidControl.Unity {
#if GLTF #if GLTF
bool loadingModel = false; bool loadingModel = false;
private async void ProcessGltfModel(RoboidControl.Thing coreThing) { private async void ProcessGltfModel(RoboidControl.Thing coreThing) {
if (!loadingModel) { if (!loadingModel) {
loadingModel = true; loadingModel = true;
@ -192,7 +193,7 @@ namespace RoboidControl.Unity {
Thing[] things = FindObjectsOfType<Thing>(); Thing[] things = FindObjectsOfType<Thing>();
Thing parentThing = null; Thing parentThing = null;
foreach (Thing thing in things) { foreach (Thing thing in things) {
if (thing.core.owner.networkId == coreThing.owner.networkId && thing.core.id == coreThing.id) { if (thing.core != null && thing.core.owner.networkId == coreThing.owner.networkId && thing.core.id == coreThing.id) {
parentTransform = thing.transform; parentTransform = thing.transform;
parentThing = thing; parentThing = thing;
} }
@ -212,7 +213,8 @@ namespace RoboidControl.Unity {
} }
else else
ScanForThings(parentTransform); ScanForThings(parentTransform);
}
AddMeshColliders(parentTransform); }
else { else {
this.transform.localScale = Vector3.one * 1; this.transform.localScale = Vector3.one * 1;
} }
@ -262,6 +264,15 @@ namespace RoboidControl.Unity {
return null; return null;
} }
private void AddMeshColliders(Transform rootTransform) {
MeshRenderer[] meshRenderers = rootTransform.GetComponentsInChildren<MeshRenderer>();
foreach (MeshRenderer meshRenderer in meshRenderers) {
MeshFilter meshFilter = meshRenderer.GetComponent<MeshFilter>();
MeshCollider meshCollider = meshRenderer.gameObject.AddComponent<MeshCollider>();
meshCollider.sharedMesh = meshFilter.sharedMesh;
meshCollider.convex = true;
}
}
/// <summary> /// <summary>
/// Handle a Pose event /// Handle a Pose event

View File

@ -316,6 +316,10 @@ namespace RoboidControl {
/// </summary> /// </summary>
public bool positionUpdated = false; public bool positionUpdated = false;
public void ReplacePosition(Spherical newPosition) {
this._position = newPosition;
}
private SwingTwist _orientation = SwingTwist.zero; private SwingTwist _orientation = SwingTwist.zero;
/// <summary> /// <summary>
/// The orientation of the thing in local space /// The orientation of the thing in local space
@ -336,6 +340,10 @@ namespace RoboidControl {
/// </summary> /// </summary>
public bool orientationUpdated = false; public bool orientationUpdated = false;
public void ReplaceOrientation(SwingTwist newOrientation) {
this._orientation = newOrientation;
}
private Spherical _linearVelocity = Spherical.zero; private Spherical _linearVelocity = Spherical.zero;
/// <summary> /// <summary>
/// The linear velocity of the thing in local space in meters per second /// The linear velocity of the thing in local space in meters per second