2012年4月1日日曜日

2.5 関数

久しぶりの更新です。
ごめんなさい、リアルの世界での仕事が忙しくて書く暇ありませんでした。

言い訳を書いても仕方ないので、さっそく続きといきましょうか。



今回は、関数(かんすう)を扱います。

中学や高校の数学でも、「関数」という言葉は出てくるので、初めて聞いたという人はいないのではないでしょうか。
「二次関数」とか、覚えてますか?

覚えてなくても問題ないです。



プログラミングにおいて、関数はとても重要な概念です。
これは、C#に限らず、他の言語でも同じです。

関数は、前回までで説明してきた 型 と同じくらい、重要です。



では、関数とはなんでしょうか。
別の言葉に置き換えてみると・・・・

・仕事

・機能

・アクション

こんなところでしょうか。



実際のプログラムにおいて、関数の具体的な役割を列挙すると以下のようなものがあります。

・<メッセージボックス> を 【出す】

・<画像> を 【表示する】

・<動画> を 【再生する】

・<ブラウザ> を 【起動する】



ゲームプログラムを扱うブログなので、ゲームプログラミング的な言葉で、
もっと具体的にいうと、以下のようなものが関数です。

・<アイテム> を 【拾う】

・<城> に 【ワープする】

・<モンスター> に 【攻撃する】

・<タイトル画面> に 【戻る】



上の例は、ユーザー視点でみた関数の例ですが、プログラマ視点では以下のようなものもあります。


・<敵キャラクター> の <ヒットポイント> を 【取得する】

・<プレイヤー> の <名前> を 【変更する】

・<プレイヤー> の <状態> を <死亡> に 【変更する】




さて、いくつか例を出しましたが、 【この部分】 が、関数にあたる部分です。
どれも、動詞の形をとっています。
つまり、関数は、何かの動作をするのです。


【表示する】 【拾う】 【変更する】・・・
いろいろありますが、これらはすべて関数です。



そして、<この部分>が、値になります。
覚えているでしょうか?値。


・<アイテム> を 【拾う】

この例では、<アイテム> が 値で、【拾う】 が 関数になります。



ゲームでは、常に何かに関数が働いています。

ゲームの時間を進めたり、プレイヤーが歩いたり、NowLoading画面が起動したり、
ヒットポイントを減らしたり、レベルが上がったり、ファンファーレを鳴らしたり・・・

これらすべて、関数が仕事をしているのです。



ゲームプログラマは、ゲームの世界を、値と関数で構築していきます。
いわば、ゲームプログラムは値を関数の集合です。
関数がないと、画面に絵も出せませんし、文字すら出せません。



ただし!
値と関数だけでは、ゲームプログラムはできません。
足りない要素はまだまだあります。

これから、その要素を見ていきましょう。





ということで、今回はここまで。
とりあえず、関数とはなんぞや?という解説でした。

2012年3月7日水曜日

2.3 基本型

1週間以上も間をあけてしまった。
誰も見てないとはいえ、何をおいても、自分に示しがつかない。
いかんいかん。


では、前回までで、ひとまずは 型 についての基本事項については説明したので、
今回からは、ようやく具体的なプログラムっぽい話に入ります。

といっても、すぐにプログラムは書きません。
プログラムを書くための準備体操です。


あ、一応補足。(またかよ!)

なぜ、すぐにプログラムの話をしないで説明をダラダラしてるか、というのは
最初のほうで説明しましたが、それのさらに付け足しです。
(もういいって?ゴメンネ!)

プログラマが、非プログラマにスクリプトの説明をするときに、一番苦労する点。
それは、文法とか数学とかではなく、用語です。

どんな内容であれ、まずもって口頭で説明するときに、「型」だの「式」だの「関数」だの・・・
どうしてもプログラムの用語が必要です。
私が説明するのが下手糞なだけかもしれませんが、それにしても、です。
やはり、最低限の共通認識としての用語の知識が必要です。

なので、このブログでは、その説明から入っているのです。
つまり、ここに書いていることが頭に入っていれば、プログラマの説明していることが
なんとなーーーく、わかるようになるかと思います。
100%理解してくてもいいです。なんとなくでいいです。
なんとなくでもいいので、頭に入っていれば、プログラマとしても説明しやすいし、
これから具体的なプログラムを学んでいく上で、かなり有利です。



さてさて、では、本題。



型の解説で、剣とか属性とか、ゲームっぽい単語を出して分かりやすく(あくまで主観)説明しましたが、
いきなり型とか属性のプログラムを組むだなんて、そんなの100%無理です。
頭のいい悪いとかじゃなく、無理なのです。

それは、そのプログラムを作るための基本をまだ知らないからです。
文でも式でも専門用語でもなく、まずは、「基本型」を知らなければなりません。


「基本型」「組み込み型」とも言います。
プログラマからすれば、「組み込み型」のほうが好まれますが、
たぶん「基本型」のほうが分かりやすいので、そっちで書きます。



基本型は、その名のとおり、基本となる型です。
剣や属性のような、プログラマが作るものではなく、言語に最初からある型です。

つまり、何もしなくても、C#言語でいつでもどこでも利用できる型のことです。
この基本型を学びましょう。



まず基本型を列挙します。

・整数型

・浮動小数点型

・論理値型

・文字型

・文字列型


「あれ?いくつか足りない気が・・・・」
っていうプログラマからの突っ込みは無視。


この4つが、基本型です。
なにやらいきなり、専門用語風なカンジで腰が引けたかもしれませんが、心配いりません。
普段の生活で使っているものばかりです。
それを、仰々しく書いただけです。


【 整数型 】

この型の、具体的な値をいくつか書いてみます。



-10,

21

777

0

255

1000000

-97531



そう、ただの 数字 ですね。

プラスの数字とマイナスの数字がありますが、すべてひっくるめて整数です。

このように、整数を扱う型を 整数型 といいます。

厳密には、整数型をさらに細かく分けると、
「8ビット整数」「16ビット整数」「32ビット整数」「64ビット整数」がありますが、今は無視します。

とにかく、普段使う数字を扱う型が整数型です。



【浮動小数点型】

なにやら難しそうですが、例をあげます。



12.34

0.000001

-5.6

3.1415

2.0

-12345.0



そう、小数です。
小さい点が数字と数字の間にドットが見えますが、それが小数点です。
小学校でも習うと思うので(ですよね?)、あえて細かく説明する必要はないと思いますが。

2.0 や -12345.0 は、一見、整数に見えるかもしれませんが、これも浮動小数点の型の値です。

ドットが入っていれば、それは浮動小数点型の数字なのです。

なぜ「小数」ではなく「浮動小数」なのか?「浮動ってなに?」という疑問はあるかもしれませんが、
説明はしません。気になったら検索してもいいでしょう。
知らなくてもC#でプログラムは組めますので、気にしなくていいです。

ゲームでは、この浮動小数点型はそこら中で使用します。



【論理値型】

これもなにやら専門用語風ですが、すごくシンプルです。



true

false



このどちらかになります。

 「えっ」


別の言い方をすると

「はい または いいえ」

「Yes または No」

「真(しん) または 偽(ぎ)」

「正しい または 間違っている」

「男 または 女」

・・・という、二者択一、二つのうちのどちらか、そういう意味合いを持つ型です。

『フラグ』という言い方のほうが、ゲーム的には通じやすいかもしれません。

「あいつの死亡フラグが立った」とは、つまり「論理値型の値が true になった」ということです。


よくある、チェックボックスなども、プログラムの中身は論理値です。
つまり


 こっちは true 。つまりフラグが立っている。

 こっちは false。つまりフラグが寝ている。


このチェックボックスは、実は論理値をUIで表示しているだけなんですね。


プレイヤーが死んでいるか?生きているか? も論理値ですし、
敵の視界に入っているか?入っていないか? も論理値ですし、
ヒロインとデートできるまで好感度が高くなったか?それとも達していないか? も論理値です。

ゲームは論理値の塊なのです。




【文字型】

もうそのまま、文字です。



'あ'

'高'

'S'

'a'

'3'

'☆'




はい。文字です。

1文字で 文字型 になります。

そして、ご覧のとおり、文字の周りを 「 ' 」 という記号で囲っています。
これは、それが文字だよ、ということをプログラムに教えるためのC#のルールです。

この記号は「シングルクォーテーション」といいます。
一般的なキーボードとWindowsでは、Shiftキー+7キー で入力できます。
シングルクォーテーションで囲った1つの文字は、C#言語が文字型だと判断します。

'3' は数字ではなく、シングルクォーテーションで囲まれているので「3」という文字です。
数字としては認識されず、3 という文字です。
シングルクォーテーションがない場合は、数字としての「3」になります。

ややこしく思うかもしれませんが、そういうルールなのです。



【文字列型】

文字列とは、いくつかの文字が集まってできる型です。



"Hello, world!"

"Unityで学ぶC#プログラミング"

"あれはトムの朝ごはんですか?"

"いいえ、あれはデイジーです。"

"3"

"☆"

""



文字列は、上記のような、文字の集合で「文章」といったほうが通じるかもしれませんが、
厳密には文章ではなく、「0個以上の文字の集まり」を指します。

たとえば 「"3"」 は、文字ではなく、3 という文字列です。

文字とちがい「 " 」 という記号を使います。
これは「ダブルクォーテーション」といいます。「 ' 」を続けて2回ではなく「 " 」で1つの記号です。
Shiftキー+2キー で入力できます。

「0個以上の文字の集まり」が文字列なので

""

も文字です。つまり、空っぽの文字列ということです。


ゲームでは、プレイヤーの名前とか、NPCのセリフのために用いられます。

"あそこの洞窟に行けば100%死ぬから気をつけるのじゃ"

という具合ですね。





さて、これでC#の基本型の解説が終わりました。

もう一度列挙したものを書いておきましょう。



・整数型

・浮動小数点型

・論理値型

・文字型

・文字列型



とっても大切なので、覚えてください。
これがないとプログラムは組めません。





ちょっと長かったかな。
とりあえず今日はここまで。

ちょっとはプログラム講座っぽくなってきたかな。?

2012年2月26日日曜日

2.2 型をもっともっと詳しく

前回の「型をもっと詳しく」で、型の階層構造、型の親子関係について学びました。
今回は、親子関係についてさらに詳しくみていき、さらに、型についての新しい概念も紹介します。



親子関係は読んで字のごとく、親と子の関係を表しています。
子は親を引き継ぎます。そして成長して親を超えることで立派な個体となるのです。
「おいおい、いきなり何の話だ」
って感じですが、これはプログラミングでの型にも共通する考え方です。

つまり、型の子は、その親の機能を引き継ぐのです。ただし子は、本質的には親と同じです。
さて、これはどういうことでしょうか。詳しく解説しましょう。



前回で例にあげた、剣(剣型)をもう一度思い出してください。
剣型は、武器型の子です。逆に、武器型は剣型の親です。

これを、もっとシンプルな言葉に置き換えましょう。

「剣は武器です。」

・・・・・・当たり前ですね。
ただし

「武器は剣です。」

・・・・・・なんだか違和感があります。


なぜかというと、武器は、剣のほかに銃も弓もハンマーも、すべてを含んでいるからです。
逆に、剣は武器の一部であり、武器から派生したものの1つであるため、
「剣は武器です」は自然になりたつのです。

派生、つまり、剣は武器を引き継いだ型であるということができます。
そして、引き継いでいるため、剣は武器であり、なおかつ、武器以上の何かを備えています。
たとえば、切る(斬る)、刺す、細長い、錆びるなどの、剣ならではの機能や特徴があります。

ただし、機能や特徴を付け加えられても、剣は、本質的には武器です。
どれだけ形を変えて色を変えて機能を付け加えても、武器ということに変わりはありません。


これが、親子関係です。

子は親から派生し、親にはない機能を有することができます。
ただし、派生元の親の存在が消えることはなく、あくまで、親の機能拡張にすぎません。
この、親から派生させて子という新しい型を作ることを、「継承」と呼びます。

親子関係は、そのまま「継承関係」と言うことができます。
そして、親から見た子は「継承先(の型)」、子から見た親は「継承元(の型)」となります。


剣のほかに、いくつか例を出してみましょう。


「スライム型の継承元はモンスター型である」
「職業型の継承先には、戦士型や魔法使い型などがある」
「手乗りドラゴンの親はドラゴン、その親はモンスター、その親は生物である」


例の3つ目のように、親子関係はいくつも連鎖します。
ただし、子孫関係とはあまりいいません。
あくまで、型が別の型に派生して、その2つを親子関係、継承関係というだけで、
どのくらいの派生が行われたかはあまり気にしません。


さて、実際のゲーム開発ではこの「継承」を頻繁に行います。
最初にモンスター型を実装して、それを継承して雑魚モンスターやボスモンスターなどを実装したり、
武器型を実装して、剣を実装して、さらにそれを継承して両手剣や巨大剣などを実装したり・・・・・・
などなど、あらゆるシーンで継承が用いられます。

Unityによるゲーム開発でも、型の継承は大切な概念です。
ですので、ここで学んだ知識はかならず、Unityでスクリプトを書くときに役立ちますし、
今はまだ具体的なスクリプト・プログラムは書きませんが、この知識があればすんなり見につくでしょう。



ここままで、型と、型の継承については学びました。
では、前回の例で出た「毒属性の剣」はどうでしょうか。

ここまで学んだ知識を用いると、剣を継承して、毒属性の剣をつくる、ということになります。


しかし、残念。
それは間違いです。



たとえば、毒属性は剣のほかにも使い道はありそうです。
毒属性の盾もあれば、毒属性の弾丸もりますし、毒属性の魔法もあるでしょう。

剣を実装して、それを継承して毒属性の剣を実装しても、ほかに毒属性の盾も弾丸も魔法も
実装しなければなりません。
その場合、継承するたびに、毒属性のプログラムを書き直さなければなりません。
これでは、いつまでたってもプログラマは家に帰ることができないでしょう。


これで、継承だけでは解決しないということがわかりました。
継承は万能のツールではないのです。

では、「毒属性の剣」はどうやって実装したらいいのでしょう?
その解決策として、型の継承ではなく、型の組み合わせを用います。

型はバラバラに存在していますが、それらの機能を組み合わせて別の型にすることができます。
「毒属性の剣」では、「毒属性」と「剣」を組み合わせるだけでできます。
こうすると、毒属性だけを用意しておけば、弾丸と組み合わせるだけで「毒属性の弾丸」ができますし、
魔法と組み合わせれば「毒属性の魔法」も作ることができます。

毒属性のほかに回復属性を作れば、同じ要領で「回復属性の弾丸」や「回復属性の魔法」もすぐに実装できますね。


さらに、組み合わせはいくつでもできるため「回復属性と魔力強化属性の杖」や「光属性と闇属性の指輪」など、
型のバリエーションがいくらでも増やすことができます。

これをプログラムで実現する場合、「包含」「多重継承」などが用いられます。
ことばが2つ出てきましたが、これは、その組み合わせをどう実装するかの方法によって左右されるからです。
いつ、どういうときに、包含と(多重)継承を用いるかについては、経験がものをいいます。
どちらでも実装できる場合もあるし、どちらかでしか実装できない場合もあります。
また、継承でも包含でもいい場合もあります。

このあたりについては、実際にプログラムを書いて経験しないとわからないので、
これ以上詳しい解説は避けます。
今説明しても、逆に混乱するだけだからです。


大事なのは「継承」「多重継承」「包含」という、型についての関係性を理解することです。
この概念を理解できているか否かで、プログラムを書くときの考え方が変わってきます。


いくつか例にも出したとおり、プログラムでは継承や包含が常に出てきます。
Unityでゲームプログラミングをするときにも、もちろんこれらの知識はあったほうが断然有利です。
なので、今は説明ばかりでつまらないかもしれませんが、是非ともこの知識を身につけてください。

最初に説明したとおり、C#は型の集合です。
これは、型についての上記の関係(継承、多重継承、包含)の集合であるとも言えます。
それほど、型という概念は重要なので、一番最初に紹介しました。

これから先、いくつも用語や概念が出てきますが、どれも型の考えが関わってきまし、
型なしではC#でプログラムは書けませんし、Unityでゲーム開発もできません。




さて、ちょっと駆け足気味でしたが、今回で型についての説明はだいたい終了です。
お疲れ様でした。

次回からは、この型の考えをベースとした項目を勉強します。
型についてまだちょっと自身がない場合は、これまでの型の解説をもう一度読み直してください。


では。

2012年2月25日土曜日

2.1 型をもっと詳しく

前回の「型と値」で、C#での重要な要素である「型」と「値」を大雑把に解説しました。
型って何だっけ?値って何だっけ?という場合は、もう一度読み返しましょう。
今回は、前回の続きで、さらに詳しく型について扱います。



型と値の関係はわかりました。
では、型と型ではどういった関係があるでしょうか。



たとえば、「毒属性の剣」を考えましょう。

「毒属性の剣」をばらすと、「毒属性」と「剣」。
そのままですね。

わかりやすく、「剣」からいきましょうか。
剣は、大きく分けて短剣と長剣があります。
この2つはどちらも型であることがわかるでしょうか。
たとえば、短剣型の値としては、ダガーやトレンチナイフなどがあります。
長剣型の値としては、クレイモアやバスターソードなどがありますね。

別の視点からいきましょう。
剣は武器の一部です。
武器といえば他に、銃や弓やスタンガンなど、たくさんの種類があります。
銃も弓も、型であることがわかるでしょうか。剣の例と同じ要領です。
そして、武器も型です。もうなんとなくわかるようになってきたでしょうか。

さて、これをまとめると・・・

「【武器型】の一部に【剣型】や【銃型】がある」
「【剣型】の一部に【長剣型】や【短剣型】がある」

となります。

図にしてみると・・・




こんな感じでしょうか。



さて、図から読み取れることはすごく単純です。
つまり、型は階層構造を持っている、ということです。

上の図は、すごーーーく単純に、いろいろ要素を削ったものになっています。
たとえば、武器型の上には、さらにアイテム型とかがあるでしょう。
逆に、ハンドガン型には、リボルバー型とかオートマチック型などがあるでしょう。
そして、リボルバー型の値として、コルトパイソンやニューナンブといったものがあるイメージですね。


この階層構造はとても重要です。
なんせ、プログラムのコードにそのまま現れるからです。
現時点で、具体的なプログラムは書きませんが、後できっと、この概念が頭に浮かぶでしょう。




さて、では「毒属性の剣」の話から始まったので、もう片方の「毒属性」を見てみましょう。

もうお分かりでしょうが、毒属性は属性型の一部です。
他には回復属性や炎耐久属性や高速移動属性など、いろんな属性がたくさんあるでしょう。
さらにいうと、属性型は、強化系属性型、回復系属性型、状態異常属性型のような直系の属性があるはずです。
毒属性はおそらく、状態異常属性型の下にある型だと予想されます。

ここで「状態異常属性型のにある型」と書きました。
図の階層構造は、上が大雑把な分類、下に行くほど具体的な分類になっているのがわかります。
別の言い方をすると、親の型から子供の型に行くほど具体的になり、機能が限定的になっていま
す。


このことから、型には親子関係があると言うことが出来ます。



たとえば、毒属性型の親は状態異常属性型であり、さらにその親は属性型である、と言えるでしょう。
剣の例でも同じです。
エクスカリバーという値の型は長剣型であり、長剣型の親は剣型、その親は武器型、さらにその親はアイテム型でしょうか。





さて、結構長くなってきました。
考えながら書いてるので、見返すと結構量があって自分でもビックリ。
ちゃんと読んで理解できているでしょうか?

書き方があやふやで、よくわからん、という人は、「よくわからん状態」が「なんとなくわかった」状態になれば
今はそれでも十分です。


ここまで説明したもので、

「型と値」

「型と型の関係」

「型の階層構造・親子関係」

これが頭に入っていれば、とりあえずクリアです。
図も頭に浮かんでいれば、全然問題ないです。
好きなゲームを例に、「アレとアレが型で、親子関係になってる・・・かな?」
など、適当に想像できるようになっていれば、もう100点満点です。




今日はここまでです。
長かった。お疲れ様でした。

次回も、型を引き続き勉強していきます。
「毒属性の剣」には、また登場してもらいましょう。
毒属性と剣は両方型ですが、どうやら親子関係ではなさそうです。
では、別の関係性があるのでしょうか?
その辺りを詳しく見てみましょう。

では。

2012年2月24日金曜日

2.1 型と値

型と値。


本職プログラマの方々からしたら「いきなり型かよ!」っていう感じでしょう。
そんなツッコミは無視します。



まずは「型」。かた。

C#でプログラムを組むにあたって、「型」の概念はとっても重要です。
極端なはなし、

C# イコール 「型」の集まり

です。


だったらまずは、「型だろう!」ということで、やります。「型」



そして「値」。あたい。

型とすごく密接な関係にあるものです。
これも、プログラミングするにあたって切っても切り離せないものです。





どちらも、C#特有のものではなく、一般的なプログラミング言語によくある概念です。
ですがまあ、他の言語のことを気にしても仕方ないので、違いとか細かい話はスルーします。


では、型と値について、まずは具体例を出しましょう。
余り深く考えず、ざっとでいいので見てみてください。


アイテム 薬草、毒消しの粉、謎のカギ、王様からの手紙、高そうな石
装備 鎧、靴、髪飾り、ネコ耳
武器 こんぼう、エクスカリバー、マシンガン、バールのようなもの
性別 男、女
赤、緑、青、黒、白
ゲーム機 3DS、PS VITA、PlayStation3、Xbox360、iPhone
DCCツール Maya、XSI、3dsMax、MotionBuilder、Lightwave、六角大王
整数 -20, -3000, 0, 32, 1024
座標 ( 0, 0, 0 )、( 20.32, 432.1, 9.0 )、( -34.0, 0.02, -0.621 )
プレイヤーの状態 待機、歩き、走り、攻撃、防御、ジャンプ
光源の種類 平行光源、点光源、スポット光源
Windowsのコントロール(UI) ボタン、チェックボックス、スクロールバー、テキストボックス


・・・とまあ、本当に適当に書きました。


どうでしょう、なんとなくわかるでしょうか。
この表から、型と値の関係性が見えてきたでしょうか。


型は・・・、いわゆる雛形とか、テンプレートとか、種類とか、そういう概念で・・・

値は・・・、具体的な物とか、形とか、バリエーションとか、そういう概念で・・・

というような、そんあニュアンスで捉えられていれば、ひとまずクリアです。



型は、どれもバラバラで多種多様です。

性別のように、(普通は)男か女の2種類しかないもの、
整数のように、無限にあるもの、
プレイヤーの状態のように、"物"ではなく"事"を表すものなどなど、
たくさんありますが、どれも型です。


そして値は、型の具体的な存在を表すモノです。



逆に考えてみてもいいでしょう。


「 【男】という値 」 は 「 【性別】という型 」 に 属している
「 【エクスカリバー】という値 」 は 「 【武器】という型 」 に 属している
「 【ジャンプ】という値 」 は 「 【プレイヤーの状態】という型 」 に 属している


ちなみに、「アイテム型」「性別型」「整数型」のように、型の場合は「○○型」とよく表現します。
そう書かれていない場合は、値を意味します。
なので、以下のような言い回しになります。

「アイテム型の薬草(という値)」
「性別型の女(という値)」
「整数型の256(という値)」




どうでしょう。
型と値の、すごく大雑把な概念を説明しました。
基本的にはこれだけです。これだけで、ゲームの大枠は説明できます。


たとえば、典型的なRPGを考えましょう。

プレイヤーとその仲間達は、【キャラクター型の値】です。
フィールドにうじゃうじゃいるスライムは、【敵型の値】です。
旅の途中で手に入る薬草や扉の鍵は、【アイテム型の値】です。


プログラマは、型をまず作り、それを元に値を作ります。
その値をいろいろ制御して、ゲームを動かすのです。
RPGの例で言えば、まずは【アイテム型】を作って、次に、それを元に【薬草(という値)】を作ります。

さらに細かい話で言うと、レベル1とかレベル30などの、この「1」とか「30」は、
整数(数字)という型の値であり、その値を使うためには、
まずは【整数】という概念(つまり型)を最初に用意する必要があります。



さぁ、型と値が、どれだけ重要なのかがわかったでしょうか。
いきなり詰め込みすぎた感はありますが、それだけ重要ということです。

理解できたかどうか、自信がないなら、是非最初から読み直してください。
すごく大切で、この概念を理解したことを前提で、次に進みます。



今日はここまで。
まだまだ序盤ですよー。

2012年2月22日水曜日

2.0 プログラムを書く前に

Unityのインストール、無事に出来ましたでしょうか。
無事に出来た人はお疲れ様でした。
無事じゃない人はもうちょっとがんばりましょう。

まあ、インストールしていなくても問題ないです。
前回の最後で書いたとおり、しばらく使わないので。


Unityも使わない、すぐにプログラムも書かない。
「じゃあ何するんだよ!」
って感じですが、簡単に言うとお勉強です。



たとえば、下のプログラムは、Unityに最初から入っているキャラクターを動かすプログラムですが・・・

function ApplyJumping ()
{
 // Prevent jumping too fast after each other
 if (lastJumpTime + jumpRepeatTime > Time.time)
  return;

 if (IsGrounded()) {
  // Jump
  // - Only when pressing the button down
  // - With a timeout so you can press the button slightly before landing  
  if (canJump && Time.time < lastJumpButtonTime + jumpTimeout) {
   verticalSpeed = CalculateJumpVerticalSpeed (jumpHeight);
   SendMessage("DidJump", SendMessageOptions.DontRequireReceiver);
  }
 }
}


function ApplyGravity ()
{
 if (isControllable) // don't move player at all if not controllable.
 {
  // Apply gravity
  var jumpButton = Input.GetButton("Jump");
  
  
  // When we reach the apex of the jump we send out a message
  if (jumping && !jumpingReachedApex && verticalSpeed <= 0.0)
  {
   jumpingReachedApex = true;
   SendMessage("DidJumpReachApex", SendMessageOptions.DontRequireReceiver);
  }
 
  if (IsGrounded ())
   verticalSpeed = 0.0;
  else
   verticalSpeed -= gravity * Time.deltaTime;
 }
}


「1行目ではApplyJumingという関数を定義しています。」
「13行目ではゲームオブジェクトに"DidJump"メッセージを送信しています。」
「34行目からは、着地しているかどうかで、垂直の移動速度の処理が分岐しています」


・・・なんて書いても、なんのこっちゃって感じですね。
英単語の意味から、なんとなーく、分かるかもしれません。
しかし、なんとなくで読めても、なんとなくで書けるものではありません。


中には、上記のようにプログラムをまず見せてから、部分的に書き換えて
「ほら、ここをこうやって変更すると、キャラクターの動きが変わりましたね!」
「つまり、この処理は○○という機能を表しているのがわかりますね」
みたいな教え方をする人とか本とか、あると思います。


が、そういうのは、ある程度プログラムの知識がある人が、ある程度プログラムの知識を持ってる人に
教えるようなスタイルじゃないかなーと、個人的には思います。
なので、そういうスタイルはとりませぬ。


かといって、ダラダラと理論ばっかり並べ立てたり、どうでもいい仕様とか書き綴るのは
たぶん退屈です。書いてるほうも退屈です。

そうならないように、注意しつつ、なるべく
「これはゲーム開発のためにやってるんだよ」
みたいなのを意識できるような風に書いていこうと思います。



さてそろそろ、「わかったからとっとと書け。つまらん。ラノベか」ってカンジですね。
次からは本当に、C#のお勉強です。


今日はここまで。
なかなか難しいなぁ。

1.0 Unityのインストール

Unityのインストール。

たぶん、いろんなところで同じようなモノが書かれていると思う。
出版物にも同じようなモノが書かれていると思う。


けどやる。


0.はじめに

無料版です。
有料版を入れてもいいですが、たぶん、有料版買おうとかしてる人は、こんなところ見てないでしょう。


1.Unityのダウンロード

http://unity3d.com/japan/

「無料ダウンロードする」 ボタンを押してダウンロードを開始します。




2.インストール


適当に [ Next> ] とか [ I Agree ] とか [ Install ] とか を押していきます。


しばらくすると、イントールが完了します。




Run Unity (バージョン) とかか書いてるので、チェックボックスが入ってるのを確認して、

[ Finish ] ボタンを押しましょう。

すると『Unity』が起動します。



3.起動



画面の構成など細かいとこが違うかもしれませんが、気にしないでください。
上のスクリーンショットと同じようにウィンドウを移動したりリサイズしたり、しなくていいです。



4.ためしに、スクリプトを作ってみる

いきなりですが。
ものは試しなので、とりあえず手を動かしましょう。


Unityウィンドウのなかに、Projectという名前のついたサブウィンドウ(ビュー)があると思います。
その下にある小さい Create をクリックしてみましょう。




すると、メニューが出てきます。
その中にある C# Script をクリックします。

「NewBehaviourScript」というものが、Projectビューに出てきました。
これが スクリプトファイル です。

作った直後は、名前が選択状態になっていますが、無視して別のところをクリックするか、
Enterキーをおして、とりあえず名前はそのままにしましょう。


そして、そのファイルを開きます。
もう一度Enterキーを押すか、左ダブルクリックしてください。

しばらくまつと、新しいウィンドウが起動します。
5~15秒くらいかかるので、素直に待ちましょう。焦って何度もダブルクリックしないように。
しても壊れたりしませんが。




これが、スクリプトエディタ『Mono Develop』です。
これ以外にも、いろんなエディタを利用可能ですが、とくに何も設定しなければコイツが起動するはずです。

画面にズラズラと文字が書かれていますが、それが 【C#プログラム】 です。
using とか class とか Update() とか、英語が書かれていますが、今は気にしなくていいです。
理解する必要もないですし、これをみて「ワケワカラン」となって焦らなくてもいいです。

これを理解して、スクリプト(プログラム)を書いて、ゲームを作ることが目的なので、
今分からなくても全然良いです。
むしろわかるなら、もうここから先は読む必要がないでしょう。インストールお疲れ様でした。



さて、ここまで、Unityをインストールし、ためしにスクリプトファイルを作ってみました。

では、とりあえず、UnityとMonoDevelopは閉じましょう。しばらく使いません。


















えっ

















だって、今はまだ、C#スクリプト書けないのだから当然です。
これから頑張っていきましょう。

なるべく、「ゲーム開発のためにやってるんだ!」的なことを意識できるような記事を投稿していこうと思います。

ちゃんとあとで、Unityに戻ってくるので、アンインストールとかしないでね。



では、今日はここまで。

2012年2月21日火曜日

0.0 まずはじめに

こんにちは。

昨日の初投稿にて、簡単な自己紹介と、このブログの主旨は説明しました。

早速、本題の「Unityで学ぶC#プログラミング」を始めようと思います。





・・・




と、その前に。


補足というか、言い訳というか。


すこし繰り返しになりますが、この「C#プログラミング」の対象は、
非プログラマ、つまり、普段プログラミングをしない人や、プログラミング初心者です。

「仕事でC++を使ってるけど~」とか「ちょっと前にC#やってた」とか言う人は、
もしかしたら合わないかもしれません。

というのも、私なりに、【プログラミング完全初心者のために】を考えながら書くのですが、
あえて、説明を省いたり、軽く流したり、もしかしたらウソをついたりするかもしれないからです。


ですが、もちろん悪意はなく、あくまで、私なりに考えた方法でブログ記事を書くだけなので、
後々、立ち返ってみて、説明すべきときに説明をして

「あそこで微妙な言い方をしていたのは、このためだったのか」
「このプログラムのこの部分、何のために書いてたのかわからなかったけど、そういうことか」

というような流れになればなぁと考えています。


なので、C#経験者はもちろん、他のプログラミング言語経験者や、ゲーム開発者から見れば

「いや、それ違うでしょ・・・なに間違ったこと教えてるの」

とか思うかもしれません。


ですが、たとえば [ C# 入門 ] みたいな単語でググって、C#プログラミング入門サイトを見ても、
おそらくプログラミング未経験者からしたら

「これ、ゲームのどこに役立つんだ?

となると思います。
実際、私が始めてプログラミングを勉強したときは、C言語を書いてて同じことを思いました。
まぁ、そのときは”ゲームを作りたい”ではなく、”プログラミングがしたい”という考えだったので、
あまり気にすることなく、適当に勉強していました。

逆に、ゲームを作ってみたいからプログラミングの勉強しよう!という意思で
いきなり言語入門サイトに首を突っ込んでも、普通は挫折すると思います。

そうならないような、ゲーム開発を念頭にした、超入門用として、このブログを書きます。




さて、では言い訳も済んだところで、次からは「Unityで学ぶC#プログラミング」の本番です。

次回予告ですが、おそらく、「Unityのインストールとスクリプトの準備」あたりかと思います。
「もうUnity入れてるし、そんなのどうでもいいから早くしろやー」ってカンジかもですが、
まぁ、最初ですしおすし。


ということで、今日はここまで。

今から趣味プログラミングの時間だー。

2012年2月20日月曜日

初投稿と自己紹介

はじめまして。T.K.と申します。

私は、仕事も趣味もゲームプログラマです。
いわゆる、「ゲームクリエイター」とかいう分類でしょうか。
会社でも家でもとりあえずプログラムを書いています。

そこそこC++が得意なくらいで、あとは普通のオタクです。


このブログは、タイトルのとおり、Unityを通してC#を学ぶためのブログです。
学ぶ、というより、学んでもらう、と言ったほうがいいかもしれません。

「Unity」は、無料で利用できるゲームエンジンです。
日本語書籍もぞろぞろと出版され、有名になってきたので聞いた方も多いかもしれません。

難しい3Dプログラミングの知識や数学・物理を知らなくても、ちょっとした操作とスクリプトで
簡単にゲームが作れてしまう、まさに夢のようなツールです。

Unityでは、スクリプト言語として以下の3つのいずれか、またはその組み合わせが利用できます。

  1. C#
  2. JavaScript
  3. Boo

プログラマであればどれを選んでも、何らかの言語の経験者であればすぐにでも書くことが出来るでしょう。

ただし、プログラミング未経験者がいざ挑戦しようとなると、決して敷居が低いものではないでしょう。
Unityでゲームを開発するにあたって、以下の知識が必要になります。

  1. 上記のいずれかの言語の知識
  2. ゲームプログラミングの一般的知識
  3. Unityにおけるスクリプトの知識
  4. 簡単な数学

既存の出版物には、どれもスクリプトの解説が掲載されています。
しかし、プログラミング未経験者には理解しやすいものとは思いませんでした。


「Unityで学ぶC#プログラミング」は、プログラミング未経験者でも
Unityでプログラミング(スクリプティング)ができるようになるための記事を投稿していく目的で作りました。

思いつきで立ち上げたので、実はどういう記事を書くとか、計画とか一切ありません。
とりあえず、当面の目標として、「飽きずに一ヶ月続けること」を目指しましょうか。


今日はここまで。
眠い。