この記事ではオブジェクトを複製する方法を記載します。
ゲームで複製する必要のあるオブジェクトといえばシューティングゲームの弾や敵キャラクターなどですかね。
Unityでは複製する必要のあるオブジェクトをプレハブという形で管理します。
マウスをクリックするとブロックが落下してきます。
準備
早速作って行きましょう。
まず、準備として落下してくるブロックを受け止めるCubeを作って拡大して床にして、
そのままでは暗いのでDirectionalLightを設置しておきましょう。
MainCameraの位置を床が見える位置に移動させて準備は完了です。
だいたいこんな感じ↓でオッケーです。
プレハブの作成
次は複製するブロックを作ってプレハブにする作業です。
まず普通通りにGameObject→Cubeでブロックを作成します。
今回は落下するブロックを生成するのでRigidbodyコンポーネントをCubeに設定してあげましょう。
そして作成したCubeをプレハブにしてあげましょう。
プレハブの作成は作成したCubeをHierarchyパネルからProjectパネルにドラッグドロップしてください。
これだけでプレハブの作成は完了です。
追記:
当記事で説明に使っている画像はUnity3.5のものです。
最新版のUnity4ではProjectパネルは以下の様に変更されました。

HierarchyパネルのオブジェクトをプレハブにするにはHierarchyパネルからフォルダの中身の部分までドラッグドロップしてください。
当記事で説明に使っている画像はUnity3.5のものです。
最新版のUnity4ではProjectパネルは以下の様に変更されました。
HierarchyパネルのオブジェクトをプレハブにするにはHierarchyパネルからフォルダの中身の部分までドラッグドロップしてください。
ProjectパネルにCubeという名前のプレハブが作成されました。
このプレハブをHierarchyパネルかSceneパネルにドラッグドロップするだけでプレハブと同じオブジェクトが複製されます。
またプレハブのデータをいじると同じプレハブを元に複製したデータ全てに反映されます。
試しにプレハブに赤い色のMaterialを適用してみましょう。
すると先ほどプレハブから複製したオブエジェクト全ての色が変わったと思います。
(ちなみにプレハブに保存されている全ての値が複製したオブジェクトに適用されるわけではありません。例えはTransformのPosition,Rotationなどの値は変更しても複製したオブジェクトには反映されません。これはマテリアルなどのデータはクラスに格納されていて、座標データなどの値は構造体に格納されているためなのですが説明が長くなるのでここでは割愛します。ゆくゆくの記事で解説をしていきます)
空のゲームオブジェクトの作成
空のゲームオブジェクトを作ります。
このゲームオブジェクトでマウスクリックを検知してブロックを発生させ、ブロックの発生する座標を決定します。
空のゲームオブジェクをつくるにはメニューよりGameObject->CreateEmptyを選択します。
GameObjectという名前のオブジェクトが作られると思いますので、名前をBlockSpawnという名前に変更しましょう。
BlockSpawnを板の上の良い感じの場所に移動しておきましょう。
空のゲームオブジェクトの問題点としてSceneパネル上で見た時にどこに存在しているのかがよく分から無いという点があります。そこでアイコンを設定すると見やすくなります。
先ほど作成したBlockSpawnを選択しInspectorパネルの左上の立方体をクリックしましょう。するとSelectIconのポップアップが表示されますので、好きなIconを選択しましょう。
するとSceneパネル上でBlockSpawnのある位置に選択したIconが表示されます。
このIconはSceneパネルのみで有効ですのでゲームを実行した際には表示されません、あくまで編集時に見やすくするアイコンだと思ってください。
マウスクリックで複製するスクリプトの作成
マウスクリックのタイミングでブロックを複製するスクリプトを作成します。
Projectパネルを右クリックしてJavaScriptを作成して、BlockSpawnという名前にしましょう。
BlockSpawnをダブルクリックして編集しましょう。
スクリプトの中身は以下のようになります。
#pragma strict
var blockPrefab:GameObject;
function Start () {
}
function Update () {
if (Input.GetMouseButtonDown(0)) {
Instantiate(blockPrefab, transform.position, transform.rotation);
}
}
内容を解説しますとUpdateの中の一行目
if (Input.GetMouseButtonDown(0)) {では左クリックが押された瞬間を検出します。
Instantiate(blockPrefab, transform.position, transform.rotation);
Instantiate()という関数はプレハブを複製するための命令です。
それぞれの引数は
第一引数が複製するプレハブ
第二引数が複製する座標
第三引数が複製する角度
になっています。
blockPrefabの内容が設定されてないんじゃないかと思う方もいらっしゃるかと思いますが、そのとおりです。
追って説明するので待っていてくださいね。
次は、作成したスクリプトBlockSpawnを先ほど作成したゲームオブジェクトBlockSpawnに設定します。
ProjectパネルのBlockSpawnをHierarchyパネルのBlockSpawnにドラックドロップしてください。
これでスクリプトが設定されました。
次にHierarchyパネルのBlockSpawnを選択してください。
すると先ほどのblockPrefabの変数が表示されていますね!
そうUnity上で先ほど作成したスクリプトの変数の内容を設定すればいいのです!
ProjectパネルにあるCubeプレハブをドラッグしてBlockSpawnゲームオブジェクトの変数BlockPerfabへドロップしてください。
これでBlockSpawnスクリプト内のBlockPrefab変数が設定できました。
完成
ここまでの操作が上手くできていれば完成です!再生してみましょう!
マウス左クリックで赤いキューブが複製されるようになっていましたら完成です!
以上です。
<<他の記事を読む
[スポンサードリンク]
【スクリプトの最新記事】


コードは今時のバージョンではだめなのかな?それともコードのエラーですか?