ランスタのブログ

気になった事の実験や検証、Cinema4Dでのモデリングや使い方、Unityのゲームアプリ制作に関する記事を書いています。

【スポンサーリンク】

【Unity】iOSアプリ仕様の3Dジャンプアクションゲームを作ってみる。【開発】(その12)

【スポンサーリンク】

Unityでios用3Dジャンプアクションゲームアプリ制作【第12回】

 
今回はある場所にたどり着くとステージクリアにさせるスクリプトを書いていきます。
 
その前に、Playerが触れてクリアにさせる為の見えない(透明のオブジェクト)を生成しておきます。
 
まずメニューからGameObject→3D Object→Cubeをクリックして生成します。
名前を「ClearArea」に変更します。
 
そして位置のPositionXを10、PositionYを10、PositionZを96にします。
 
大きさのPositionXを10、PositionYを20、PositionZを1にします。
 
次に「ClearArea」オブジェクトのインスペクター(右側に表示されている情報)にMesh Rendererが付けられており、横にチェックが入っているので、チェックを外してClearAreaを見えないように透明化させます。
 
そしてMesh Rendererの上にBox Colliderが付けられているので、これのis Triggerの所のチェックを入れて下さい。
 
このis Triggerはチェックが入っていない場合、このオブジェクトは他のオブジェクトと衝突出来る状態になります。
 
今回は衝突を行う必要の無いオブジェクトなので、isTriggerの所にチェックを入れます。

f:id:Lanstar:20170528233154p:plain

 

次にステージをクリアした際にテキストを表示させる為の、テキストオブジェクトを生成します。
 
メニューからGameObject→UI→Textをクリックして生成します。
 
名前を「GameClearText」にして下さい。
 
重要な事があります。
GameObject→UIの中にあるText(テキスト)やButton(ボタン)オブジェクトなどはヒエラルキーにある「Canvas」オブジェクトの階層の中に入れておかないと画面上に表示されない、使用出来ないので注意して下さい。
 
「GameClearText」オブジェクトをクリックしてインスペクター(右側に表示された情報)にある、
PosXを0、PosYを0、PosZを0にします。
 
Widthを1000、Heightを1000にします。
 
次にText (Script)の下にある「New Text」の部分を「Game Clear!」に変更します。
 
そして下を見ていくとFont Sizeと言うのがありますので、数値を100にします。
 
さらに下を見るとAlignmentと言うのがあるので2つとも中間の物(左から2番目)をクリックして文字を中央揃えにさせます。
 
さらにさらに下を見るとColorの項目があり、横の色をクリックするとテキストの色を変更させる事が出来るので、青色に近い色に設定します。
 
以下のような設定になります。

f:id:Lanstar:20170528233222p:plain

 
そしてこの「GameClearText」オブジェクトをプレハブにさせます。
 
「GameClearText」オブジェクトをクリックしたまま、Assets内にドラック&ドロップして下さい。
 
名前の色が青色に変化していたらプレハブは完了していますので、プレハブが出来たらヒエラルキーにある「GameClearText」オブジェクトを削除して下さい。
 
ではスクリプトを生成します。
ProjectからCreateボタンをクリックしてC# Scriptをクリックし、生成します。
 
名前を「clear_area」にし、ダブルクリックしてMonoDevelopを開きます。
以下のコードを書いて下さい。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
using UnityEngine;
using System.Collections;
public class clear_area : MonoBehaviour {
public GameObject gamecleartext;
GameObject canvasObj;
// Use this for initialization
void Start () {
canvasObj = GameObject.Find("Canvas");
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider col){
if(col.gameObject.name == "Player"){
GameObject clearText = (GameObject)Instantiate(gamecleartext);
clearText.transform.SetParent(canvasObj.transform,false);
Time.timeScale = 0;
}
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーー
 
書いたらビルドしてUnity側に戻ります。
 
「ClearArea」オブジェクトに「clear_area」スクリプトをドラッグ&ドロップでスクリプトを付けて下さい。
 
次に「ClearArea」オブジェクトをクリックして、付けた「clear_area」スクリプトの下を確認すると、Gamecleartextの横の部分にNone (Game Object)と言うオブジェクトを入れれる場所があるので、Assets内にある「GameClearText」をクリックしたまま、そのNone (Game Object)の部分にドラッグ&ドロップして入れて下さい。
 
そして再生ボタンを押し、PlayerがClearAreaオブジェクトに触れるとクリアテキストが表示され、画面上が停止されているか確認して下さい。
 
確認出来たらコードの説明をします。
 
まず、
public GameObject gamecleartext;
GameObject canvasObj;
 
↑の変数の意味は、
プレハブにあるGameClearTextオブジェクトを出現させる為に入れて置く変数
public GameObject gamecleartext;
 
ヒエラルキーにあるCanvasの階層の中に入れる為に必要な変数
GameObject canvasObj;
 
Start()内にあるコードの意味は、
canvasObj に ヒエラルキーにあるCanvasオブジェクトの情報を入れる
canvasObj = GameObject.Find("Canvas");
 
次に出てくるコードの意味は、
 
何かのオブジェクトに触れたら実行
 
void OnTriggerEnter(Collider col){
 
もし 触れたオブジェクトの名前 が Playerなら
if (col.gameObject.name == "Player"){
 
clearTextに「GameClearText」オブジェクトを生成して入れる。
GameObject clearText = (GameObject)Instantiate(gamecleartext);
 
clearText(GameClearText)オブジェクトの階層をcanvasObj(Canvas)の中に入れる。
clearText.transform.SetParent(canvasObj.transform,false);
 
ゲームの進行を0にする(画面停止)
Time.timeScale = 0;
}
}
と言う意味です。
あと2回の記事くらいで完成となります、もう少し頑張っていきましょう!
 
では次回は、Playerが地面から落ちた時、もしくはEnemyオブジェクトに接触した時に、ゲームオーバーテキストの表示とリトライボタンを押す事によって再度同じシーンを読み込みステージ1からのスタートを行うやり方を書いていきます。
 

【スポンサーリンク】