Merge pull request #734 from hyarion:fix/unity-load-balloons.xml
PiperOrigin-RevId: 509832074 Change-Id: Ia8505b4ea83d8903052e72a12b914a8fd94a13df
This commit is contained in:
@@ -20,17 +20,23 @@ namespace Mujoco {
|
||||
|
||||
// The component represents the apex of hierarchy that defines a single rigid body.
|
||||
public class MjBody : MjBaseBody {
|
||||
|
||||
[Tooltip("Gravity compensation force, specified as fraction of body weight.")]
|
||||
public float GravityCompensation;
|
||||
|
||||
protected override void OnParseMjcf(XmlElement mjcf) {
|
||||
// Transform
|
||||
transform.localPosition =
|
||||
MjEngineTool.UnityVector3(mjcf.GetVector3Attribute("pos", defaultValue: Vector3.zero));
|
||||
transform.localRotation = MjEngineTool.UnityQuaternion(
|
||||
mjcf.GetQuaternionAttribute("quat", defaultValue: MjEngineTool.MjQuaternionIdentity));
|
||||
GravityCompensation = mjcf.GetFloatAttribute("gravcomp", defaultValue: 0.0f);
|
||||
}
|
||||
|
||||
protected override XmlElement OnGenerateMjcf(XmlDocument doc) {
|
||||
var mjcf = (XmlElement)doc.CreateElement("body");
|
||||
MjEngineTool.PositionRotationToMjcf(mjcf, this);
|
||||
mjcf.SetAttribute("gravcomp", MjEngineTool.MakeLocaleInvariant($"{GravityCompensation}"));
|
||||
return mjcf;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,8 @@ namespace Mujoco {
|
||||
// exactly what the documentation specifies: http://mujoco.org/book/XMLreference.html#option .
|
||||
public enum IntegratorType {
|
||||
Euler,
|
||||
RK4
|
||||
RK4,
|
||||
@implicit
|
||||
}
|
||||
|
||||
public enum CollisionCheckType {
|
||||
@@ -208,7 +209,7 @@ public struct MjOptionStruct {
|
||||
public static MjOptionStruct Default = new MjOptionStruct() {
|
||||
ImpRatio = 1.0f,
|
||||
Magnetic = Vector3.zero,
|
||||
Wind = new Vector3(0.0f, -0.5f, 0.0f),
|
||||
Wind = new Vector3(0.0f, 0.0f, 0.0f),
|
||||
Density = 0.0f,
|
||||
Viscosity = 0.0f,
|
||||
OverrideMargin = 0.0f,
|
||||
|
||||
@@ -28,12 +28,17 @@ namespace Mujoco {
|
||||
_root = root;
|
||||
}
|
||||
|
||||
public void ApplyModifiersToElement(XmlElement element) {
|
||||
public void ApplyModifiersToElement(XmlElement element, string elementName=null) {
|
||||
// Allow overriding the element name for defaults lookup, needed for tendon
|
||||
if (elementName == null) {
|
||||
elementName = element.Name;
|
||||
}
|
||||
|
||||
// Combine all defaults into one. At this stage, we want to overwrite attributes defined by
|
||||
// the previous defaults.
|
||||
var aggregateDefaults = _root.CreateElement("aggregate");
|
||||
// Root default leaf should be processed only once, and handled first (so it's overriden).
|
||||
var rootDefaultLeaf = _root.SelectSingleNode($"/mujoco/default/{element.Name}") as XmlElement;
|
||||
var rootDefaultLeaf = _root.SelectSingleNode($"/mujoco/default/{elementName}") as XmlElement;
|
||||
if (rootDefaultLeaf != null) {
|
||||
CopyAttributes(rootDefaultLeaf, aggregateDefaults);
|
||||
}
|
||||
@@ -43,7 +48,7 @@ namespace Mujoco {
|
||||
var defaultClassElement =
|
||||
_root.SelectSingleNode($"descendant::default[@class='{className}']") as XmlElement;
|
||||
// Ancestry iterates up in the tree, but we want to apply changes from remote to specific.
|
||||
var ancestors = GetDefaultAncestry(defaultClassElement, element.Name).Reverse();
|
||||
var ancestors = GetDefaultAncestry(defaultClassElement, elementName).Reverse();
|
||||
foreach (var defaultAncestor in ancestors) {
|
||||
CopyAttributesOverwriteExisting(defaultAncestor, aggregateDefaults);
|
||||
}
|
||||
|
||||
@@ -167,6 +167,7 @@ public class MjcfImporter {
|
||||
if (tendonNode != null) {
|
||||
var tendonsParentObject = CreateGameObjectInParent("tendons", rootObject);
|
||||
foreach (var child in tendonNode.OfType<XmlElement>()) {
|
||||
_modifiers.ApplyModifiersToElement(child, elementName: "tendon");
|
||||
if (child.Name == "fixed") {
|
||||
CreateGameObjectWithUniqueName<MjFixedTendon>(tendonsParentObject, child);
|
||||
} else if (child.Name == "spatial") {
|
||||
@@ -238,7 +239,7 @@ public class MjcfImporter {
|
||||
}
|
||||
}
|
||||
|
||||
// Called by ParseBodyChildren for each XML node, overridable by inheriting claases.
|
||||
// Called by ParseBodyChildren for each XML node, overridable by inheriting classes.
|
||||
private void ParseBodyChild(XmlElement child, GameObject parentObject) {
|
||||
switch (child.Name) {
|
||||
case "geom": {
|
||||
|
||||
Reference in New Issue
Block a user