Add support for fluid shapes to Unity plugin

This commit is contained in:
Benjamin Nauck
2023-02-17 12:42:08 +01:00
parent a6730aa740
commit 09bc934f25
2 changed files with 32 additions and 1 deletions
@@ -22,6 +22,10 @@ namespace Mujoco {
[Serializable]
public struct MjGeomSettings {
public enum FluidShapeTypes {
None,
Ellipsoid,
}
[Tooltip("Priority")]
public int Priority;
@@ -35,11 +39,15 @@ public struct MjGeomSettings {
[Tooltip("Contact friction parameters for dynamically generated contact pairs.")]
public GeomFriction Friction;
[Tooltip("Shape used for fluid simulation.")]
public FluidShapeTypes FluidShapeType;
// Default geom settings.
public static MjGeomSettings Default = new MjGeomSettings() {
Solver = GeomSolver.Default,
Filtering = CollisionFiltering.Default,
Friction = GeomFriction.Default
Friction = GeomFriction.Default,
FluidShapeType = FluidShapeTypes.None
};
public void FromMjcf(XmlElement mjcf) {
@@ -76,6 +84,10 @@ public struct MjGeomSettings {
Friction.Sliding = friction[0];
Friction.Torsional = friction[1];
Friction.Rolling = friction[2];
// Fluid shape settings.
FluidShapeType = mjcf.GetEnumAttribute<FluidShapeTypes>(
"fluidshape", FluidShapeTypes.None, ignoreCase: true);
}
public void ToMjcf(XmlElement mjcf) {
@@ -97,6 +109,9 @@ public struct MjGeomSettings {
// Inertia and friction settings.
mjcf.SetAttribute("friction", MjEngineTool.MakeLocaleInvariant($"{Friction.Sliding} {Friction.Torsional} {Friction.Rolling}"));
// Fluid shape settings.
mjcf.SetAttribute("fluidshape", FluidShapeType.ToString().ToLower());
}
}
@@ -109,6 +109,13 @@ public class MjGeomSettingsGenerationTests {
_settings.ToMjcf(_mjcf);
Assert.That(_doc.OuterXml, Does.Contain(@"friction=""5 6 7"""));
}
[Test]
public void FluidShapeTypeMjcf() {
_settings.FluidShapeType = MjGeomSettings.FluidShapeTypes.Ellipsoid;
_settings.ToMjcf(_mjcf);
Assert.That(_doc.OuterXml, Does.Contain(@"fluidshape=""ellipsoid"""));
}
}
[TestFixture]
@@ -199,5 +206,14 @@ public class MjGeomSettingsParsingTests {
Assert.That(_settings.Friction.Torsional, Is.EqualTo(6));
Assert.That(_settings.Friction.Rolling, Is.EqualTo(7));
}
[Test]
public void FluidShapeTypeMjcf() {
_mjcf.SetAttribute("fluidshape", "ellipsoid");
_settings.FromMjcf(_mjcf);
Assert.That(_settings.FluidShapeType, Is.EqualTo(
MjGeomSettings.FluidShapeTypes.Ellipsoid
));
}
}
}