Unity:Mario64を再現するプロジェクト

最近一部で話題の面白いものを見つけたので共有しておきます。

 

今回紹介するのはUnity上でMario64を再現してみようというもので、

かなり完成度高く再現されています。Urlはこちらになります。

 

ステージはまだ少ないですが、基本的な操作などは原作にかなり近いところまで作られています。(むしろこちらの方が操作が簡単に感じました。(^^;))

 

Unityを使うことでゲーム作成が簡単になった今こういった試みが多く行われれば世界がより一層楽しくなりそうですね。

 

以上UnityでMario64を再現するプロジェクトでした。

Unity入門:スクリプトからGameObjectを取得する

Unityにおいて、スクリプトからGameObjectを取得する方法です。

 

スクリプト上から取得するにはいくつか方法があるので、

それぞれ解説していきたいと思います。

 

まず初めにスクリプト上から呼び出すにはGameObject.Findを使います。

使い方は簡単でGameObject.Find(“ゲームオブジェクト名”);

でEditor上の名前からGameObjectを呼び出すことができます。

 

また他の一般的な方法としてはGameObject.FindWithTagを使う方法があります。

こちらの使い方は、呼び出したいObjectにEditor上でタブをつけてあげ、

GameObject.FindWithTag(“タグ名”);で呼び出すことができます。

 

またtagの場合は複数のGameObjectを配列で取得することができます。

GameObject.FindGameObjectsWithTag(“タグ名”);で同じタグが付いた複数のGameObjectを取得します。

 

この2つ、多くの人はGameObject.Find(“ゲームオブジェクト名”)でとると思いますが、

GameObject.FindWithTag(“タグ名”);で呼び出したほうが高速で呼び出すことができます。

ちょっとした小技ですので処理を早くしたい方は覚えておいたほうがいいです。

 

以上Unityにおいて、スクリプトからGameObjectを取得する方法でした。

 

 

Unity入門:コンポーネントをプログラムで追加

Unityにおいてコンポーネントをプログラムで追加する方法です。

 

Unityでコンポーネントは非常に便利なものです。

しかしながら時にこれが原因でエラーが起こることがよくあります。

 

よくあるのは複数のコンポーネントを使用しているGameObjectにおいて、

うっかり必要なものを付け忘れ、それがないためにエラーが起こることです。

 

これはコンポーネントが多くなれば多くなるほど付け忘れは多くなります。

 

その対策として必要なコンポーネントをスクリプト内でつけてあげることです。

これならば自分でわざわざつけることがないので付け忘れがなくなります。

 

コンポーネントをスクリプト側でアタッチするには、RequireComponentを使用します。

 

具体的な使い方は、

 

[RequireComponent (typeof (Rigidbody))]

public class PlayerScript : MonoBehaviour {
       void Update() {
            rigidbody.AddForce(Vector3.up);
       }
}

 

といった具合です。
上のコードの[RequireComponent (typeof (アタッチしたいコンポーネント))]

でコンポーネントをスクリプト上からアタッチすることができます。

 

コードでつけてあげているためEditor上でrigidbodyをつけてあげなくても、

下のようにrigidbodyのメソッドを使用することができます。簡単ですね。

 

またこの方法のもう1つの利点としては複数の人物で1つのゲームを作成するときに非常に有効です。

複数の場合コンポーネントの付け忘れは発見が非常に困難です。

 

ですのでこの方法で1番上にコードを書いてあげれば、他のメンバーに

そのコンポーネントが必要なことを明示してあげることができるためです。

 

以上のようにコンポーネントは簡単にスクリプトからアタッチすることができるので、

またミスも少なくなるのでどんどん活用していきたいですね。

 

以上、Unityにおいてコンポーネントをプログラムで追加する方法でした。

 

Unity:NGUIを無料で使う

UnityでNGUIを無料で使う方法です。

 

方法と言ってもFree版があることを知らない人への紹介であるので、

どちらかといったらFree Versionのお知らせといったほうが正しいかもしれません。

 

まずNGUIについて。

NGUIはUnityのGUIパーツを作成するAssetです。

 

UnityはGUI系が標準のままだと不便なので、

GUI系をNGUIで作成する方が多く存在します。

 

そのためNGUIはUnityでGUIを使うときにほぼ必須とも言われています。

 

ですがこのNGUI、Asset Store内で有料で販売されており、

最新版を購入するには$95かかります。

 

$95は個人ではかなり敷居が高いと思います。

そのためNGUIを使いたいが、標準のGUI系で我慢している人が多くいると思います。

 

そこで今回のタイトルNGUIを無料で使う方法を紹介したいと思います。

 

方法はいたって簡単でNGUIのHPに行き、

Free Versionをダウンロードし使うだけです。

 

Free Version

NGUI 2.7.0, the last of NGUI 2 cycle is now free and can be downloaded here.

 

こう書かれているところのhereからダウンロードできます。

 

このFree Version、最新のものではありませんがひとつ前の旧バージョン(NGUI 2.7)の商品そのものであり、

広告(ゲーム左上にあったロゴ)も無く実際にAssetStoreで販売していた物と同じものです

 

ただし幾つかの制限があり、

  • フォーラム等でのサポートなし
  • Unityfreeと同じようにインディのみ無料版の使用をしてください。
  • 2.7x系は3系のように合理化されていない

などがあります。

 

ですがこれ以外では同じものであるので、十分使えると思います。

 

以前の無料版ではロゴが表示されていたのですが、

今回からFree版といえど本物同様につかうことができます。

 

前から使ってみたかったけど購入はしたくないという方は、

これを機会にNGUIを導入するのもいいかもしれませんね。

 

以上、UnityでNGUIを無料で使う方法でした。

 

Unity入門:prefabをフォルダーから読み込む

Unityにおいてprefabをフォルダーから読み込む方法です。

 

通常Instantiate(Instantiateについてはこちらから)でゲームオブジェクトを作成する際、

生成したいprefabをpublicで指定してドラッグアンドドロップで登録してあげます。

 

しかしこの場合では生成したいものが多い場合だとかなりめんどくさいです。

 

ですので今回はフォルダーから名前を指定し、prefabをゲーム内に生成する

方法を解説したいと思います。ではさっそく解説に入ります。

 

やり方はとても簡単で、まずResourcesと名前を付けたフォルダーを用意します。

 

その中に任意の名前のフォルダーを作り、または直接使用したいprefabを移動します。

いろいろなprefabを直接移動するとごちゃごちゃしとても見にくいので、

用途別に別のフォルダーを作成し、その中に移動したほうがいいです。

 

以上で使用する準備は終了し、スクリプトにおいてprefabは

Resources.Load(“任意のフォルダー/prefab名”)で呼び出すことができます。

例としてのようにResources/person/heroパーソンフォルダーの中の

ヒーローのprefabを使用したい場合は、

Resources.Load(“person/hero”);といった具合で呼び出せます。

この方法のpublicで指定するやり方と比較したメリットとしては、

処理が早い、同じ命名規則のオブジェクトを簡単に呼び出せるなどがあります。

後者についてですが例えばEnemy0からEnemy10までの敵がいて、

それぞれ一体ずつ呼び出したい時には、

for(i=0;i<=10;i++){

        Resources.Load(“EnemyFolder/Enemy”+i);

}

といった具合に呼び出すことができます。こちらならばコードは1行でいいので

とても簡単です。

以上のようにResorces.Loadはとても便利なので、

どんどん使っていきたいですね。

以上、Unityにおいてprefabをフォルダーから読み込む方法でした。

Unity入門:マウスクリックを取得、座標を取得

Unityでマウスクリック及びマウスクリックした座標の取得方法です。

 

マウスのクリック判定は多くの場面で登場します。

ですので今日はコードの実装方法を解説していきたいと思います。

 

1:マウスボタンのイベント実装

 

Unityでは3つのマウスのクリック状態を取得することができます。3つというのは

1:マウスのボタンを押したとき、

2:マウスのボタンが押されているとき(主に押されたままの状態の判定)

3:マウスのボタンが押されなくなった時(つまりボタンが上に上がった時)

の3つです。

 

それぞれ上から順番に

Input.GetMouseButtonDown(num)

Input.GetMouseButton(num)

Input.GetMouseButtonUp(num)

で判別が可能です。

 

(num)についてはこちらも3種類あり、

0->左クリック、1->右クリック、2->ホイールクリック

となっています。

 

ここで1つ使い方の例をコードで書きたいと思います。

例として左クリックされた瞬間に何らかの処理をする時を考えます。

その場合以下のようなコードになります。

 

private void Update()
{
    if (Input.GetMouseButtonDown(0)){
             //何らかの処理
    }
}

 

上記のようなコードで左クリックされた瞬間になんらかの処理を起こすことができます。

とても簡単ですね。

 

2:マウスのクリック座標の取得

クリックされた座標を取得するには、

Input.mousePosition

を使います。

 

上記のコードを呼び出した際、返り値としてマウスの座標を(0,0)から(1,1)までの

画面座標を返してくれます。また型はVector2型ですので注意が必要です。

 

例えばクリックしたx座標がほしい場合はInput.mousePosition.xで取得できます

y座標も同様です。

 

以上がマウスのクリック座標の取得方法です。

 

以上のようなクリックされた時の判定、座標取得は、

PC向けゲームを作る際必ずと言っていいほど使う場面があるので覚えておきたいですね。

 

以上、Unityでマウスクリック及びマウスクリックした座標の取得方法でした。

Unity入門:Scriptにアクセスし、値を取得または変更する、関数を使用する。

UnityにおいてScriptにアクセスし、値を取得または変更する方法です。

 

Unityでは他のゲームにアタッチされているScriptの関数を呼び出すとき、

通常SendMessage (“メソッド名”,引数)を使います。

 

SendMessageはメソッドを呼び出す際とても簡単に実装できるため、

よく使われるところをみます。

 

しかしSendMessageには、

1:2つ以上の引数をもつメソッドを呼び出すことができない。

2:引数に0を渡した際エラーが出る。

(これは0は引数なしと判断され、引数が一致しないと判断されるためです。)

3:処理が重い

のようなデメリットがあります。

 

以上のようなことを考えた時、Scriptに直接アクセスし、

値の変更や取得、メソッドの使用をしたほうがいいことがわかります。

 

ではさっそく解説していきたいと思います。

 

今回は例としてゲームオブジェクトTagetObjectにアタッチされている、

TestScliptにアクセスする方法を考えます。

 

コードは以下のようになります。

public class test : MonoBehaviour {

public GameObject TargetObject;

public TestSclipt testsclipt;

void Start () {

testsclipt=TargetObject.GetComponent<TestSclipt> ();

testsclipt.testvalue=代入したい値;

取得し代入したい変数=testsclipt.testvalue;

testsclipt.TestMethod(引数1,引数2)
}

}

 

説明のため日本語で書かれた部分がありますが、

そこは任意の変数や値に直してください。

 

ここで注目したいのはGetComponent<スクリプト名> ()で、

アタッチされたスクリプトを取得することができる点です。

 

これを使い取得したスクリプト.~で変数を呼び出したり、

メソッドを呼び出すことができます。

 

以上のように特に手間をとらずスクリプトを取得することができるので、

SendMessageでなくこちらを使っていきたいですね。

 

以上、UnityにおいてScriptにアクセスし、値を取得または変更する方法でした。

Unity:Unity開発に関する50のTips 〜ベストプラクティス〜の紹介

Unityでの開発時に役に立つ50のTipsについてです。

 

原著は英語なのですが、No hack, no workさんのページで邦訳されています。

開発時に注意すべき点、心がける点などがよくまとまっていて一見の価値があります。

 

中には難しいものもありますが普段から心がけて、開発を進めたいですね。

短いですが紹介のため以上で終わりです。

 

Unityでの開発時に役に立つ50のTipsの紹介でした。