Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Unityでゲームを作るスライド
for Public
NavMesh編
SlideShareID : Chy72
KMCID : murata
twitterID : paradigm_9
今日の予定
・C#で関数やクラス
・NavMeshについて
・配列 for文
・NavMeshでゲームを作る
今日やること
・前回まででUnityを簡単に触ってもらいました。
・今までUnityよりだったので、今回はC#を頑張りましょう。
・ステージをコード上で作れるようにしましょう。そしてピクミンを作りましょう。
・さあ、Unityを開きましょう。
...
C#を学ぶ
・まっさらなプロジェクトが出来ましたか!
今回はC#を頑張りましょう。
・実はまだ “HelloWorld” やってないですね。やりましょう。
・まずは Create C# Script で
名前は StudyCSharp とでもし...
HelloWorld!
・最初に一回だけ呼ばれる
Start関数のなかに右のコードを
書いて下さい。
・書いたら Ctrl+S して、
このコードをMainCameraに
ドラッグ&ドロップしてください。
・ゲームを再生してみてください。
HelloWorld!
・Hello World できた! やった!
HelloWorld!
・さっきHelloWorld は
UnityのConsole というところに
出てきました。
・コードを見てもらえたらわかるように
デバッグ用のログやエラーを
表示できる便利なやつです。
・今回はこれでC#を学んでから
...
変数の型とDebug.Log()
・変数は値を入れる箱的なやつです。
・ 型 名前 = 初期値 で宣言しますね。
・型が色々あります。例えば
文字列を扱える string 型。
整数を扱える int 型。
実数(浮動小数点)を扱える float...
変数の型とDebug.Log()
左下のConsoleをクリックしたら
大画面のConsoleが出せてより確認しやすく
なります。
関数の復習
・関数は数学で使うあれです。
・型 名前(引数){中身} って感じで書きます
・例えば右の画像のSquare関数だと、
二乗した値を返す関数です。
return で値を返して
その関数の処理を終わります。
・右図のSquare関数は...
関数
・右のAdd(int n, int m)のように、
引数を複数とることも可能です。
・Add(72,28)なら100になりますね。
・intだけでなく何でも返してよいので、例えば
右の string Add072 のように、
str1 を...
void と else if
・Startとかにある void とは?
・先ほどまでの関数たちのように関数を使えば機能を
ブロック分けして把握できて、そういう使い方を
するときは値を返す必要がない。
・こんなときのために、値を返さない、という特...
void と else if
・この関数は、
・まず15で割ってあまりが0ならば
FizzBuzz とログに書き込む。
・そうでなく 3で割ってあまりが0ならば
Fizz とログに書き込む。
・更にそうではなく 5で割ってあまりが0ならば
Bu...
void と else if
・この Print_Fizz_Buzz(int n)関数は
int n を与えれば、ログに FizzBuzzゲームでの
結果を出力するという機能をもったわけです。
・ログに書き込む部分までやったので、
もう値を返す...
関数の練習(20分)
・というわけで今から時間をとるので関数に慣れましょう。
俺は強いからそんなのいらないぜ、って人も、カンスウワカランって人も時間を有意義に使えるよう
レベル別に問題を用意したので、好きな課題を時間内出来るところまで練習してく...
クラスの復習
・C#はオブジェクト指向言語なので、全てのコードがクラスで管理されています。
・クラスは、いってしまえばただ変数や関数を持っているやつです。
・それが前回のBulletScriptのようにオブジェクト的に個別に複数存在し、
設計図...
三次元ベクトル(Vector3)
三次元ベクトルを表すのに(数学苦手な人、ごめんなさい)
・変数として、
・x y z の座標が必要ですね。逆にこれしかいらないですね。
・関数として
・内積や外積を取る関数 は必要ですよね。
・ベクトルの長さを...
ゲーム上の物体(Monobehavior)
ゲーム上の物体を表すのには、
・変数として、
・位置情報を表す変数
・タグ、名前
・関数として
・毎フレーム何をするかを表す関数
・衝突したらどうするかを表す関数 とかが必要ですよね。
・最初作るとき...
クラス
以上のような感じのことをつかさどるのがクラスです。
・ちょっと抽象的な話になりましたが、具体的にコードで例を見ていきましょう。
・何回も使っていって慣れてもらったら分かってくると思います。
・一番説明が簡単そうなのは三次元ベクトルのVe...
クラス-Vector3
・今まで使っていたVector3 を
書いてみましたが多分こんな感じでしょう
(本物はもっと項目多いですが)
・変数があって、関数があって、
初期値を設定するコンストラクタがある。
Vector3 gravity = n...
クラス-継承
・最初にコードを作るとき、例えば前回のPepperScriptとかでもですが、
どうして勝手にUpdate()が呼ばれたり、Start()が呼ばれたのでしょうか。
・それは最初の宣言のところに理由がありました。
・ : MonoB...
クラス-継承
・元となるクラスがあってそれを活かして新たに派生クラスを作ることが出来て、
それがとても便利なのですが、僕はクラスがそこまで得意ではないので
ここでは説明を割愛します。
・駆け足で簡単に抽象的に説明してしまいました。
クラスは要は...
NavMeshで作る
・ではUnityに戻って…
Ctrl + S で今回のシーンをセーブしましょう。
・まずはでかい足場を作りましょう。今回は細かく位置とかを指定していきます。
Create→3Dobject→Cubeで、
・名前はFloor...
NavMeshで作る
Transformに直接値をいれていじったら
正確な値になって楽です。
NavMesh
・NavMesh というめっちゃ楽なのがあります。
・予めこれが道だよと覚えさせておけば、その道の上で最短の経路を賢く辿って
目的地まで行く機能です。
・もともとPro版オンリーな機能だったのですが、Unity4.2位で解禁され...
NavMesh
Window→Navigationをすると、Navigation の項目が増えますので、
Bake して、これが床だと認識させてください。
NavMesh
・先程ので成功すれば床が青くなります。
・続いて、主人公(織間さん)を作成します。
・適当なCapsuleを作って、Orimaとして下さい。
・RigidBodyをつけて、回転しないようにそのConstraintsの
Freez...
NavMesh
・続いて、敵を一匹作成します。
・適当なCapsuleを作って、Enemyとして下さい。
・Orimaと同じ大きさなのはあれなのでSizeを全部0.5倍にしましょう。
小さくできたら、RigidBodyは、いらないです、
代わり...
NavMesh
・このコードを写してね。
・やってることは単純で、
Startで、
自分のNavMeshAgent の
Component を取得して、
OrimaのGameObject を
名前検索で見つけ出して、
毎Updateごとに、自分...
NavMesh
・続いて、障害物を一つ作成します。
・適当なBoxを作って、名前はObstacleとして下さい。
・Position(0,1,0)に大きさはそのままで置いて下さい。
・RigidBodyは、いらないです、Add Componen...
NavMesh
・NavMesh の空中のステージは動的に作成できないようですが、
NavMeshObstacleは自由に動かせるようです。
・NavMeshObstacleについてみてみると、
Shape はBox型とCapsule型を選べま...
NavMesh
・NavMeshの本来の用途はこういう地形で、
設定を開くと、想定するAgentの半径・大きさを入力
して地形選択範囲を大きくできたり、
登れるスロープの高さ、登れる段差の高さ、
落下して近道出来る高さ、ジャンプして飛び越えられ...
NavMesh
・今回の目的はC#でステージを作ること
ですから、今は動的に作れないNavMeshの
足場の方には用はありません。
・気になった人や凝った地形を作りたい人は、
是非自分でステージをこんな感じで作って
みると楽しいと思います。
←...
NavMesh
・左のこういうデータから、右のこういうデータを作りたい!
・というのが今回のフェーズです!
・その前に for文と配列だけ知っておいてもらいます。
for文
・ステージを作る前に教えなければならないことが、
for文です。
・関数の練習をしたStudyCSharpのコードを
もう一度開いてください。
・今までの関数は、もう使わないので // や /**/ を
つかってコメント化して、右のコ...
for文
・for文を使いました。for文を使えば簡単に繰り返しができます。
for(最初にする処理 ; 繰り返しを継続する条件式 ; 繰り返しをする前に行う処理){
処理;
}
という風に使えます。
・今回はどう動いていたかというと、
まず ...
for文
・例えばfor文を上手く使えば、このように、先ほど作ったFizzBuzzを
ログに出力するPrint_Fizz_Buzz関数に i = 1 から
順に 19までを入れて結果を出してもらうことも可能なのです。
配列
・続いて、配列です。
・変数が5つ右のようにあったとします。
・全部似たような処理をしていますね。
・それをこんな感じで全部書くのは大変です。
・そこで配列を使います!
配列
・これが配列の使い方です。
これで a[0] a[1] a[2] a[3] a[4] という 5つの変数が作成されます。
a[3]とかは通常の変数と同じように使用できます。
最初の変数は0から始まってますが、0~4までで計5つの変数が作ら...
配列
・はい、そうなんですね。
for文ととても相性がいいんです。順番に処理が出来るのですね。
・この数字が5でなく100とかだったら、100個もDebug.Log(a[0])…ってやっていくのは
とても大変です!
二次元配列
・ちなみに、配列は拡張して、二次元配列にすることが出来ます。
・上の例だとa[0,0] a[0,1] a[0,2] a[1,0] a[1,1] a[1,2] の 2 * 3 = 6個の
変数が作成されました。
・for文を二重に書い...
配列とfor文(10分)
・というわけで今から時間をとるので配列とfor文に慣れましょう。
・LV1 課題
・先程までのスライドにあった、配列とfor文の使用例を写して配列とfor文の挙動に慣れる。
・LV2 課題
・int[] a = new...
NavMesh
・というわけで、ステージをコードから作りましょう。
・Obstacle をPrefabにしてください。
・ステージを作る人を作ります。
Create Emptyで空っぽのGameObjectを作って、StageMakerと名付け...
NavMesh
・というわけで、ステージをコードから作りましょう。
・本当はファイル読み込みとかしたかったですが、スライド作成時間の都合上、
コードでします。
・Obstacle をPrefabにしてください。
・ステージを作る人を作ります。
...
NavMesh
private int[,] StageData = new int [15, 15] {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,},
...
NavMesh
・この二枚に及ぶコードを書いて下さい。
(コピペ出来るようにあのでかい配列データは直書きしています。)
・そして、StageMakerを張り付けて、goObstacleにPrefabのObstacleを
ドラッグ&ドロップで入れ...
今日の残り時間で
・というわけで、今日は沢山学んだのでちゃちゃっとNavMeshを使って
ゲームを作ってください~。
・ステージをコードで作るということでこういう形になりましたが、
立体的なステージにしてNavMeshを思う存分楽しむもよし、
...
次回の予定
・次回はいよいよアニメーションをやります!
・MMDモデルを使ったりして格ゲーを作る予定です!
Upcoming SlideShare
Loading in …5
×

Unity2015_No4_~NavMesh~

1,807 views

Published on

Unityでゲームを作るスライド、今回はNavMeshを解説します。

Published in: Technology
  • Be the first to comment

Unity2015_No4_~NavMesh~

  1. 1. Unityでゲームを作るスライド for Public NavMesh編 SlideShareID : Chy72 KMCID : murata twitterID : paradigm_9
  2. 2. 今日の予定 ・C#で関数やクラス ・NavMeshについて ・配列 for文 ・NavMeshでゲームを作る
  3. 3. 今日やること ・前回まででUnityを簡単に触ってもらいました。 ・今までUnityよりだったので、今回はC#を頑張りましょう。 ・ステージをコード上で作れるようにしましょう。そしてピクミンを作りましょう。 ・さあ、Unityを開きましょう。 新しくプロジェクトを作ります。 ・名前はなんでもいいです。 思いつかなかったら ”StageMaker”とかで。
  4. 4. C#を学ぶ ・まっさらなプロジェクトが出来ましたか! 今回はC#を頑張りましょう。 ・実はまだ “HelloWorld” やってないですね。やりましょう。 ・まずは Create C# Script で 名前は StudyCSharp とでもしといてください。 ・StudyCSharp のコードを開いて下さい。
  5. 5. HelloWorld! ・最初に一回だけ呼ばれる Start関数のなかに右のコードを 書いて下さい。 ・書いたら Ctrl+S して、 このコードをMainCameraに ドラッグ&ドロップしてください。 ・ゲームを再生してみてください。
  6. 6. HelloWorld! ・Hello World できた! やった!
  7. 7. HelloWorld! ・さっきHelloWorld は UnityのConsole というところに 出てきました。 ・コードを見てもらえたらわかるように デバッグ用のログやエラーを 表示できる便利なやつです。 ・今回はこれでC#を学んでから 今回の目的のステージをC#で 作成するということをやりましょう。
  8. 8. 変数の型とDebug.Log() ・変数は値を入れる箱的なやつです。 ・ 型 名前 = 初期値 で宣言しますね。 ・型が色々あります。例えば 文字列を扱える string 型。 整数を扱える int 型。 実数(浮動小数点)を扱える float 型。 true false のみ、真偽値の bool 型。 これらをDebug.Logに放り込むと、 自動で判別してきちんと表示してくれます。 ・そんなに行もないのでちゃちゃっと写して 実際に確認してみてくださいな。
  9. 9. 変数の型とDebug.Log() 左下のConsoleをクリックしたら 大画面のConsoleが出せてより確認しやすく なります。
  10. 10. 関数の復習 ・関数は数学で使うあれです。 ・型 名前(引数){中身} って感じで書きます ・例えば右の画像のSquare関数だと、 二乗した値を返す関数です。 return で値を返して その関数の処理を終わります。 ・右図のSquare関数は 引数にint型の n をとって n * n つまり nの二乗を返しているわけですね。 ・なので、Debug.Logで Square(72)で n = 72 となって 72*72 が返されて 5184がコンソールログに出されます。
  11. 11. 関数 ・右のAdd(int n, int m)のように、 引数を複数とることも可能です。 ・Add(72,28)なら100になりますね。 ・intだけでなく何でも返してよいので、例えば 右の string Add072 のように、 str1 を引数にとって “072” を 付け加えたstring文字列を返す関数を 作ることもできます。
  12. 12. void と else if ・Startとかにある void とは? ・先ほどまでの関数たちのように関数を使えば機能を ブロック分けして把握できて、そういう使い方を するときは値を返す必要がない。 ・こんなときのために、値を返さない、という特殊な型。 ・例えば右の例 Print_Fizz_Buzz というvoid型の関数。 ・FizzBuzzというのは、 数字を順に言っていくが、もしも 3の倍数ならFizzを、5の倍数ならBuzzを 15の倍数ならFizzBuzzを返すというゲームのこと 例) 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz …
  13. 13. void と else if ・この関数は、 ・まず15で割ってあまりが0ならば FizzBuzz とログに書き込む。 ・そうでなく 3で割ってあまりが0ならば Fizz とログに書き込む。 ・更にそうではなく 5で割ってあまりが0ならば Buzz とログに書き込む。 ・どれでもなかった場合は その数字をログに書き込む。 という処理をしています。 ・else if というのは、上のif文の内容が 正しくなかったときに使えるif文です。
  14. 14. void と else if ・この Print_Fizz_Buzz(int n)関数は int n を与えれば、ログに FizzBuzzゲームでの 結果を出力するという機能をもったわけです。 ・ログに書き込む部分までやったので、 もう値を返す必要もない。 ・ので、voidを使いました。 ・こんな感じで値を返さない void も使えるわけです ・実際 Start関数も void なのですが、これは 最初に通る関数だ!という機能 が大事なので 値を返す必要もなく voidなんですね。
  15. 15. 関数の練習(20分) ・というわけで今から時間をとるので関数に慣れましょう。 俺は強いからそんなのいらないぜ、って人も、カンスウワカランって人も時間を有意義に使えるよう レベル別に問題を用意したので、好きな課題を時間内出来るところまで練習してください。 ・LV1 課題 ・先程までのスライドにあった、Square Add Add072 Print_Fizz_Buzz 関数を写して関数の挙動に慣れる。 ・LV2 課題 ・三乗を返す Cubic 関数、数字を二つとってその平均を返すAverage 関数を作る。 ポケモンやドラクエなどのゲームのダメージの計算式をググって調べて適切な引数を考えて関数にする。 ・LV3 課題 ・関数の中でその関数を呼び出せることを利用して、whileやforを使わないで,(可能な限り高速に動作する) 階乗を返すfactrial 関数と 累乗を求めるPower関数と 平方根を求めるSqrt関数 を作る。 ・LV4 課題 ・AOJ-ICPCの問題をC#で解いて提出する。 僕も一緒に今から解きます。
  16. 16. クラスの復習 ・C#はオブジェクト指向言語なので、全てのコードがクラスで管理されています。 ・クラスは、いってしまえばただ変数や関数を持っているやつです。 ・それが前回のBulletScriptのようにオブジェクト的に個別に複数存在し、 設計図のように考えられるのです。 ・例えば、「ベクトル」、「女子高生」など具体的なものを抽象化したもの ・例を見ていきましょう。
  17. 17. 三次元ベクトル(Vector3) 三次元ベクトルを表すのに(数学苦手な人、ごめんなさい) ・変数として、 ・x y z の座標が必要ですね。逆にこれしかいらないですね。 ・関数として ・内積や外積を取る関数 は必要ですよね。 ・ベクトルの長さを取得する関数。は必要ですよね。 ・正規化する関数もあったららくかもしれません。 ・最初ベクトルを作るときには x y z の位置座標情報を知りたいですよね
  18. 18. ゲーム上の物体(Monobehavior) ゲーム上の物体を表すのには、 ・変数として、 ・位置情報を表す変数 ・タグ、名前 ・関数として ・毎フレーム何をするかを表す関数 ・衝突したらどうするかを表す関数 とかが必要ですよね。 ・最初作るときには ・名前とか指定出来たほうがいいかな
  19. 19. クラス 以上のような感じのことをつかさどるのがクラスです。 ・ちょっと抽象的な話になりましたが、具体的にコードで例を見ていきましょう。 ・何回も使っていって慣れてもらったら分かってくると思います。 ・一番説明が簡単そうなのは三次元ベクトルのVector3なので、 それを説明します。
  20. 20. クラス-Vector3 ・今まで使っていたVector3 を 書いてみましたが多分こんな感じでしょう (本物はもっと項目多いですが) ・変数があって、関数があって、 初期値を設定するコンストラクタがある。 Vector3 gravity = new Vector3(0,-9.8f,0); transform.position += gravity;//みたいに使う ・new でインスタンス化(新たに作成) することが出来る ・こんな感じのを上手いこと使っていた。
  21. 21. クラス-継承 ・最初にコードを作るとき、例えば前回のPepperScriptとかでもですが、 どうして勝手にUpdate()が呼ばれたり、Start()が呼ばれたのでしょうか。 ・それは最初の宣言のところに理由がありました。 ・ : MonoBehavior { の部分に注目です。 ・これは継承を表しています。継承をすると、その元のクラスの変数や関数が 使えたりします。 MonoBehaviorにUpdate()があって、MonoBehaviorを 継承した物体で Update()を書くとUnityが呼び出せるのです。
  22. 22. クラス-継承 ・元となるクラスがあってそれを活かして新たに派生クラスを作ることが出来て、 それがとても便利なのですが、僕はクラスがそこまで得意ではないので ここでは説明を割愛します。 ・駆け足で簡単に抽象的に説明してしまいました。 クラスは要は変数や関数を持っていて継承が出来ると軽く覚えておいてください
  23. 23. NavMeshで作る ・ではUnityに戻って… Ctrl + S で今回のシーンをセーブしましょう。 ・まずはでかい足場を作りましょう。今回は細かく位置とかを指定していきます。 Create→3Dobject→Cubeで、 ・名前はFloor ・Positionは (X,Y,Z) = (0,0,0) ・Rotationは (X,Y,Z) = (0,0,0) ・Size は (X,Y,Z) = (15,1,15) です。 正確にあうように、InspectorのTransformで指定していきましょう。
  24. 24. NavMeshで作る Transformに直接値をいれていじったら 正確な値になって楽です。
  25. 25. NavMesh ・NavMesh というめっちゃ楽なのがあります。 ・予めこれが道だよと覚えさせておけば、その道の上で最短の経路を賢く辿って 目的地まで行く機能です。 ・もともとPro版オンリーな機能だったのですが、Unity4.2位で解禁されました。 ・目的地を主人公にすれば、敵がNavMeshを使ってついていくということが できますよね。 ・とりあえず先ほどのでかいFloorを地面とNavMeshに認識させましょう。 Floorを選択しながら…
  26. 26. NavMesh Window→Navigationをすると、Navigation の項目が増えますので、 Bake して、これが床だと認識させてください。
  27. 27. NavMesh ・先程ので成功すれば床が青くなります。 ・続いて、主人公(織間さん)を作成します。 ・適当なCapsuleを作って、Orimaとして下さい。 ・RigidBodyをつけて、回転しないようにそのConstraintsの Freeze Rotationを全部チェックして、Orima という名前でC#のコードを 作成して、前回とかのをコピペとか思い出しながら、前後左右に動くコードを 書いて、コードをOrimaに張り付けてください。 ・Orimaが前後左右に動くように出来ましたか?
  28. 28. NavMesh ・続いて、敵を一匹作成します。 ・適当なCapsuleを作って、Enemyとして下さい。 ・Orimaと同じ大きさなのはあれなのでSizeを全部0.5倍にしましょう。 小さくできたら、RigidBodyは、いらないです、 代わりに、Add Component → Navigation → NavMeshAgent をくっつけて NavMesh上をゆくAgentにしまして、 Create C#Script でEnemy として、Enemyのコードを書きます。
  29. 29. NavMesh ・このコードを写してね。 ・やってることは単純で、 Startで、 自分のNavMeshAgent の Component を取得して、 OrimaのGameObject を 名前検索で見つけ出して、 毎Updateごとに、自分の目的地 を、Orimaがいる位置にしている だけです。 ・出来たらEnemyに付けて 実行してみてください。 ・Enemyが追いかけましたか? Enemy
  30. 30. NavMesh ・続いて、障害物を一つ作成します。 ・適当なBoxを作って、名前はObstacleとして下さい。 ・Position(0,1,0)に大きさはそのままで置いて下さい。 ・RigidBodyは、いらないです、Add Component → Navigation → NavMeshObstacle をくっつけて下さい。 ・それで実行すると、なんと、避けるではありませんか!
  31. 31. NavMesh ・NavMesh の空中のステージは動的に作成できないようですが、 NavMeshObstacleは自由に動かせるようです。 ・NavMeshObstacleについてみてみると、 Shape はBox型とCapsule型を選べます。 ・Carve を Onにすると、賢くよけることが 出来ます。 ・Create Material でMaterialを作って Obstacleに付けて色を付けてください。
  32. 32. NavMesh ・NavMeshの本来の用途はこういう地形で、 設定を開くと、想定するAgentの半径・大きさを入力 して地形選択範囲を大きくできたり、 登れるスロープの高さ、登れる段差の高さ、 落下して近道出来る高さ、ジャンプして飛び越えられる 距離を設定したり出来ます。
  33. 33. NavMesh ・今回の目的はC#でステージを作ること ですから、今は動的に作れないNavMeshの 足場の方には用はありません。 ・気になった人や凝った地形を作りたい人は、 是非自分でステージをこんな感じで作って みると楽しいと思います。 ←のStaticをチェックつけると、NavMeshの 足場用のものなのだと把握して 足場にします。 ・動的に変えられるObstacleの方で ステージを作りましょう。
  34. 34. NavMesh ・左のこういうデータから、右のこういうデータを作りたい! ・というのが今回のフェーズです! ・その前に for文と配列だけ知っておいてもらいます。
  35. 35. for文 ・ステージを作る前に教えなければならないことが、 for文です。 ・関数の練習をしたStudyCSharpのコードを もう一度開いてください。 ・今までの関数は、もう使わないので // や /**/ を つかってコメント化して、右のコードを書いて下さい。 ・右のようなコードを書いて実行してみてください。 ・すると右下のように出力されます。
  36. 36. for文 ・for文を使いました。for文を使えば簡単に繰り返しができます。 for(最初にする処理 ; 繰り返しを継続する条件式 ; 繰り返しをする前に行う処理){ 処理; } という風に使えます。 ・今回はどう動いていたかというと、 まず int i = 0;をして、iは0より i < 5 は真で継続できて, Debug.Log(i);で0を出力して、 i++でiが1になって、iは1なので i < 5 は真で継続できて, Debug.Log(i);で1を出力して、 i++でiが2になって、iは2なので i < 5 は真で継続できて, Debug.Log(i);で2を出力して、 i++でiが3になって、iは3なので i < 5 は真で継続できて, Debug.Log(i);で3を出力して、 i++でiが4になって、iは4なので i < 5 は真で継続できて, Debug.Log(i);で4を出力して、 i++でiが5になって、iは5なので i < 5 は偽で継続できず, for文の中かっこを抜けて終わります。
  37. 37. for文 ・例えばfor文を上手く使えば、このように、先ほど作ったFizzBuzzを ログに出力するPrint_Fizz_Buzz関数に i = 1 から 順に 19までを入れて結果を出してもらうことも可能なのです。
  38. 38. 配列 ・続いて、配列です。 ・変数が5つ右のようにあったとします。 ・全部似たような処理をしていますね。 ・それをこんな感じで全部書くのは大変です。 ・そこで配列を使います!
  39. 39. 配列 ・これが配列の使い方です。 これで a[0] a[1] a[2] a[3] a[4] という 5つの変数が作成されます。 a[3]とかは通常の変数と同じように使用できます。 最初の変数は0から始まってますが、0~4までで計5つの変数が作られていますね。 最初の行で初期値を設定するにはこのようにやります。 ・[]の中の数字で変数にアクセスできるということは…
  40. 40. 配列 ・はい、そうなんですね。 for文ととても相性がいいんです。順番に処理が出来るのですね。 ・この数字が5でなく100とかだったら、100個もDebug.Log(a[0])…ってやっていくのは とても大変です!
  41. 41. 二次元配列 ・ちなみに、配列は拡張して、二次元配列にすることが出来ます。 ・上の例だとa[0,0] a[0,1] a[0,2] a[1,0] a[1,1] a[1,2] の 2 * 3 = 6個の 変数が作成されました。 ・for文を二重に書いて この場合は、 a[0,0] a[0,1] a[0,2] a[1,0] a[1,1] a[1,2] の順にログ出力できています。
  42. 42. 配列とfor文(10分) ・というわけで今から時間をとるので配列とfor文に慣れましょう。 ・LV1 課題 ・先程までのスライドにあった、配列とfor文の使用例を写して配列とfor文の挙動に慣れる。 ・LV2 課題 ・int[] a = new int[5]{72,346,765,810,1024} ;の配列をfor文を使って その総和を求めて出力するプログラムを書く。 ・int[,] b = new int[3,4] {{0,1,2,3},{72,144,216,288}, {-12,4,6,28}};の配列を for文を使ってその総和を求めて出力するプログラムを書く。 ・LV3 課題 ・AssetStoreを漁って、OrimaやEnemyやObstacleを同じ大きさ、似たような形のまま いい感じ3Dオブジェクトに変更する。 ・LV4 課題 ・今週のWXCSのNormalまたはAdvanceの問題をC#で解いて提出する。
  43. 43. NavMesh ・というわけで、ステージをコードから作りましょう。 ・Obstacle をPrefabにしてください。 ・ステージを作る人を作ります。 Create Emptyで空っぽのGameObjectを作って、StageMakerと名付けて、 Create C#ScriptでStageMaker としてください。
  44. 44. NavMesh ・というわけで、ステージをコードから作りましょう。 ・本当はファイル読み込みとかしたかったですが、スライド作成時間の都合上、 コードでします。 ・Obstacle をPrefabにしてください。 ・ステージを作る人を作ります。 Create Emptyで空っぽのGameObjectを作って、StageMakerと名付けて、 Create C#ScriptでStageMaker としてください。
  45. 45. NavMesh private int[,] StageData = new int [15, 15] { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,}, {1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,}, {1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,}, {1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,}, {1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,}, {1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,}, {1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,}, {1,0,0,0,0,0,1,0,0,0,1,1,0,0,1,}, {1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,}, {1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,}, {1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,}, {1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,}, };
  46. 46. NavMesh ・この二枚に及ぶコードを書いて下さい。 (コピペ出来るようにあのでかい配列データは直書きしています。) ・そして、StageMakerを張り付けて、goObstacleにPrefabのObstacleを ドラッグ&ドロップで入れてください。 実行するとうまくいきましたか?
  47. 47. 今日の残り時間で ・というわけで、今日は沢山学んだのでちゃちゃっとNavMeshを使って ゲームを作ってください~。 ・ステージをコードで作るということでこういう形になりましたが、 立体的なステージにしてNavMeshを思う存分楽しむもよし、 ・Enemyをキーボードを押すたびに生成しまくるコードを書いて 沢山なゲームにするもよし、 ・Enemyにキーボードを押すたびに止まれ、進めの命令を与えるもよし。 ・NavMeshなど使わずに自前でAIを書くもよし。
  48. 48. 次回の予定 ・次回はいよいよアニメーションをやります! ・MMDモデルを使ったりして格ゲーを作る予定です!

×