###前提、実現したいこと
Unityを使って機械学習の自作環境を作っています。自作のチュートリアルを少し変更して一人称視点のカメラを追加しましたが、z軸方向しか向きません。調べていく中でカメラの方向にplayerを前進させる方法はありましたが、その逆であるplayerの進行方向にカメラを向ける方法が見つかりませんでした。
以下のプログラムを変更してカメラの向きを変えたいです。
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class AgentCamera : MonoBehaviour 6{ 7 public RollerAgent player; 8 public float offsetx; 9 public float offsety; 10 public float offsetz; 11 12 // Update is called once per frame 13 void Update() 14 { 15 Vector3 pos = player.transform.position; 16 transform.position = new Vector3(pos.x + offsetx, pos.y + offsety, pos.z + offsetz); 17 } 18}
Agentのプログラムは以下です。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using MLAgents; 5 6public class RollerAgent : Agent 7{ 8 Rigidbody rBody; 9 // Start is called before the first frame update 10 void Start(){ 11 rBody = GetComponent<Rigidbody>(); 12 } 13 14 public Transform Target; 15 public override void AgentReset() 16 { 17 if (this.transform.position.y < 0) 18 { 19 this.rBody.angularVelocity = Vector3.zero; 20 this.rBody.velocity = Vector3.zero; 21 this.transform.position = new Vector3( 0, 0.5f, 0); 22 } 23 24 Target.position = new Vector3(Random.value * 8 - 4, 0.5f, Random.value * 8 - 4); 25 } 26 27 public override void CollectObservations() 28 { 29 // Target and Agent positions 30 AddVectorObs(Target.position); 31 AddVectorObs(this.transform.position); 32 33 // Agent velocity 34 AddVectorObs(rBody.velocity.x); 35 AddVectorObs(rBody.velocity.z); 36 } 37 38 public float speed = 10; 39 public override void AgentAction(float[] vectorAction) 40 { 41 42 // Actions, size = 2 43 Vector3 controlSignal = Vector3.zero; 44 controlSignal.x = vectorAction[0]; 45 controlSignal.z = vectorAction[1]; 46 rBody.AddForce(controlSignal * speed); 47 48 // Rewards 49 float distanceToTarget = Vector3.Distance(this.transform.position, Target.position); 50 51 // Reached target 52 if (distanceToTarget < 1.42f) 53 { 54 SetReward(1.0f); 55 Done(); 56 } 57 58 // Fell off platform 59 if (this.transform.position.y < 0) 60 { 61 SetReward(-1.0f); 62 Done(); 63 } 64 } 65 66 public override float[] Heuristic() 67 { 68 var action = new float[2]; 69 action[0] = Input.GetAxis("Horizontal"); 70 action[1] = Input.GetAxis("Vertical"); 71 return action; 72 } 73}
バージョンはUnity:2018.4.14f1、ml-agent:0.12.0です。
###追記
カメラの視野が動いてない(playerが動いても奥行きの位置が変わらない)ことがわかりました。予期した動きではないのでそこも修正したいところです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/06 09:55
2020/01/07 02:11