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

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

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

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

Q&A

解決済

1回答

531閲覧

プレイヤーを中心に円をえがくように移動する砲台をつくりたい

Yothuba

総合スコア16

Unity3D

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

0グッド

1クリップ

投稿2018/05/09 07:10

前提・実現したいこと

初心者で3Dシューティングゲームをつくっていて躓いたので質問させていただきます(初めてなのでぎこちないかもしれませんがよろしくお願いします)
プレイヤー(上下の移動はなし:前後左右のみ)を中心に一定の円を描くように移動できる砲台を作成したいのですが
いまいちやり方がわかりません。
マウスカーソルのおいてあるところがプレイヤーからみてどの向き(角度)にあるかで砲台をプレイヤーを中心に移動させたいのですが
なにかよい方法はありますでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

negitama

2018/05/09 10:31

プレイヤーとは別の物体がプレイヤーの周りをくるくる回るようなものなのか、それとも戦車の砲塔のようにプレイヤーに含まれる一部分だけが回るようにするものなのか、どちらでしょうか。
Yothuba

2018/05/09 17:53

質問に不備があり申し訳ありません。 プレイヤーとは完全に別の物体ということです。
guest

回答1

0

ベストアンサー

質問の意図を理解していなかったらすいません

特定のGameObject(プレイヤー)の周りを一定のスピードで回転するGameObjectを実現したいと判断して回答します
Transform.RotateAround(Vector3, Vector3, float) を使うと簡単に実現可能です

csharp

1void Update() 2{ 3 //これは擬似コードです | このコードが砲台にアタッチされている想定です 4 // player = プレイヤー 5 // Vector3.up = 回転軸 6 // rotationSpeed = 回転スピード 7 transform.RotateAround(player.transform.position, Vector3.up, rotationSpeed); 8}

投稿2018/05/09 09:57

MMashiro

総合スコア2378

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

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

Yothuba

2018/05/09 17:59

回答ありがとうございます。 私も最初にそのコードにたどりついたのですが、これですとただ、一定の速度でオブジェクトの周りを回転するだけになってしまっていまいち自分の用途とは噛み合いませんでした。 あくまでもオブジェクトの移動できる範囲をプレイヤーを中心とした円周上にしたいのであって、さらにオブジェクトの移動をマウスカーソルに一番近い、円周上のある一点に移動させたいのです
MMashiro

2018/05/10 00:28 編集

なるほどです。 今ちょっと手元に環境がないのでコードを提示できませんが、下記の考え方で実現可能だと思います ・マウスのスクリーン座標をワールド座標に変換 ・プレイヤーの座標からマウスポインタのワールド座標への角度を取得 ・プレイヤーの座標から上記角度に向かって一定距離(プレイヤーと砲台のスペース分)進ませる 上記内容でわからない所があればその部分を特筆して質問すると回答がつきやすいと思います
Yothuba

2018/05/10 01:56

回答ありがとうございます。私もすぐに実行可能な状況にいないので結果は後になりますが、可能になり次第試してみようと思います。それでなのですが、私自身にたような解決策を考えたのですが私の場合、砲台の中心座標をプレイヤーの中心座標と重なるようにずらして、その軸を中心に回転させればいけそうと考えたのですがUnityではオブジェクトの中心を意図的にずらすというのは可能なのでしょうか?
MMashiro

2018/05/10 02:27 編集

> Unityではオブジェクトの中心を意図的にずらす 解釈があっているかわかりませんが、下記の通りで実現可能です ・空のGameObjectを用意し、プレイヤーの子にセットする ・空のGameObjectの子に砲台のオブジェクトをセットする(子の位置をずらす) ・空のGameObjectごと回転させる 確かにこの方法でしたらマウスのワールド座標を元にLookAtすればそちらに砲台が向いてくれるような気がしますね
Yothuba

2018/05/10 03:35

なるほど。そのやり方がありましたね!とりあえず帰宅後に上記2つの手法を試してみようと思います。 BAをつけるのは試したあとでしようと思いますのでしばしおまちください。
Yothuba

2018/05/11 06:48

すいません BAつけてもコメントできるのですね汗 今回はご助力ありがとうございました。こういう場が大変有意義であることがわかりましたので今後なにか気になることがあったらじゃんじゃん質問していこうと思います!
Yothuba

2018/05/11 06:55

大事なことを書き忘れました。プログラムの方なのですが実はまだうまくいったとは言えない状態です。というのもマウス座標をワールド座標に変換する際にZ軸を固定しているせいか、テストでカーソルに追従するオブジェクトをつくったところ、(カメラが斜め上からみているので)奥にいけばいくほどオブジェクトが床から高く、手前にカーソルがくると床をすりぬけるようになってしまいました。解決策を考え中なので詰まったらまた質問しようと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問