発射+物理制御

PrefabからGameObjectを生成して物理シミュレーションで動かすサンプルプロジェクト


大砲のようなものを作成する。

レポートフォルダ → PrefabInstanceTest.unitypackage 参照※

※このパッケージで、砲台をWorld中心から移動するとバグる。

※URPではないのでマテリアルを設定しなおさないとRollaBallに組み込めない。

PrefabInstanceTest.unitypackageの作成手順:

Unity2020 を起動して create new Project から適当な名前でプロジェクトを作成する。

例) PrefabInstanceTest

プロジェクトに Resources フォルダを作成する。このフォルダに格納したPrefabはコードでインスタンス化してシーンに配置できる。


SampleScene に以下を追加

Plane

 Scale x 20 y 1 z 20

Sphere

調整なし ResourcesフォルダにDnDしてPrefabにする。その後、削除するか無効化する。

Cube

Sphere と同様

Cylinder

Position x 0 y 2 z 0

Scale x 1 y 2 z 1

Aim.cs スクリプト を作成して Cylinder にアタッチする。

 ※2021.7.21バグ修正対応版

弾の発射タイミングと連射の管理


Input.Getkeyを FixedUpdate で使用するとキー入力の取りこぼしが起こる問題に対処する。

※これは旧Inputシステムについてのコード

FixedUpdate は物理シミュレーションの実行タイミングで処理されるため、ゲームシーンのレンダリング(描画)タイミングとは異なるタイミングで実行される。

キー入力処理がゲームシーンに即座に反映れないと操作感が悪くなる。

一方で、弾を飛ばすためにRigidbodyを設定したgameObjectに物理シミュレーションで AddForce して力を加えて発射するコードは FixedUpdateで実行することになる。

Update と FixedUpdate 間でキー入力処理の連携が必要。

コードは上記のAim.csに組み込み済み。

参照:

Unityでキーボードからの入力を判定する

Unity:Rigidbodyコンポーネントを制御してキーの押し時間でジャンプ力を調整する

uGUIのパーツを一発生成

unity Draw directly to a Canvas from Script