#if UNITY_5_3_OR_NEWER using UnityEngine; namespace RoboidControl.Unity { public class Wheel : Motor { /// /// Create the Unity representation /// /// The core motor /// The Unity representation of a motorised wheel public static Wheel Create(RoboidControl.Motor core, float wheelRadius) { GameObject prefab = (GameObject)Resources.Load("Wheel"); if (prefab != null) { // Use resource prefab when available GameObject gameObj = Instantiate(prefab); Wheel component = gameObj.GetComponent(); if (component != null) component.core = core; return component; } else { // Fallback implementation GameObject gameObj = new(core.name); Wheel component = gameObj.AddComponent(); component.Init(core); // component.wheelCollider = gameObj.AddComponent(); // component.wheelCollider.mass = 0.1f; // component.wheelCollider.suspensionDistance = 0.01f; // component.wheelCollider.suspensionSpring = new JointSpring { // spring = 100f, // Very high spring value to make it rigid // damper = 10f, // Low damping (could be adjusted for slight 'bounciness') // targetPosition = 0.5f // Neutral position (middle of the suspension travel) // }; Debug.Log("Create " + core.name); return component; } } public static Wheel Create(Rigidbody rb, byte thingId) { GameObject prefab = (GameObject)Resources.Load("Wheel"); if (prefab != null) { // Use resource prefab when available GameObject gameObj = Instantiate(prefab); Wheel component = gameObj.GetComponent(); if (component != null) component.core = new RoboidControl.Thing(RoboidControl.Thing.Type.UncontrolledMotor, false); return component; } else { // Fallback implementation GameObject gameObj = new("Wheel"); gameObj.transform.parent = rb.transform; Wheel component = gameObj.AddComponent(); SiteServer participant = FindAnyObjectByType(); RoboidControl.Thing core = participant.coreParticipant.Get(thingId); if (core == null) core = new(participant.coreParticipant, RoboidControl.Thing.Type.UncontrolledMotor, thingId, false); else { ; } component.Init(core); // component.wheelCollider = gameObj.AddComponent(); // component.wheelCollider.mass = 0.1f; // component.wheelCollider.suspensionDistance = 0.01f; // component.wheelCollider.suspensionSpring = new JointSpring { // spring = 100f, // Very high spring value to make it rigid // damper = 10f, // Low damping (could be adjusted for slight 'bounciness') // targetPosition = 0.5f // Neutral position (middle of the suspension travel) // }; Debug.Log("Create placeholder Wheel "); return component; } } } } #endif