implementation of drecon in unity 2022 lts
forked from:
https://github.com/joanllobera/marathon-envs
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.3 KiB
146 lines
4.3 KiB
9 months ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEditor;
|
||
|
|
||
|
|
||
|
//This script assumes information was stored as SwingTwist
|
||
|
//This means the script goes together with ROMparserSwingTwist
|
||
|
|
||
|
//we assume the articulationBodies have a name structure of hte form ANYNAME:something-in-the-targeted-joint
|
||
|
|
||
|
[CustomEditor(typeof(ROMparserSwingTwist))]
|
||
|
public class ROMparserSwingTwistEditor : Editor
|
||
|
{
|
||
|
|
||
|
[SerializeField]
|
||
|
SerializedProperty ROMparserSwingTwist;
|
||
|
|
||
|
//NOT USED ANYMORE
|
||
|
//[SerializeField]
|
||
|
//string keyword4prefabs = "Constrained-procedurally";
|
||
|
//[SerializeField]
|
||
|
//RangeOfMotion004 theRagdollPrefab;
|
||
|
|
||
|
|
||
|
|
||
|
void OnEnable()
|
||
|
{
|
||
|
ROMparserSwingTwist = serializedObject.FindProperty("ROMparserSwingTwist");
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
public override void OnInspectorGUI()
|
||
|
{
|
||
|
serializedObject.Update();
|
||
|
|
||
|
|
||
|
GUILayout.Label("");
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
base.OnInspectorGUI();
|
||
|
|
||
|
/*
|
||
|
if (GUILayout.Button("0.Debug: Set Joints To Max ROM"))
|
||
|
{
|
||
|
ROMparserSwingTwist t = target as ROMparserSwingTwist;
|
||
|
t.SetJointsToMaxROM();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
if (GUILayout.Button("1.Store ROM info "))
|
||
|
{
|
||
|
ROMparserSwingTwist t = target as ROMparserSwingTwist;
|
||
|
EditorUtility.SetDirty(t.info2store);
|
||
|
AssetDatabase.SaveAssets();
|
||
|
AssetDatabase.Refresh();
|
||
|
}
|
||
|
|
||
|
|
||
|
GUILayout.Label("Prefab Ragdoll:");
|
||
|
|
||
|
|
||
|
|
||
|
GUILayout.Label("How to use:");
|
||
|
|
||
|
GUILayout.TextArea(
|
||
|
"Step 1: execute in play mode until the values in the Range Of Motion Preview do not change any more" +
|
||
|
// " \n Step 2: click on button 1 to apply the constraints to check if the ragdoll looks reasonable" +
|
||
|
// " \n Step 3: in edit mode, click on button 1, and then on button 2, to generate a new constrained ragdoll. If a template for a SpawnableEnv is provided, also a new environment for training");
|
||
|
" \n Step 2: open the Ragdoll on which you want to apply the range of motion, and use the script ApplyRangeOfMotion004");
|
||
|
*/
|
||
|
|
||
|
serializedObject.ApplyModifiedProperties();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void storeNewPrefabWithROM(ProcRagdollAgent rda, ManyWorlds.SpawnableEnv envPrefab = null)
|
||
|
{
|
||
|
ROMparserSwingTwist t = target as ROMparserSwingTwist;
|
||
|
|
||
|
//ROMinfoCollector infoStored = t.info2store;
|
||
|
|
||
|
Transform targetRoot = t.targetRagdollRoot.transform;
|
||
|
|
||
|
|
||
|
//string add2prefabs = keyword4prefabs;
|
||
|
|
||
|
|
||
|
|
||
|
// Set the path,
|
||
|
// and name it as the GameObject's name with the .Prefab format
|
||
|
string localPath = "Assets/MarathonEnvs/Agents/Characters/MarathonMan004/" + targetRoot.name + ".prefab";
|
||
|
|
||
|
// Make sure the file name is unique, in case an existing Prefab has the same name.
|
||
|
string uniqueLocalPath = AssetDatabase.GenerateUniqueAssetPath(localPath);
|
||
|
|
||
|
|
||
|
if (PrefabUtility.IsAnyPrefabInstanceRoot(targetRoot.gameObject))
|
||
|
//We want to store it independently from the current prefab. Therefore:
|
||
|
PrefabUtility.UnpackPrefabInstance(targetRoot.gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction);
|
||
|
|
||
|
|
||
|
// Create the new Prefab.
|
||
|
PrefabUtility.SaveAsPrefabAsset(targetRoot.gameObject, uniqueLocalPath);
|
||
|
|
||
|
Debug.Log("Saved new CharacterPrefab at: " + uniqueLocalPath);
|
||
|
|
||
|
|
||
|
if (envPrefab != null)
|
||
|
{
|
||
|
Transform targetEnv = envPrefab.transform;
|
||
|
|
||
|
targetEnv.name = "ControllerMarathonManEnv";
|
||
|
|
||
|
string localEnvPath = "Assets/MarathonController/Environments/" + targetEnv.name + ".prefab";
|
||
|
|
||
|
// Make sure the file name is unique, in case an existing Prefab has the same name.
|
||
|
string uniqueLocalEnvPath = AssetDatabase.GenerateUniqueAssetPath(localEnvPath);
|
||
|
|
||
|
if (PrefabUtility.IsAnyPrefabInstanceRoot(targetEnv.gameObject))
|
||
|
//We want to store it independently from the current prefab. Therefore:
|
||
|
PrefabUtility.UnpackPrefabInstance(targetEnv.gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction);
|
||
|
|
||
|
|
||
|
// Create the new Prefab.
|
||
|
PrefabUtility.SaveAsPrefabAsset(targetEnv.gameObject, uniqueLocalEnvPath);
|
||
|
|
||
|
Debug.Log("Saved new Environment Prefab at: " + uniqueLocalEnvPath);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|