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

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

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

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

Unity

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

Q&A

解決済

1回答

3293閲覧

[Unity] キャラクター(オブジェクト)の向きをカメラが向いている方向に向かせたい

Iwan

総合スコア35

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/07/04 12:00

編集2021/07/04 12:11

■ 使用環境
Windows10
Unity 2019.4.22f
VisualStudio2017

■ 内容
ターゲット(キャラ)を注視点にカメラを回転させる処理を書いている中で
何かキー等(今回はパッドのR3)を押した時にカメラが向いている方(前方)に
キャラを向かせたい処理を実装しようとしているのですが上手くいかず
教えて頂きたく。

■ コード
>> このスクリプトを Main Camera にアタッチして使用しています

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ※一部省略※ public class CameraScript : MonoBehaviour {   private GameObject m_Chara; private bool inputPadL = false; private bool inputPadR = false;   private bool inputPadR3 = false; void Start() { m_Chara = GameObject.Find("Chara"); } // Update void Update() {     inputPadL = Input.GetButton("Pad_L");     inputPadR = Input.GetButton("Pad_R");     inputPadR3 = Input.GetButton("Pad_R3"); }   void LateUpdate() {     // キャラを注視点にカメラの回転操作     if (inputPadL){       transform.RotateAround(m_Chara.transform.position, Vector3.up, -1.0f);     }else if(inputPadR){       transform.RotateAround(m_Chara.transform.position, Vector3.up, 1.0f);     }     // カメラの角度をターゲットの方向に向かせる     if(inputPadR3){       transform.LookAt(m_Chara.transform.forward, Vector3.up);     }   } }

上記処理だとカメラを自由回転させて例えばキャラを横(左右)から見ている状態でRを押すとキャラがカメラに対して
背を向ける状態になります。
ただ、m_Chara.transform.forwardをそのまま使っているので当たり前なんですがカメラ全ての角度が反映され
例えばX軸に値が入っていてカメラが斜めから見ている状態だとキャラも少し傾いて表示されます。

単純にm_Chara.transform.forward.yのみ使えば解決するかと思ったのですが

var vector = new Vector3(0.0f, m_CharaCamera.transform.forward.y, 0.0f); this.transform.LookAt(vector, Vector3.up);

この方法だと上手くいきませんでした。
これを解決したいのですが方法がわからず詰まっています。

宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ただ、m_Chara.transform.forwardをそのまま使っているので当たり前なんですがカメラ全ての角度が反映され

例えばX軸に値が入っていてカメラが斜めから見ている状態だとキャラも少し傾いて表示されます。

単純にm_Chara.transform.forward.yのみ使えば解決するかと思ったのですが

逆です。
上下の向きを無視するのであれば、yの値を無視しなければなりません。

更に言えば、Transform.LookAtで指定するのは位置であって向きではありません

csharp

1 Vector3 dir = m_Chara.transform.forward; 2 dir.y = 0.0f; 3 this.transform.LookAt(this.transform.position + dir, Vector3.up);

こういうのは、自分の頭の中でシミュレートするか、もしそれができないのであれば、せっかくUnityを使っているのですからUnity上で実演してみてください。
そうすれば、すぐにわかることでしょう。

とりあえず、この場で3Dの説明をするのは難しいので、Zの値は無視して、2Dで説明します。

上か下かにあるというのは、相対座標のYの値が0以外である、ということになります。
上を向いている

ですので、相対座標のYの値を0にすれば、同じ高さになります。
同じ高さを向いている

投稿2021/07/05 00:14

編集2021/07/06 12:03
katsuko

総合スコア3491

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

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

Iwan

2021/07/06 08:36

返信が遅くなり失礼しました。 教えて頂いた方法で解決しました。ありがとうございます。 が、LookAtの第一引数は向きでは無く座標を設定すると言う事は理解したのですが なぜyの値を無視する事で正しい挙動になるのかが分からず教えて頂きたいのですが。
Iwan

2021/07/06 14:28

理解出来ました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問