ランスタのブログ

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

【スポンサーリンク】

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

【スポンサーリンク】

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

iOS用アプリ仕様の3Dジャンプアクションゲームを作ってみる。(その1)の続きとなる記事になります。

 
では説明していきますー。
 
まずはjimenオブジェクトをクリックしてタグと言う物を新規で作成します。
 
jimenの右側に表示されたインスペクターからオブジュエクトの名前の下にあるTagと書かれた横のボタンにUntaggedと書かれている物をクリックし、一番下にあるAdd Tagをクリックして下さい。
 
そしたらTagsと書かれた場所の右に+のボタンがあるので押してタグを追加します。
するとTag0が新しく生成されたのでこの右側にあるNew Tagの名前を消して「wall」と言う名前に変更します。(全て小文字で入力して下さいね)

f:id:Lanstar:20170528170403p:plain

 
次に再度jimenオブジェクトをクリックして名前の下にあるTagの横にあるUntaggedをクリックすると新しく「wall」と言う名前のタグがあるのでこれをクリックして下さい。

f:id:Lanstar:20170528170439p:plain

 
タグを変えたのは、このwallと言う名前をスクリプト内で使用して地面に接触するとPlayerオブジェクトをジャンプさせる為に使用する為の物です。
 
Playerに対して付けるC#スクリプトを用意します。
 
このC#スクリプトの文の内容はPlayerを地面に接触する度に、ジャンプさせる文とキーボードまたはボタンをタッチ(クリック)した時に移動させる為の文(他..)を書きます。
 
ではProjectからCreateボタンを押してC# ScriptをクリックしてAssetsフォルダー内に生成し、名前を「player」にします。

f:id:Lanstar:20170528170348p:plain

 
そしてダブルクリックしてMonoDevelopを開きます。
 
まずはPlayerが地面に接触する度にジャンプする文を書いていきます。
では以下のコードを書いて下さい。
//ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
using UnityEngine;
using System.Collections;
public class player : MonoBehaviour {
int jumppower = 500;
Rigidbody rigid;
// Use this for initialization
void Start () {
rigid = GetComponent();
}
// Update is called once per frame
void Update () {
}
void OnCollisionEnter(Collision col){
if(col.gameObject.tag == "wall"){
rigid.AddForce(Vector3.up * jumppower);
}
}
}
//ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 
書いたらビルド(commandキー+B)してUnity側に戻ります。
そして、playerスクリプトを「Player」オブジェクトにドラッグ&ドロップして付けます。

f:id:Lanstar:20170528170512p:plain

 
その後、真ん中上にある再生ボタンを押してどうなるか確認してみて下さい。
何と言う事でしょう
 
Playerは地面に接触する度に一定の高さでジャンプを繰り返します!
出来ましたね!
 
では何故このジャンプが起きているのかコードを確認してみましょう。
まずPlayerには(その1)の時にRigidbodyを取り付けましたね。
 
PlayerをクリックしてRigidbodyにあるUse Gravityの部分を確認して下さい。
チェックが入っています。
 
これはPlayerオブジェクトに重力を与えると言う事になります。
 
なのでPlayerオブジェクトは再生ボタン開始時に重力がついて地面に向かって落ちていきます。
 
これはスクリプトにわざわざ書く必要がないのでかなり便利です!(さすがUnity!)
 
次はplayerスクリプトのコードを見てみます。
 
最初にある
 
int jumppower = 500;
 
↑のこの文はジャンプ力の設定です。
数値は500と設定していますが、この値を大きくするとさらにジャンプの高さが変わります。
 
小さくすると比例して小さいジャンプになります。
 
試しに数値を変えてみて下さい。
 
次はその下にある
 
Rigidbody rigid;
 
↑のこれはPlayerオブジェクトに取り付けたRigidbodyを格納する為の変数です。
 
では次の文の
 
rigid = GetComponent();
 
↑のこれはPlayerに取り付けたRigidbodyの情報を、用意した変数のrigidに格納して下さいと言う文です。
 
格納させる理由は後で説明します。
 
void OnCollisionEnter(Collision col)
 
↑の文(関数と言います)の意味はPlayerが他のオブジェクトに接触した時に起こす処理となります。
 
今回の場合Playerは地面に接触(地面はオブジェクトです)するので、地面に接触した時に地面の情報を受け取ります。
 
この地面の情報はcolの名前に格納される事になります。
 
用するに
他のオブジェクトに接触したら その接触したオブジェクトの情報がcolの変数に入る
 
OnCollisionEnter (Collision col)
と言う事になります。
 
そして次の文の意味は
 
もし 接触したオブジエクトのタグ名 が wall と言う名前なら
if (col.gameObject.tag == "wall"){
 
格納したPlayerのRgidbodyに、 力を加える Yに jumppowerの500の値を加える
rigid. AddForce (Vector3.up * jumppower);
}
と言う意味になります。
 
なのでjimenオブジェクトに設定したwallと言う名前のタグ名が一致していた為、ジャンプする条件が地面に接触する度に成立していると言う事になります。
 
次回はボタンを生成してボタンをタッチ(クリック)するとPlayerが前後左右に移動させる処理を行いたいと思います!
 
 

【スポンサーリンク】