public void OnInitializeAgent() { Time.fixedDeltaTime = FixedDeltaTime; _waitingForAnimation = true; _decisionRequester = GetComponent<DecisionRequester>(); BodyParts = new List<BodyPart002> (); BodyPart002 root = null; foreach (var t in GetComponentsInChildren<Transform>()) { if (BodyConfig.GetBodyPartGroup(t.name) == BodyHelper002.BodyPartGroup.None) continue; var bodyPart = new BodyPart002{ Rigidbody = t.GetComponent<Rigidbody>(), Transform = t, Name = t.name, Group = BodyConfig.GetBodyPartGroup(t.name), }; if (bodyPart.Group == BodyConfig.GetRootBodyPart()) root = bodyPart; bodyPart.Root = root; bodyPart.Init(); BodyParts.Add(bodyPart); } var partCount = BodyParts.Count; Muscles = new List<Muscle002> (); var muscles = GetComponentsInChildren<ConfigurableJoint>(); ConfigurableJoint rootConfigurableJoint = null; var ragDoll = GetComponent<RagDoll002>(); foreach (var m in muscles) { var maximumForce = ragDoll.MusclePowers.First(x=>x.Muscle == m.name).PowerVector; // maximumForce *= 2f; var muscle = new Muscle002{ Rigidbody = m.GetComponent<Rigidbody>(), Transform = m.GetComponent<Transform>(), ConfigurableJoint = m, Name = m.name, Group = BodyConfig.GetMuscleGroup(m.name), MaximumForce = maximumForce }; if (muscle.Group == BodyConfig.GetRootMuscle()) rootConfigurableJoint = muscle.ConfigurableJoint; muscle.RootConfigurableJoint = rootConfigurableJoint; muscle.Init(); Muscles.Add(muscle); } var spawnableEnv = GetComponentInParent<SpawnableEnv>(); _localStyleAnimator = spawnableEnv.gameObject.GetComponentInChildren<StyleTransfer002Animator>(); _styleAnimator = _localStyleAnimator.GetFirstOfThisAnim(); // _styleAnimator = _localStyleAnimator; _muscleAnimator = _styleAnimator; _agent = GetComponent<StyleTransfer002Agent>(); // _trainerAgent = GetComponent<StyleTransfer002TrainerAgent>(); // _brain = FindObjectsOfType<Brain>().First(x=>x.name=="LearnFromMocapBrain"); IsInferenceMode = !Academy.Instance.IsCommunicatorOn; }
void SetupBody() { _agent = GetComponent <Agent>(); _decisionRequester = GetComponent <DecisionRequester>(); Time.fixedDeltaTime = FixedDeltaTime; BodyParts = new List <BodyPart002> (); BodyPart002 root = null; foreach (var t in GetComponentsInChildren <Transform>()) { if (BodyConfig.GetBodyPartGroup(t.name) == BodyHelper002.BodyPartGroup.None) { continue; } var bodyPart = new BodyPart002 { Rigidbody = t.GetComponent <Rigidbody>(), Transform = t, Name = t.name, Group = BodyConfig.GetBodyPartGroup(t.name), }; if (bodyPart.Group == BodyConfig.GetRootBodyPart()) { root = bodyPart; } bodyPart.Root = root; bodyPart.Init(); BodyParts.Add(bodyPart); } var partCount = BodyParts.Count; Muscles = new List <Muscle002> (); var muscles = GetComponentsInChildren <ConfigurableJoint>(); ConfigurableJoint rootConfigurableJoint = null; var ragDoll = GetComponent <RagDoll002>(); foreach (var m in muscles) { var maximumForce = ragDoll.MusclePowers.First(x => x.Muscle == m.name).PowerVector; maximumForce *= ragDoll.MotorScale; var muscle = new Muscle002 { Rigidbody = m.GetComponent <Rigidbody>(), Transform = m.GetComponent <Transform>(), ConfigurableJoint = m, Name = m.name, Group = BodyConfig.GetMuscleGroup(m.name), MaximumForce = maximumForce }; if (muscle.Group == BodyConfig.GetRootMuscle()) { rootConfigurableJoint = muscle.ConfigurableJoint; } muscle.RootConfigurableJoint = rootConfigurableJoint; muscle.Init(); Muscles.Add(muscle); } _startCount++; }
// Use this for initialization void Start() { _master = GetComponent <StyleTransfer002Master>(); _decisionRequester = GetComponent <DecisionRequester>(); var spawnableEnv = GetComponentInParent <SpawnableEnv>(); _localStyleAnimator = spawnableEnv.gameObject.GetComponentInChildren <StyleTransfer002Animator>(); _styleAnimator = _localStyleAnimator.GetFirstOfThisAnim(); _startCount++; }
public void Start() { List <Transform> transforms = FindRecursive(root); for (int i = 0; i < transforms.Count; i++) { Transform transform = transforms[i]; if (transform.gameObject.name.Contains("Tongue") || transform.gameObject.name.Contains("Teeth")) { continue; } BehaviorParameters bp = transform.GetComponent <BehaviorParameters>(); if (bp == null) { bp = transform.gameObject.AddComponent <BehaviorParameters>(); } bp.BehaviorName = "SnapperController"; bp.BrainParameters.VectorObservationSize = 55; // bp.BrainParameters.NumStackedVectorObservations = 4; bp.BrainParameters.VectorActionSpaceType = SpaceType.Continuous; bp.BrainParameters.VectorActionSize = new int[] { 3, 3, 3 }; bp.Model = nnModel; RigTransformAgent rta = transform.GetComponent <RigTransformAgent>(); if (rta == null) { rta = transform.gameObject.AddComponent <RigTransformAgent>(); } rta.Index = i; rta.IndexRange = transforms.Count; rta.MaxStep = MaxStep; DecisionRequester dr = transform.GetComponent <DecisionRequester>(); if (dr == null) { dr = transform.gameObject.AddComponent <DecisionRequester>(); } dr.DecisionPeriod = 2; dr.TakeActionsBetweenDecisions = true; RenderTextureSensorComponent rts = transform.GetComponent <RenderTextureSensorComponent>(); if (rts == null) { rts = transform.gameObject.AddComponent <RenderTextureSensorComponent>(); } rts.RenderTexture = camTexture; rts.Grayscale = true; } }
public void Reset() { if (this.terrain == null) { var parent = gameObject.transform.parent; terrain = parent.GetComponentInChildren <Terrain>(); var sharedTerrainData = terrain.terrainData; terrain.terrainData = new TerrainData(); terrain.terrainData.heightmapResolution = sharedTerrainData.heightmapResolution; terrain.terrainData.baseMapResolution = sharedTerrainData.baseMapResolution; terrain.terrainData.SetDetailResolution(sharedTerrainData.detailResolution, sharedTerrainData.detailResolutionPerPatch); terrain.terrainData.size = sharedTerrainData.size; terrain.terrainData.thickness = sharedTerrainData.thickness; // terrain.terrainData.splatPrototypes = sharedTerrainData.splatPrototypes; terrain.terrainData.terrainLayers = sharedTerrainData.terrainLayers; var collider = terrain.GetComponent <TerrainCollider>(); collider.terrainData = terrain.terrainData; _rowHeight = new float[terrain.terrainData.heightmapResolution, 1]; } if (this._agent == null) { _agent = GetComponent <Agent>(); _decisionRequester = GetComponent <DecisionRequester>(); } //print($"HeightMap {this.terrain.terrainData.heightmapWidth}, {this.terrain.terrainData.heightmapHeight}. // Scale {this.terrain.terrainData.heightmapScale}. Resolution {this.terrain.terrainData.heightmapResolution}"); _mapScaleY = this.terrain.terrainData.heightmapScale.y; // get the normalized position of this game object relative to the terrain Vector3 tempCoord = (transform.position - terrain.gameObject.transform.position); Vector3 coord; tempCoord.x = Mathf.Clamp(tempCoord.x, 0f, terrain.terrainData.size.x - 0.000001f); tempCoord.z = Mathf.Clamp(tempCoord.z, 0f, terrain.terrainData.size.z - 0.000001f); coord.x = (tempCoord.x - 1) / terrain.terrainData.size.x; coord.y = tempCoord.y / terrain.terrainData.size.y; coord.z = tempCoord.z / terrain.terrainData.size.z; // get the position of the terrain heightmap where this game object is posXInTerrain = (int)(coord.x * terrain.terrainData.heightmapResolution); posYInTerrain = (int)(coord.z * terrain.terrainData.heightmapResolution); // we set an offset so that all the raising terrain is under this game object int offset = 0 / 2; // get the heights of the terrain under this game object _heights = terrain.terrainData.GetHeights(posXInTerrain - offset, posYInTerrain - offset, 100, 1); curHeight = _midHeight; heightIndex = posXInTerrain; actionReward = 0f; ResetHeights(); }
// Use this for initialization public void OnInitializeAgent() { _decisionRequester = GameObject.Find("MarathonMan").GetComponent <DecisionRequester>(); anim = GetComponent <Animator>(); anim.Play("Record", 0, NormalizedTime); anim.Update(0f); AnimationSteps = new List <AnimationStep>(); if (_rigidbodies == null || _transforms == null) { _rigidbodies = GetComponentsInChildren <Rigidbody>().ToList(); _transforms = GetComponentsInChildren <Transform>().ToList(); } SetupSensors(); }
// Resets the agent. Initialize the style animator and master if not initialized. public override void AgentReset() { if (!_hasLazyInitialized) { _master = GetComponent <StyleTransfer002Master>(); _master.BodyConfig = MarathonManAgent.BodyConfig; _decisionRequester = GetComponent <DecisionRequester>(); var spawnableEnv = GetComponentInParent <SpawnableEnv>(); _localStyleAnimator = spawnableEnv.gameObject.GetComponentInChildren <StyleTransfer002Animator>(); _styleAnimator = _localStyleAnimator.GetFirstOfThisAnim(); _styleAnimator.BodyConfig = MarathonManAgent.BodyConfig; _styleAnimator.OnInitializeAgent(); _master.OnInitializeAgent(); _hasLazyInitialized = true; _localStyleAnimator.DestoryIfNotFirstAnim(); } _isDone = true; _ignorScoreForThisFrame = true; _master.ResetPhase(); _sensors = GetComponentsInChildren <SensorBehavior>() .Select(x => x.gameObject) .ToList(); SensorIsInTouch = Enumerable.Range(0, _sensors.Count).Select(x => 0f).ToList(); if (_scoreHistogramData != null) { var column = _master.StartAnimationIndex; if (_decisionRequester?.DecisionPeriod > 1) { column /= _decisionRequester.DecisionPeriod; } if (_ignorScoreForThisFrame) { _ignorScoreForThisFrame = false; } else { _scoreHistogramData.SetItem(column, AverageReward); } } }
// Initialize public void Init() { _decisionRequester = GameObject.Find("MarathonMan").GetComponent <DecisionRequester>(); _firstRunComplete = false; if (Rigidbody != null) { Rigidbody.angularVelocity = Vector3.zero; Rigidbody.velocity = Vector3.zero; } if (!_hasRanVeryFirstInit) { InitialRootRotation = Root.Transform.transform.rotation; InitialRootPosition = Root.Transform.transform.position; BaseRotation = Root.Transform.transform.rotation; BasePosition = Root.Transform.transform.position; DefaultLocalRotation = LocalRotation; Vector3 forward = this.Transform.forward; Vector3 up = this.Transform.up; Quaternion toJointSpace = Quaternion.LookRotation(forward, up); ToJointSpaceInverse = Quaternion.Inverse(toJointSpace); ToJointSpaceDefault = DefaultLocalRotation * toJointSpace; // set body part direction Vector3 focalOffset = new Vector3(10, 0, 0); if (Rigidbody != null) { var focalPoint = Rigidbody.position + focalOffset; ToFocalRoation = Rigidbody.rotation; ToFocalRoation.SetLookRotation(focalPoint - Rigidbody.position); } _hasRanVeryFirstInit = true; } }
public override void AgentReset() { if (!_hasLazyInitialized) { _decisionRequester = GetComponent <DecisionRequester>(); _debugController = FindObjectOfType <MarathonTestBedController>(); Time.fixedDeltaTime = FixedDeltaTime; _spawnableEnv = GetComponentInParent <SpawnableEnv>(); _mocapController = _spawnableEnv.GetComponentInChildren <MocapController>(); _mocapBodyParts = _mocapController.GetComponentsInChildren <Rigidbody>().ToList(); _bodyParts = GetComponentsInChildren <ArticulationBody>().ToList(); _dReConObservations = GetComponent <DReConObservations>(); _dReConRewards = GetComponent <DReConRewards>(); var mocapController = _spawnableEnv.GetComponentInChildren <MocapController>(); _trackBodyStatesInWorldSpace = mocapController.GetComponent <TrackBodyStatesInWorldSpace>(); _ragDollSettings = GetComponent <RagDoll003>(); _inputController = _spawnableEnv.GetComponentInChildren <InputController>(); _sensorObservations = GetComponent <SensorObservations>(); foreach (var body in GetComponentsInChildren <ArticulationBody>()) { body.solverIterations = 255; body.solverVelocityIterations = 255; } _motors = GetComponentsInChildren <ArticulationBody>() .Where(x => x.jointType == ArticulationJointType.SphericalJoint) .Where(x => !x.isRoot) .Distinct() .ToList(); var individualMotors = new List <float>(); foreach (var m in _motors) { if (m.twistLock == ArticulationDofLock.LimitedMotion) { individualMotors.Add(0f); } if (m.swingYLock == ArticulationDofLock.LimitedMotion) { individualMotors.Add(0f); } if (m.swingZLock == ArticulationDofLock.LimitedMotion) { individualMotors.Add(0f); } } _dReConObservations.PreviousActions = individualMotors.ToArray(); _hasLazyInitialized = true; } _smoothedActions = null; debugCopyMocap = false; _inputController.OnReset(); _mocapController.GetComponentInChildren <MocapAnimatorController>().OnReset(); var angle = Vector3.SignedAngle(Vector3.forward, _inputController.HorizontalDirection, Vector3.up); var rotation = Quaternion.Euler(0f, angle, 0f); _mocapController.OnReset(rotation); _mocapController.CopyStatesTo(this.gameObject); // _trackBodyStatesInWorldSpace.CopyStatesTo(this.gameObject); float timeDelta = float.MinValue; _dReConObservations.OnReset(); _dReConRewards.OnReset(); _dReConObservations.OnStep(timeDelta); _dReConRewards.OnStep(timeDelta); _skipRewardAfterTeleport = false; #if UNITY_EDITOR if (DebugPauseOnReset) { UnityEditor.EditorApplication.isPaused = true; } #endif }