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

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

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

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

Unity

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

Q&A

解決済

2回答

1135閲覧

絶対座標における向きではなく、そのオブジェクトの向きから、位置を取得したい。

nekonote

総合スコア23

C#

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

Unity

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

0グッド

2クリップ

投稿2019/07/25 08:07

あるオブジェクトの前方3m(Z軸方向に+3)に弾を出す ということをやっています。
しかし、この前方3m がうまくいきません。
「そのオブジェクトのZ方向」に+3されるのではなく、「絶対座標におけるZ方向」に+3された位置に弾が出てしまいます。つまりそのオブジェクトが右を向いてようが左をむいていようが、常に一定の方向に弾が出ます。

現在のコードは以下です。

Vector3 pPos = this.transform.position;//自機キャラの位置を取得 pPos.z=pPos.z + 3;//自機キャラのZ軸に+3 Instantiate(shot, pPos, Quaternion.identity); //上記で+3した位置に弾を作る

「そのオブジェクトのZ方向」を指定するにはどうしたらいいでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

transform.forward を使えば、姿勢を考慮した前方方向への移動を表現できるかと思います。

例えば以下のように弾の生成位置を求めるといいのかなと。

var bulletSpawnPos = transform.position + (transform.forward * 3.0);

投稿2019/07/25 08:44

tor4kichi

総合スコア763

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

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

nekonote

2019/07/25 10:38

それでうまくいきました! transform.forward を使えば何とかなりそうとは思ってたのですが、どうこねくりまわして使ってもだめでした。 そういう足し算をするとは思いませんでした。 ありがとうございます。
tor4kichi

2019/07/25 12:38

お役に立てたようでよかったです。 説教臭くなりますが、こねくり回すのはマズイです。知識(入力)が足りない状態では正しい結果(出力)を出すのは難しいです。 数学的に厳密な理解も出来るに越したことはないですが、まずはベクトル操作の意味を理解するところから始めていきましょう。 https://docs.unity3d.com/ja/current/Manual/UnderstandingVectorArithmetic.html https://docs.unity3d.com/ja/current/Manual/DirectionDistanceFromOneObjectToAnother.html
nekonote

2019/07/25 13:59

おお、なるほど。こういうのは基本として身につけておいたほうが良さそうですね。 勉強します<(_ _)>
guest

0

オブジェクトの向きを保持しておいて
向いている方向で条件分岐して処理するべきかと思います。

追記:
勝手に上下左右程度の向きを想像してました。
とりあえずオブジェクトがどこを向いているかの情報は持ちましょう。
xyzそれぞれの軸で正位置から何度ずれているかを持っておけば
3m先の位置は計算で求めることが出来るはずです

投稿2019/07/25 08:13

編集2019/07/25 08:30
hellomartha

総合スコア329

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

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

nekonote

2019/07/25 08:16

ありがとうございます。<(_ _)> 条件分岐ですか・・・ しかし、向きは360度、横だけでなく上下も加えればさらに多くの方向があるのですが、それにそれぞれ分岐を作るというのは現実的ではないように思えます。 どのようなやり方をすればよいのでしょうか?
nekonote

2019/07/25 13:57

ありがとうございます。 その場合は三角関数での処理になるのでしょうか。 そのへん全然弱いですが勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問