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

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

ただいまの
回答率

90.48%

  • Unity3D

    1366questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 215

Yothuba

score 4

 前提・実現したいこと

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

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

エラーメッセージ

 該当のソースコード

ソースコード

 試したこと

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • negitama

    2018/05/09 19:31

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

    キャンセル

  • Yothuba

    2018/05/10 02:53

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

    キャンセル

回答 1

checkベストアンサー

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/10 02:59

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

    キャンセル

  • 2018/05/10 09:26 編集

    なるほどです。
    今ちょっと手元に環境がないのでコードを提示できませんが、下記の考え方で実現可能だと思います

    ・マウスのスクリーン座標をワールド座標に変換
    ・プレイヤーの座標からマウスポインタのワールド座標への角度を取得
    ・プレイヤーの座標から上記角度に向かって一定距離(プレイヤーと砲台のスペース分)進ませる

    上記内容でわからない所があればその部分を特筆して質問すると回答がつきやすいと思います

    キャンセル

  • 2018/05/10 10:56

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

    キャンセル

  • 2018/05/10 11:05 編集

    > Unityではオブジェクトの中心を意図的にずらす
    解釈があっているかわかりませんが、下記の通りで実現可能です

    ・空のGameObjectを用意し、プレイヤーの子にセットする
    ・空のGameObjectの子に砲台のオブジェクトをセットする(子の位置をずらす)
    ・空のGameObjectごと回転させる

    確かにこの方法でしたらマウスのワールド座標を元にLookAtすればそちらに砲台が向いてくれるような気がしますね

    キャンセル

  • 2018/05/10 12:35

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

    キャンセル

  • 2018/05/11 15:48

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

    キャンセル

  • 2018/05/11 15:55

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

    キャンセル

関連した質問

同じタグがついた質問を見る

  • Unity3D

    1366questions

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