質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

4328閲覧

Unityでカメラの正面を進行方向にする方法ではなく、進行方向にカメラを向ける方法を知りたい

arp

総合スコア11

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/01/06 08:32

編集2020/01/06 09:01

###前提、実現したいこと
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が動いても奥行きの位置が変わらない)ことがわかりました。予期した動きではないのでそこも修正したいところです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえず、プレイヤーの正面が進行方向とします
カメラの回転をプレイヤーの回転と同じにして、
カメラの位置をプレイヤーの後方10mにすれば良い感じだと思います

camera.Main.transform.position = player.transform.position + player.transform.Back * 10f; camera.Main.transform.rotation = player.transform.rotation;

投稿2020/01/06 09:37

izmktr

総合スコア2856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arp

2020/01/06 09:55

そのプログラムだとBackがないというエラーが出ました。また、「player.transform.Back * 10f」を消して実行してもplayerが球体でグルグル回転するため、カメラも一緒に回ってしまい思うような動きをしませんでした。 質問に情報が不足していてすみません。 あと、もしカメラを後方10mに配置できてもそれは一人称視点と言えるのでしょうか?
izmktr

2020/01/07 02:11

すいません、transform.backってないんですね、transform.Forward * -10.fかな というか、常に一人称視点でいいのなら、Playerの子にカメラを配置すればいいです (どっちかというと、Camera=Playerであり、手や銃みたいなオブジェをカメラの子として配置だと思いますが…)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問