主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Unity: 最初の一歩

                
tags: Unity Boo
Windows 7, 64bit



 近年に出てきたゲーム開発環境としてUnityなるものがある。WindowやLinux、Macなどのデスクトップ向けOSはもちろん、iOSやAndroidなどに向けたゲームをビルドできるソフトだ。モデルやBGMをそろえるストアも整理されており、無料のものから有料のものまでいろいろとゲーム素材を手に入れることができる。
 
 ゲームを作るなら、以前はマイクロソフトからXNA Frameworkなるものがダウンロードできた。あれはコードでいろいろ書いていくもので、アルゴリズムの理解などなかなかのレベルが要求されるものだった。
 
 Unityでゲームをつくるのはかなり楽である。ストアからキャラクタモデルで必要そうなものをもってきて、GUIに表示されているシーン上にそのモデルを配置して、GUIで物理演算をどうするか設定して、あとはイベント発生時の挙動をコードで書く。CGソフトとよく似ているように思う。
 『Unity』とはよく言ったもので。ソフト関連の界隈には適当に名前を付けられたようなものがあれば、機能をうまく名前で表したものもある。Unityは後者だろう。モデルデータ、プログラムコードなどを統合して一つのゲームをつくりあげる。モデル作成したけりゃ手慣れたソフトを、コード書きたきゃ自分のよく使うソフトを使えばいい。それらのパーツを一つに統合するのがUnityの仕事だ。
 
 Unityではコーディングに使える言語が3つある。C#,Boo,JavaScript(もどき)だ。どの言語を使おうかというときの指標の一つになるのがパフォーマンスだが、たいていはパフォーマンス上では三者間で違いはでないか、微々たるものだろう。以前に.NET上でC#とBooのパフォーマンスを比べたが違いは全然出なかった。BooのコンパイラはC#で書かれているからC#には劣るというのをどっかで見た気がするが、こんな理屈はおかしい。コンパイラがなにで書かれていようと、Monoではコードが共通言語(IL)にコンパイルされる。パフォーマンスを決めるのはコンパイラがどの言語で書かれているかでなく、コンパイルで出力される共通言語コードがどういう手順で目的処理を実行しているかである。
 
 
 
 Unityでなんでもいいからとりあえず一つ作ってみたいとなると、モデルはストアから無料のものを持って来ればいい。ほかに必要なのはコーディングに使うソフトである。テキストエディタでもすむが、予測入力があると助かるので統合開発環境があると楽。Unityのインストール時にMonoDevelopがオプションで選べる。ちょっと使ってみたがキーボード入力がUSタイプになっていて、どこから設定を変えるのか分からないので使うのをやめた。統合開発環境はここのところずっとSharpDevelopなるVisualStudioに酷似した.NET向けアプリケーションのものを使っている。Unityのためのコーディングでもこれを使うことにした。Unityの『Edit』→『Preferences』→『External Script Editor』とたどって行けば統合開発環境を設定できる。これの設定を変えると、Unity内のウィンドウでコードファイルを右クリックしたときに出るSync MonoDevelop Projectで設定された統合開発環境でコード編集を立ち上げられる。
 
 あとはBooでのコーディングに関してちょっと。UnityEngineのインポートと、MonoBehaviourの継承をしておき、クラスにはStartメソッドとUpdateメソッドを定義しておくこと。あとBooはPythonというよりC#っぽいところがある。変数や定数はクラスのなかで定義すること。
import UnityEngine

class CharacterScript (MonoBehaviour):
itemCount as int = 3
itemData as List = []
flgData as List = []
gameFlg as bool = true
playTime as int = 300


def Start ():
print "start"
SetupItem()
animation.Play("idle")
GameObject.Find("msg").guiText.text = ""
GameObject.Find("itemCount").guiText.material.color = Color.blue

def Update ():
if not gameFlg:
return
CheckTime()
CheckItemCount()
CheckEnd



Unityでのゲーム作りの初歩が学べるいい本だった。↑の本を読みつつ、ごく初歩的な迷路のサンプルを書き換えてみた。カーソルキーを押すことで球に直接力を加えられるゲームだった。せっかく物理エンジンを使っているので、カーソルキーで台を傾けて、重力で球が転がるようにした。

一つ気になったのはコードでの命名規則。Unityで書くコードはMonoで処理される。つまり命名規則は.NET Frameworkと共通。だからJavaScriptでコーディングしようと、関数やメソッドはPascalケースでやるべきだと思う。公式にあるサンプルではそうなっている。
http://unity3d.com/learn/tutorials/projects/stealth/alarm-lights

130924.jpg

            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。