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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

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

Unity

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

Q&A

解決済

1回答

2999閲覧

unity 2D Y軸をオブジェクトの方向に向かせたい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/05/19 00:09

こんにちは
タイトルにある通りY軸を正面としてあるオブジェクトに向かせたいと思っています。

サイトを見ながらやってみたのですがどうもうまくいきません。
参考にさせて頂いたサイト→オブジェクトのY軸のみをあるオブジェクトの方向に回転させる方法

上記のサイトを見ながら書いたコードがこちらです。

C#

1using UnityEngine; 2 3public class RotationTest : MonoBehaviour 4{ 5 private GameObject lookTarget; 6 7 void Start() 8 { 9 lookTarget = GameObject.CreatePrimitive(PrimitiveType.Sphere); 10 lookTarget.transform.position = new Vector3(0, 2f, 4.5f); 11 } 12 13 void Update() 14 { 15 if (lookTarget) 16 { 17 var direction = lookTarget.transform.position - transform.position; 18 direction.z = 0; 19 20 var lookRotation = Quaternion.LookRotation(direction, Vector3.forward); 21 transform.rotation = Quaternion.Lerp(transform.rotation, lookRotation, 0.1f); 22 } 23 } 24}

実行時こうなっているのが、、、
イメージ説明
こう回転してしまします。
イメージ説明

参考にしたサイトのコードを少々変えて、実験してみたのですがy軸が回転してしまい思うように動きません。
何がいけないでしょうか?
回答よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Quaternion.LookRotationはz軸を指定の方向に向ける関数なので、2D(xy平面)では使わないほうがいいです。
代わりにQuaternion.FromToRotationを使うといいと思います。

C#

1if (lookTarget) 2 { 3 Vector2 direction = lookTarget.transform.position - transform.position; 4 var lookRotation = Quaternion.FromToRotation(Vector3.up, direction); 5 transform.rotation = Quaternion.Lerp(transform.rotation, lookRotation, 0.1f); 6 }

それか2Dなら回転の自由度はz軸周りにしか無いので、Quaternionを使わずに以下のようにしたほうが分かりやすいかもしれません。

C#

1if (lookTarget) 2 { 3 Vector2 direction = lookTarget.transform.position - transform.position; 4 float angle = transform.eulerAngles.z; 5 float lookRotation = Vector2.SignedAngle(Vector2.up, direction); 6 transform.eulerAngles = new Vector3(0, 0, Mathf.LerpAngle(angle, lookRotation, 0.1f)); 7 }

投稿2021/05/19 15:39

f-rank

総合スコア132

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

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

退会済みユーザー

退会済みユーザー

2021/05/19 23:56

返信遅れました。回答ありがとうございます。 LookRotationはz軸を向ける関数なんですね。なるほどです。 上記のやり方でやってみたところ上手くいきました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問