はじめに
Unityを使ったゲームやアプリの開発にあたって,オブジェクトの生成は基本中の基本と言って過言ではありません.今回は事前に用意したプレハブを呼び出し,自在に配置するスクリプトについて解説します.
この記事を読むとスクリプトからのオブジェクト生成を自在に行えるようになります.
Unityをダウンロードしたばかりの超初心者の方から,スクリプトを理解し脱初心者を目指す方まで広く役立つ内容になっています.
オブジェクトを生成する基本スクリプト
それでは早速,スクリプトでオブジェクトを生成する基本となるコードを紹介します.
プレハブの用意
まずはRigidBodyコンポーネントを付けた適当なプレハブを用意してください.プレハブの作り方がわからない方は以下の記事をご覧ください.
【準備中】「プレハブの作り方」

ここではシンプルなcubeを用意しました.

生成スクリプトの作製
シーンに空のゲームオブジェクトを配置し,スクリプトを作成してアタッチします.
【準備中】「スクリプトをアタッチする」

スクリプトの内容は下記の通りです.
public class createObject : MonoBehaviour
{
public GameObject prefab;
private Vector3 vector = new Vector3(0, 1, 0);
void Start()
{
Instantiate(prefab, vector, Quaternion.identity);
}
}
プロジェクトウィンドウからアタッチしたスクリプトにプレハブを設定します.これで準備は完了です!

それでは再生ボタンを押してみましょう.真ん中に用意したプレハブが呼び出されました!
生成スクリプトの解説
それではスクリプトを見ていきましょう.
まずはpublicで入力を受け付ける状態にします
publicとprivateの違いが不安な方は以下の記事で解説しています!
【準備中】「c#におけるpublic,privateの違い」

そしてセットしたプレハブをinstantiateで生成しています.instantiateについて詳しく学びたい方は以下の記事をチェック!
【準備中】「instantiate」

あまりスクリプトに興味のない方は,instantiate(生成したいオブジェクト,座標,quaternion)で呼び出すことができると思っていただいても大丈夫です.
【応用編】マウスクリックでオブジェクトを生成する
それでは応用編にいきましょう.
先のスクリプトはゲームやアプリ開発を考えるとまだあまり実用的ではありません.
経験を積むにつれユーザーから入力を受け取り,好きな時に好きな位置にオブジェクトを呼び出したくなるでしょう.
そこでここでは応用例として,マウスでクリックした位置にオブジェクトを生成するスクリプトを考えてみましょう.

マウスの右クリックを検出し,カーソルの位置にオブジェクトを生成します.これを先のプログラムに組み合わせ,クリックするたびにオブジェクトを生成してみます.
public class createWithClicks : MonoBehaviour
{
public GameObject prefab;
private Vector3 vector = new Vector3(0, 1, 0);
void Start()
{
Instantiate(prefab, vector, Quaternion.identity);
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector3 spawnPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10));
Instantiate(prefab, spawnPosition, Quaternion.identity);
}
}
}
先の動画では見やすさのためにCubeの色を変え,床を設置しました.このスクリプトを合わせると同じ動きをします.だいぶ実用的になりましたね!
他の入力方法を試したい方は以下の記事を参考にスクリプトを書き換えてみてください.
【準備中】「Unityの入力」

このスクリプトを利用した簡単な積み木ゲームのようなものを用意してみました.ぜひアクセスして触ってみてください.余力のある方は手元のUnityでも簡単に再現できると思いますよ!
【準備中】「ゲーム」

他にもリジッドボディの重力を切るとこのように不思議な空間を作り出せます.これもアイデア次第で何かに使えそうですね!
