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

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

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

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

Q&A

1回答

699閲覧

2点間を波状に移動したい

Man_na

総合スコア6

Unity3D

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

0グッド

0クリップ

投稿2021/04/05 05:48

前提・実現したいこと

現在位置からゴールまでを直線移動する以下のような関数を作成し、拡張として進行する際に波状に移動する機能を追加したいと考えています。

進行方向(ゴール)がZ方向のみの場合、Mathf.Sin()をXに加えることで波を表現することができました。しかし進行方向がX+Z方向(斜め)やX方向(横)の場合、移動がXの波に引きずられるため挙動がおかしくなります。

現在位置からゴールまでの2点間を指定して綺麗に波状に移動する方法を知り、実現したいです。

該当のソースコード

void StraightMove(GameObject moveObject, GameObject goalPos, float moveSpeed) { moveObject.transform.position = Vector3.MoveTowards(moveObject.transform.position, goalPos.transform.position, moveSpeed * Time.deltaTime); }

試したこと

ゴールの位置のXにMathf.Sin()で作成した波を加え動かしました。

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

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

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

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

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

guest

回答1

0

ゴールの位置のXにMathf.Sin()で作成した波を加え動かしました。

moveObject.transform.rightを加えればいいです。
rightプロパティは、そのオブジェクトの前(Vector3(0, 0, 1))から見て右(Vector3(1, 0, 0))の方向を返します。
ただし、moveObject.transformの回転が変わればrightも変わるので、注意してください。

もしmoveObject.transformに依存せず、開始位置(仮にstartPosとする)から求めたければ、

cs

1 Vector3 right = Quaternion.LookRotation(goalPos - startPos) * Vector3.right;

でも求まります。多分。試してないので、あいからず。
(ただし、真上を向く可能性がある場合には、Quaternion.LookRotationの第二引数に適切なupベクトルを渡す必要があります。まぁ、なんとなくmoveObject.transform.upを渡してやればいい気がしますが)

投稿2021/04/05 23:14

katsuko

総合スコア3538

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問