弾を前に射出する動作の実装【ソース作成】 - acro-takahashi/Unity_Study_Kit GitHub Wiki
完成図
弾を前に射出する動作するように設定しよう
- 弾となるオブジェクトを作成する
ついでに何となく色を付けます。
※色を付けるには「マテリアル」という部品を作る必要があります。
マテリアルのインスペクター内の「アルベド」で色部分をクリックして任意の色を設定します。
色を設定すると以下のように反映されます。
弾となるオブジェクトにマテリアルをドラッグ&ドロップします。
色を付けた弾となるオブジェクトをAssetsフォルダ内にドラッグ&ドロップします。
※色が設定されたプレハブ化されたオブジェクトとなります。
C#スクリプトを作成します。
※スクリプト名はshotとします。
-
作成したC#スクリプトをダブルクリックで開示する
-
今回実装される内容をイメージする
特定のキーを押下した場合【条件分岐】にオブジェクトを生成する
⇒前に進むオブジェクトにする【オブジェクト動作】 -
生成するオブジェクトを格納する変数を用意する
図の下にコピペ用を用意してあります。
public GameObject prefab;
public GameObject prefab意味
public・・・インスペクター上で変更可能に出来る
GameObject・・・手順1で作成した弾のオブジェクトの型名
prefab・・・変数名(任意)
- 条件分岐を作成する
図の下にコピペ用を用意してあります。
今回はいつ押下されるか不明な内容で都度分岐する必要があるため、「Update」関数に組み込む
void Update()
{
if (Input.GetKeyDown(KeyCode.Z))
{
// 前方に発射
var pos = transform.position + transform.forward * 2 + transform.up * 1;
Instantiate(prefab, pos, transform.rotation);
}
//説明:Input.GetKeyDown(KeyCode.Z) →キーボードZ押したとき
// :var pos = transform.position + transform.forward * 2 + transform.up * 1; →前に2、上に1の座標
// :Instantiate(prefab, pos, transform.rotation); →プレハブをどこの座標に出力するか指定
}
以上でオブジェクトを生成する部分のソース作成は完了なので保存してUnityに戻ります。
※前に動くソースは後に作成
- 作成したソースに対して動作確認する
ヒエラルキー上のSphereは不要のため、削除します。
動作させるオブジェクトを適当に置きます。(前回の動作するオブジェクトがある場合はその方がわかりやすいかもしれません。)
下図はイチからオブジェクトを配置する場合
作成したスクリプトファイルを付けます。
フィールド変数にpublicを付けているとインスペクター上で細かな変更は可能となります。
手順1で作成したSphereのオブジェクトをセットします。
-
実行して動作確認する
Zキー押下時に以下のような動作となるはずです。
※ヒエラルキーに(clone)が追加されていることも特徴となります。 -
前に進むようにする
オブジェクトが生成されることと生成されたオブジェクトが前に動作することは別処理となります。
オブジェクトを生むオブジェクト、生まれたオブジェクトが前に動作する なので
生まれるオブジェクト側に前に動作する処理を追加する必要があります。
まずはC#スクリプトを作成します。
※スクリプト名はshotMoveとします。
今回は常に前に動作する必要があるため、「Update」関数に組み込む
図の下にコピペ用を用意してあります。
void Update()
{
transform.Translate(0f, 0f, 3f);
//説明:X,Y,Zのシグニチャで動作する。
// :今回は前(Z座標)に値(速度)を入れている
}
以上でオブジェクトを生成する部分のソース作成は完了なので保存してUnityに戻ります。
-
手順1で作成したオブジェクトに手順8で作成したC#スクリプトを追加する
Assets内で「Sphere」を選択し、Sphereの「インスペクター」内で「コンポーネントを追加」を選択して
shotMoveを探して追加する -
実行して動作確認する
Zキー押下時に以下のような動作となるはずです。