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.
 
 
 
 

145 lines
4.3 KiB

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);
}
}
}