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.

中高校生対象プログラミング講座Part1

819 views

Published on

2016/8/8に行ったプログラミング講座です。
Unityを利用してゲームを作りながらプログラミングを学んでもらいました。

Published in: Education
  • Be the first to comment

中高校生対象プログラミング講座Part1

  1. 1. 夏の「中高生向け プログラミング講座」 ~僕たち私たちにもできるUNITYプログラミング入門講座~ PART 1 ~ゲームをつくろう~ 所属:専門学校岡山情報ビジネス学院 名前:山本優希 2016/8/8 1
  2. 2. 目次 1. はじめに 2. Unityの画面説明 3. Cubeを設置しよう 4. 床を設置しよう 5. PLAYERを動かそう 6. Scene Load 7. ジャンプしてみよう 8. Stageを作ろう 9. カメラがついてこない 10. Playerの調節 11. ゴールポイントを作ろう 12. ゴールシーンを作ろう 13. Stageを作りこもう 2
  3. 3. この2日間で 目標は「3Dゲームを作る」です。 その為に 1日目は「Unityの操作に慣れながらゲームを作る」 2日目は「ユニティちゃん(人型の3Dモデル)を使ったゲームを作る」 ことを目標にしています。 3
  4. 4. はじめに はじめまして、中学生・高校生のみなさん。 今回はみなさんにゲーム作りをしてもらいながらプログラミングを学ん でもらいたいと思っています。 あ。今、「難しそうだな・・・」と思った人。そんなことありませんよ。 今回はみなさんがよく知っているゲームをベースに作っていきますか ら、安心してください。 それではさっそく始めていきましょう! 4
  5. 5. なんでUNITYを使うの? Unityは現在大手のゲーム会社に使用されているソフトです。 その最大の特徴は、アイデアを簡単にゲームに反映できること。 つまり、ゲームを簡単に作れることです。 今回はそのUnityを使ってゲーム作りを楽しみましょう。 では、まずは画面説明です。 5
  6. 6. UNITYを起動しよう その1 パソコン画面にある下の図のUnityのアイコンをダブルクリックして、 Unityを起動します。 6
  7. 7. UNITYを起動しよう その2 ダブルクリックすると下のような画面が出ます。 今回は新しくUnityでゲームを作るので、右上の「NEW」をクリックします。 7
  8. 8. UNITYを起動しよう その3 クリックすると下の画面になると思います。ココが「3D」になっているのを確認 して「Create project」をクリックし、Unityを起動しましょう。 8
  9. 9. UNITYを起動しよう その4 もし、「3D」になっていなかったら、 「3D」をクリックしましょう。 今回は3Dゲームを作るのでここの設定は「3D」でなければいけません。 9
  10. 10. UNITYを起動しよう その5 10 Unity起動
  11. 11. UNITYの画面説明 11
  12. 12. UNITYの画面説明 その1 Scene (シーンビュー) Game (ゲームビュー) ゲーム内を自由に見ることが出 来ます。あとでシーンビューでの 操作説明をします。 実際の ゲーム画面が確認できます。 12
  13. 13. UNITYの画面説明 その2 Hierarchy (ヒエラルキー) Project (プロジェクト) ゲーム内に設置されている素材 の一覧が表示されます。 ゲームに使用する素材が 表示されます。 13
  14. 14. UNITYの画面説明 その3 Inspector (インスペクター) ゲームの再生ボタンです。 ゲーム素材の情報が 表示されます。 14
  15. 15. UNITYの画面説明 その4 ゲームを再生できます。 ゲームを一時停止 できます。 再生ボタンの説明 15
  16. 16. ゲームオブジェクトを設置しよう おまたせしました。やっとゲームを作っていきたいと思います。 まず、 このゲーム世界はまだ物が何も無いのでCubeを作りたいと思います。 16
  17. 17. CUBEを設置しよう その1 Unityの画面説明が終わったところで、さっそく何か置いてみましょう。 さきほど説明した「Hierarchy(ヒエラルキー)」画面の上で右クリック をしてみてください。すると小さな一覧表が出ます。 英語ばっかりでよく分かりませんね・・・。 今回はその中の「3D Object」をクリックしてください。 そうするとまた小さな一覧が出ます。 その中の「Cube」をクリックしてみてください。 17
  18. 18. 「Cube」 出た!! 18
  19. 19. ツールバー/各ボタンの役割 画面の見え方変更ボタン • シーンビュー内の特定の場所をク リックしたままドラッグする • クリックした地点を中心に視点を上 下左右に変更できる 19
  20. 20. ツールバー/各ボタンの役割 オブジェクト移動ボタン • シーンビュー内のオブジェクトの配 置をドラッグアンドドロップで変更す る • オブジェクトの中心から3方向に伸 びる矢印の先端をドラッグすると矢 印方向に移動できる • オブジェクトの中心の立方体をド ラッグすると自由に移動できる 20
  21. 21. ツールバー/各ボタンの役割 オブジェクト回転ボタン • シーンビュー内のオブジェクトを3軸 方向それぞれに回転させる • 3方向に伸びる矢印の代わりにオブ ジェクトの中心を包む3つの環が出 現する • 環をドラッグすると任意の向きに変 更できる 21
  22. 22. ツールバー/各ボタンの役割 オブジェクト拡縮ボタン • シーンビュー内のオブジェクトを3軸 方向それぞれに拡縮させる • 3方向に伸びる矢印の代わりに3方 向にキューブが伸びる • 先端のキューブをドラッグするとオ ブジェクトがその方向に伸び、かつ、 中心から同じサイズ分反対側にも 伸びる 22
  23. 23. ツールバー/各ボタンの役割 オブジェクト拡縮ボタン • シーンビュー内のオブジェクトを3軸 方向それぞれに拡縮させる • 3方向に伸びる矢印の代わりに3方 向にキューブが伸びる • 先端のキューブをドラッグするとオ ブジェクトがその方向に伸び、かつ、 中心から同じサイズ分反対側にも 伸びる 23
  24. 24. 見え方の変更 右クリック • シーンビュー内で右クリックしたまま ドラッグすると、自分視点を中心に シーン内全体の見え方を上下左右 に移動させられる 24
  25. 25. 見え方の変更 シーンギズモ • シーンビューの視野角や投映モー ドを一発で素早く変更する(俯瞰、 右、左) • 円錐(ラッパ)をクリックするとその 向きからの見た目に切り替わる • 円錐の中心の立方体をクリックする と奥行き感の有無が切り替わる • どこを向いているかわからなくなっ たら、Shiftキーを押しながら円錐の 中心の立方体をクリックすれば少し 見下ろした状態に戻る 25
  26. 26. CUBEを設置しよう その2 それでは一度、今操作しているCubeを消して新しいCubeを作ってみ てください。 消し方はCubeを選択している状態で「Deleteキー」を押したら消えま す。 26
  27. 27. CUBEを設置しよう その3 「Cube」が出ましたね。ここでこの「Cube」の設定をします。 画面右の「Inspector」を見てください。 このCubeをプレイヤーとして操作したいので、 「Player」と名前を付けます。 そして「Transform」にある「Position」の「Y」に「2」と入力します。 あとで地面を設置するのでちょっと高いところに設置します。 27
  28. 28. CUBEを設置しよう その4 28
  29. 29. CUBEを設置しよう その5 それではここでゲームを再生してみましょう。 画面上の「再生ボタン」をクリックしてみてください。 29
  30. 30. CUBEを設置しよう その6 シ~ン 30
  31. 31. CUBEを設置しよう その7 何も起こりませんね・・・。 ほとんど何も置いてないので当然と言えば当然ですが・・・。 再生ボタンをもう一度押すとゲームを停止できます。 そういえばこのCube空中に浮いたままなので、重力を設定しましょう。 重力設定をする「Rigidbody」をCubeに追加設定します。 31
  32. 32. CUBEを設置しよう その8 PlayerのInspectorの中にある「Add Component」をクリックします。 そうするとまた小さな一覧表が出ます。 この中の「Physics」をクリックします。 一覧表の中身が変わりましたね。 その一番上にある「Rigidbody」をクリックします。 32
  33. 33. CUBEを設置しよう その9 ① ② ③ 33
  34. 34. CUBEを設置しよう その10 これで重力が設定できました。 では再生してみましょう。 画面のCubeが落ちていったらOKです。 もう一度再生ボタンを押してゲームを停止させ、次に進みましょう。 34
  35. 35. 床を設置しよう その1 さて、この世界にはまだ地面がありませんので地面を置きましょう。 もう一度「Hierarchy(ヒエラルキー)」画面の上で右クリックをして 「Cube」を作ってください。 作ったCubeの名前を「Ground」と設定して 「Scale」の「X」を「20」と入力します。 35
  36. 36. 床を設置しよう その2 できた 36
  37. 37. PLAYERを動かそう その1 さて、この地面の上を動いてみようと思います。 つまり、プログラムを書いていきます。 まずはプログラムのファイルを作成します。 画面説明で説明した「Project」の上で右クリックをします。 一覧が出るので上から1番目の「Create」をクリックします。 更に出た一覧の上から2番目「C# Script」をクリックします。 37
  38. 38. PLAYERを動かそう その2 38
  39. 39. PLAYERを動かそう その3 はい。たったの3クリックでファイルができましたね。 このプログラムを書くファイルを「スクリプト(Script)」と呼びます。 さて、ここで重要な作業をします。 間違えるとプログラムが動かなくなります。 さてその作業の内容は、「ファイル名の設定」です。 作ったスクリプトに「Move」と名前をつけます。 設定したらダブルクリックしてスクリプトファイルを開きましょう。 39
  40. 40. PLAYERを動かそう その4 40
  41. 41. PLAYERを動かそう その5 ダブルクリックをするとプログラムファイルの編集ソフトが起動します。 下の画面のようになればOKです。 41
  42. 42. PLAYERを動かそう その6 ここで確認してください。 赤枠の中の名前が 先程設定したファイル名に なっているか 確認してください。 一致していないと プログラムが動きません。 42
  43. 43. PLAYERを動かそう その7 名前の一致が確認できたらプログラムを書いていきましょう。 void Update(){ } の中に次の黒字になっているプログラムを書いてみてください。 43
  44. 44. PLAYERを動かそう その8 // Use this for initialization void Start(){ } // Update is called once per frame void Update(){ float h = Input.GetAxisRaw ("Horizontal"); if(h != 0){ transform.Translate (h * Time.deltaTime, 0, 0); } } 44
  45. 45. PLAYERを動かそう その9 // Use this for initialization void Start(){ } // Update is called once per frame void Update(){ float h = Input.GetAxisRaw ("Horizontal"); if(h != 0){ transform.Translate (h * Time.deltaTime, 0, 0); } } 45 キーボードなどの横入力を取得 「if」とは「もしも○○だったら」という意味です。今回は1行前で取得 した「h」の数値が0以外だったらという意味です。 解説
  46. 46. PLAYERを動かそう その10 // Use this for initialization void Start(){ } // Update is called once per frame void Update(){ float h = Input.GetAxisRaw ("Horizontal"); if(h != 0){ transform.Translate (h * Time.deltaTime, 0, 0); } } 46 「Time.deltaTime」とは1フレームごとの経過時間のことです。 フレームとはコンピュータの処理のことです。(以下読み飛ばしOK) たとえばコンピュータがこの処理を1秒間に100回実行(100フレーム)したとします。する と、右か左のちらのキーボードを1秒押すだけであっという間に100移動することになり ます。(結構遠くまで行く) Unity世界での「1移動」とは「1m移動」という意味なので秒速100mで動くプレイヤーに なってしまいます。そこで、先程説明した「Time.deltaTime」を使います。コンピュータの 処理回数が仮に 100フレームだとすると、「Time.deltaTime」には0.01(1秒の100分の1) の値が入っています。 これを使用して1秒間移動すると、 h(1もしくは-1) * Time.deltaTime(1秒/フレーム数) * 1秒間(フレーム数) となり、 1もしくは-1の移動ができます。 というわけで、移動や回転には「Time.deltaTime」を使用するのをお勧めします。 transform.Translateは移動に使われるプログラムです。 今回は横(X)方向に移動させるため、(x,y,z)のxの場所に数値を入れます。 hには「1」か「-1」が入力されています。 右キーを押すと「1」が、左キーを押すと「-1」が入力されます。 ← 左 -1 1 右 → 解説
  47. 47. PLAYERを動かそう その11 入力が出来たら「F7」を押して入力したプログラムを上書き保存します。 エラーが出ずに上書き保存が出来たら、Unity画面に戻ってみましょう。 もしエラーが出たら・・・手を上げてスタッフに聞いてみてください。 さて、これから「Player」にこのプログラムを埋め込みます。 やり方はとっても簡単です。 「Project」の中にある「Move」スクリプトを「Hierarchy」の中の 「Player」にドラッグ&ドロップすればOKです。 47
  48. 48. PLAYERを動かそう その12 48
  49. 49. PLAYERを動かそう その13 さて、ドラック&ドロップができたら再生してみましょう。 キーボードの「左キー」「右キー」を押せば動きますよね? 49
  50. 50. 落ちたら落ちっぱなし とりあえず動きましたが一度落ちると永遠に戻ってきませんね・・・。 これはゲームとしてあまりにも不細工なので落ちたらゲーム内で勝手 にリセットさせましょう。 そのために、「Scene」のロードをします。 説明するよりやってもらった方が分かると思います。 まずはさっきの「Move」スクリプトを開いてみましょう。 50
  51. 51. SCENE LOAD その1 「Scene」のロードをするにはプログラムを書きたします。 まずは一番上に書いてある using UnityEngine; using System.Collections; の下に次のプログラムを書きます。 51
  52. 52. SCENE LOAD その2 using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class Move : MonoBehaviour { // Use this for initialization void Start () { } 52
  53. 53. SCENE LOAD その3 今書いてもらったプログラムで「Scene」に関する機能を使えるようにで きました。 それでは本命の「Scene」のロードのプログラムを書きましょう。 53
  54. 54. SCENE LOAD その4 void Update () { float h = Input.GetAxisRaw ("Horizontal"); if(h != 0){ transform.Translate (h * Time.deltaTime, 0, 0); } if (transform.position.y < -1) { SceneManager.LoadScene ("Main"); } } 54
  55. 55. SCENE LOAD その5 void Update () { float h = Input.GetAxisRaw ("Horizontal"); if(h != 0){ transform.Translate (h * Time.deltaTime, 0, 0); } if (transform.position.y < -1) { SceneManager.LoadScene ("Main"); } } 55 今回のifはPlayerの位置(ポジション)のy(高さ)が-1より低い場所に 行ったらという意味です。 シーンをロードします。 シーンのロードとはゲームで言うところのタイトル画面から セーブデータの選択画面に移動するようなものです。 今回は再び「Main」のシーンに飛ぶのでリセットするのと同じように なります。 解説
  56. 56. SCENE LOAD その6 入力が出来たらF7で保存をしてUnity画面に戻りましょう。 プログラムの設定はこれでバッチリです。 次に現在の「Scene」を保存しましょう。 画面左上の「File」をクリックし、「Save Scene」をクリックます。 56
  57. 57. SCENE LOAD その7 57
  58. 58. SCENE LOAD その8 Sceneの名前を入力して保存します。 今回は「Main」と入力して保存しましょう。 58
  59. 59. SCENE LOAD その9 59
  60. 60. SCENE LOAD その10 保存が出来たら最後の作業です。 左上の「File」から「Build Settings」をクリックします。 すると「Build Settings」のセッティング画面が立上ります。 そこに「Project」内の「Main」をドラッグ&ドロップします。 60
  61. 61. SCENE LOAD その11 ① ② 61
  62. 62. SCENE LOAD その12 これでOKです。 それではゲームをプレイしてみましょう。 「Build Settings」のセッティング画面を消して、再生ボタンを押してく ださい。 セッティング画面は右上の「×」ボタンを押すと消えます。間違って Unity画面を消さないように注意してくださいね。 落ちたらリセットされて最初に戻ったらOKです。 62
  63. 63. ジャンプしてみよう その1 さあ、ここでジャンプをしてみましょう。 某有名な黄色いヘルメットの配管工おじさんもジャンプできますから、 私たちもがんばっていきましょう。 ジャンプのプログラムは次のプログラムを、先程書いた「Move」プログ ラムに入力してみてください。 63
  64. 64. ジャンプしてみよう その2 public class Move : MonoBehaviour { bool jumpFlg = true; // Use this for initialization void Start () { } 64
  65. 65. ジャンプしてみよう その3 public class Move : MonoBehaviour { bool jumpFlg = true; // Use this for initialization void Start () { } 65 連続ジャンプを防ぐためにbool型の「変数」というものを準備しておきます。 変数とはプログラム内に準備する「情報を保存する箱」のことです。 今回はこの箱の中に「true」を保存しておきます。 ジャンプをするときにこの箱の中を確認し「true」だったらジャンプの処理を して、そうでなかったらジャンプをさせないようにします。 これを設定するのは連続ジャンプを防ぐためです。 解説
  66. 66. ジャンプしてみよう その4 if (transform.position.y < -1) { SceneManager.LoadScene ("Main"); } if (Input.GetKeyDown (KeyCode.Space) && jumpFlg) { GetComponent<Rigidbody> ().AddForce (0, 300, 0); jumpFlg = false; } } void OnCollisionEnter(Collision col){ jumpFlg = true; } } 66
  67. 67. ジャンプしてみよう その5 if (transform.position.y < -1) { SceneManager.LoadScene ("Main"); } if (Input.GetKeyDown (KeyCode.Space) && jumpFlg) { GetComponent<Rigidbody> ().AddForce (0, 300, 0); jumpFlg = false; } } void OnCollisionEnter(Collision col){ jumpFlg = true; } } 67 「Input.GetKeyDown」はキーボードの押された瞬 間を判定しています。ですからこの場合は、 「スペースキーを押した瞬間に」となっています。 さっき説明した「true」だったらの変数です。 隣りにある「&&」は「この2つの条件が両方とも満た されたとき」という意味です。 解説
  68. 68. ジャンプしてみよう その6 if (transform.position.y < -1) { SceneManager.LoadScene ("Main"); } if (Input.GetKeyDown (KeyCode.Space) && jumpFlg) { GetComponent<Rigidbody> ().AddForce (0, 300, 0); jumpFlg = false; } } void OnCollisionEnter(Collision col){ jumpFlg = true; } } 68 「GetComponent」はUnityで良く使用します。インスペクターに表示されている情報を取っ てくるなどのことができます。今回は「Player」の「Rigidbody」の情報を取得してきます。 「AddForce」は名前の通り「力を加える」ことが出来ます。 今回はジャンプなので(x,y,z)のyの方向に300力を加えます。 解説 連続ジャンプができないように、 1回ジャンプしたらジャンプができない ように「jumpFlg」の中に「true」以外の 物として「false」を入力しておきます。
  69. 69. ジャンプしてみよう その7 if (transform.position.y < -1) { SceneManager.LoadScene ("Main"); } if (Input.GetKeyDown (KeyCode.Space) && jumpFlg) { GetComponent<Rigidbody> ().AddForce (0, 300, 0); jumpFlg = false; } } void OnCollisionEnter(Collision col){ jumpFlg = true; } } 69 「OnCollisionEnter」は何かが当たった時に行われる処理です。 今回はジャンプに使いますので、床に当たったら再びジャンプで きるように、jumpFlg変数の中にtrueを入力し直します。 解説
  70. 70. ジャンプしてみよう その8 入力出来たら「F7」で保存してUnity画面で再生です。 「スペースキー」を押すとジャンプします。 ぴょん、ぴょん、ぴょん もう馴れてきましたか?その調子ですっ! さて、ジャンプもできたところで、次はステージを作ってみましょう。 70
  71. 71. STAGEを作ろう その1 ではステージを作ってみましょう。 今回は床を大量生成するため、「Prefab(プレハブ)」機能を使います。 プレハブは一度設定したゲーム内の物をProject内に保存することが 出来る機能です。 たとえば一度敵として設定した敵キャラをプレハブ化し、土管から大量 に生産することだってできます。 いや~プレハブ便利ですね~。ではプレハブの作り方を説明します。 Hierarchyにある「Ground」を「Project」へ、ドラッグ&ドロップします。 71
  72. 72. STAGEを作ろう その2 72
  73. 73. STAGEを作ろう その3 では今度はプレハブ化した「Ground」を「Hierarchy」にドラッグ&ド ロップしてみましょう。 ドラック&ドロップでいくらでも複製できます。 あとは「Position(位置)」や「Scale(大きさ)」を変えてステージを作っ てみましょう。 73
  74. 74. STAGEを作ろう その4 できた 74
  75. 75. カメラがついてこない その1 そういえば、カメラが「Player」を追いかけてくれません。 カメラとは実際のゲーム画面用の景色を撮影してくれているものです。 Hierarchyにある「Main Camera」から見えている景色が実際のゲー ム画面に映っています。 「Player」が画面外に出ると見えなくて操作がしづらくなりますね。 カメラがついてくるようにプログラムに設定しましょう。 「Move」スクリプトに次のプログラムを追加してください。 75
  76. 76. カメラがついてこない その2 public class Move : MonoBehaviour { public GameObject cameraPosi; bool jumpFlg = true; // Use this for initialization void Start () { } 76
  77. 77. カメラがついてこない その3 public class Move : MonoBehaviour { public GameObject cameraPosi; bool jumpFlg = true; // Use this for initialization void Start () { } 77 カメラの情報を取得したいのでカメラ用の変数を用意しておきます。 「public」とは「公(おおやけ)」という意味があり、外から情報を確認できたり、操作できた りします。どういう意味かというと、変数の前にこの「public」を書いておけばプログラムで いちいち数値を入力しなくても、Unity画面から変数の中を操作することが出来ます。 その操作はあとでしますので、いまはとりあえず「そういうもんなんだなぁ」と思っておい てください。 解説
  78. 78. カメラがついてこない その4 if (Input.GetKeyDown (KeyCode.Space) && jumpFlg) { GetComponent<Rigidbody> ().AddForce (0, 300, 0); jumpFlg = false; } cameraPosi.transform.position = new Vector3 (transform.position.x, transform.position.y, -10); } 78
  79. 79. カメラがついてこない その5 if (Input.GetKeyDown (KeyCode.Space) && jumpFlg) { GetComponent<Rigidbody> ().AddForce (0, 300, 0); jumpFlg = false; } cameraPosi.transform.position = new Vector3 (transform.position.x, transform.position.y, -10); } 79 ここではカメラの位置(ポジション)を新しく上書きしています。 上書きする場合は、新しい値を入力するため「new」を使用します。 次に、「Vector3」について説明したいと思います。 「Vector3」とは3つの数値を(x,y,z)のように保存しておける変数のことです。 たとえば「Vector3」型のpositionに新しい値を代入したいときには position = new Vector3(x, y, z) ; x・・・左右 y・・・上下 z・・・前後にそれぞれ対応しています。 と入力すれば位置を変更することが出来ます。 今回は左右と上下に移動する「Player」を追っていかなければならないのでxとyの値は常に「Player」 のxとyを代入し、zは初期位置の「-10」を代入し続けます。 解説
  80. 80. カメラがついてこない その6 入力出来たら保存してUnityに戻りましょう。 戻ったら「Hierarchy」の「Player」をクリックしてInspectorの中身を見 てみましょう。 「Player」に埋め込んでいる「Move」の中に「Camera Posi」という項 目があると思います。 そこに「Hierarchy」の「Main Camera」をドラッグ&ドロップします。 80
  81. 81. カメラがついてこない その7 81
  82. 82. PLAYERの調節 その1 ついでに「Player」の調整をしましょう。 Playerの「Inspector」画面にある「Rigidbody」を調整します。 「Rigidbody」内にある「Constraints」の左にある マークをクリック します。 右の図のように項目が出ます。 そこにあるチェック項目をクリックして 右の図のようにすればOKです。 82
  83. 83. PLAYERの調節 その2 今設定してもらった内容は「外から力が加わっても動かないでくれ」と いう設定です。 上の項目の「Freeze Position」は位置です。 その「z」にチェックを入れてもらったので「Player」は前後(奥)には動 かなくなりました。 下の項目の「Freeze Rotation」は向いている角度です。 これの全てにチェックを入れているので「Player」は回転したり傾いた りしなくなりました。 83
  84. 84. PLAYERの調節 その3 それともう1つ。 「Move」スクリプトの中に次のプログラムを書きくわえましょう。 プログラム内に「moveSpeed」という変数を「public」で宣言して作っ ちゃいましょう。 「public」にすることで、Unity画面からでも数値を変更することが出来 ます。(いや~便利ですね) これで「moveSpeed」の数値を変えれば移動速度が変わります。 84
  85. 85. PLAYERの調節 その4 public class Move : MonoBehaviour { public GameObject cameraPosi; public float moveSpeed = 1; bool jumpFlg = true; // Use this for initialization void Start () { } 85
  86. 86. PLAYERの調節 その5 public class Move : MonoBehaviour { public GameObject cameraPosi; public float moveSpeed = 1; bool jumpFlg = true; // Use this for initialization void Start () { } 86 移動速度用の変数を「public」で作ります。前にも言いましたが、「public」なので、Unity 画面から変更できます。らくちん、らくちん♪ ただ最初の値としてとりあえず「1」と入力しておきましょう。 floatの説明(飛ばしてもOK) 「float」は小数を保存できる変数のことです。 数値を保存できる変数は他に「int」というものがありますが、「int」は「整数」のみ保存で きるため、微妙な調整ができるように今回は「float」を使っています。
  87. 87. PLAYERの調節 その6 void Update () { float h = Input.GetAxisRaw ("Horizontal"); if(h != 0){ transform.Translate (moveSpeed * h * Time.deltaTime, 0, 0); } if (transform.position.y < -1) { SceneManager.LoadScene ("Main"); } 87
  88. 88. PLAYERの調節 その7 void Update () { float h = Input.GetAxisRaw ("Horizontal"); if(h != 0){ transform.Translate (moveSpeed * h * Time.deltaTime, 0, 0); } if (transform.position.y < -1) { SceneManager.LoadScene ("Main"); } 88 さっき作った変数を移動数値に掛けます。(飛ばしてOK) これによって、 移動速度 * h(1か-1) * Time.deltaTime(1秒/フレーム数100) * 1秒間(フレーム数100) になるので、+か-の移動速度分だけ移動するようになります。
  89. 89. ゴールポイントを作ろう その1 ところで、このゲームにはまだゴールがありませんね? ゴールポイントを作って「ゴール!!」と表示させましょう。 Hierarchyで「Cube」を作って「GoalPoint」と名前をつけましょう。 あとはゴールと分るように色をつけましょう。 Projectで右クリックをして「Create」から「Material」を作ってください。 89
  90. 90. ゴールポイントを作ろう その2 90
  91. 91. ゴールポイントを作ろう その3 出来上がった「Material」にも「Goal Point」と名前をつけましょう。 名前をつけたらMaterialのInspector画面を見てみましょう。 上にスポイトのようなマークがありますね? そのマークの隣をクリックしてみてください。 すると色を選べるようになります。 この色を自分の好きな色に変えてみてください。 91
  92. 92. ゴールポイントを作ろう その4 92
  93. 93. 色が決まったら「Material」を「Hierarchy」内の「GoalPoint」に ドラッグ&ドロップしてください。 ゴールポイントを作ろう その5 93
  94. 94. ゴールポイントを作ろう その6 94
  95. 95. ゴールポイントを作ろう その7 色がついた 95
  96. 96. ゴールポイントを作ろう その8 さて次は「GoalPoint」専用のスクリプトを作ります。 「Project」に新しいスクリプトを作って「GoalPoint 」と名前をつけます。 名前をつけたらスクリプトを開いて次のプログラムを入力してください。 96
  97. 97. ゴールポイントを作ろう その9 using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class GoalPoint : MonoBehaviour { 97
  98. 98. ゴールポイントを作ろう その10 // Update is called once per frame void Update () { } void OnCollisionEnter(){ SceneManager.LoadScene ("Goal"); } } 98
  99. 99. ゴールポイントを作ろう その11 できたら保存してUnityに戻りましょう。 「Project」にある「GoalPoint」スクリプトを「Hierarchy」内の「GoalPoint」 のCubeにドラッグ&ドロップしましょう。 ドラック&ドロップできたら「Ctrlキー」と「Sキー」を同時押ししてシーン の保存をしましょう。 99
  100. 100. ゴールシーンを作ろう その1 さて、後一仕事です。 ゲームをクリアすると、「ゲームクリア!!」とか「おめでとう!」と書い てある画面(シーン)に変わります(移動します)よね? というわけで、次はゴール用のシーンを新しく作ってみましょう。 左上の「File」から「New Scene」をクリックして新しいシーンを作ります。 100
  101. 101. ゴールシーンを作ろう その2 101
  102. 102. ゴールシーンを作ろう その3 全部無くなったように見えますが、大丈夫です。安心してください。 Project内の「Main」にさっきまでのシーンは保存されていますから。 さて、あとひとふんばりです。頑張っていきましょう。 「Hierarchy」で「UI」をクリックして「Text」をクリックします。 これで文字が表示できるようになりました。 102
  103. 103. ゴールシーンを作ろう その4 103
  104. 104. ゴールシーンを作ろう その5 さて、これからこのTextの設定をしていきます。 「Inspector」内の「Rect Transform」の 「Pos X」を「0」、 「Pos Y」を「0」、 「Pos Z」を「0」 と設定します。 ゲーム画面の真ん中に「New Text」と表示されましたね。 次に「Inspector」内の「Text」にゴールした時のメッセージを入力しま す。 今回私は「ゴール」とシンプルに書いておきます。 104
  105. 105. ゴールシーンを作ろう その6 105
  106. 106. ゴールシーンを作ろう その7 字が小さいですね・・・。 字を大きくしましょうか。 まずは先程テキストを入力した「Text」の少し下にある「Font Size」を 「60」に変更しましょう。 おや、字が消えましたね? それを解決するために、もうひと作業しましょう。 ちょっと下にある項目の 「Horizontal Overflow」を「Overflow」に 「Vertical Overflow」を「Overflow」に 設定します。 106
  107. 107. ゴールシーンを作ろう その8 107
  108. 108. ゴールシーンを作ろう その9 今設定してもらった「Overflow」は、 「文字の大きさが表示するための「Text」の範囲より大きくなっても表 示させて」という意味です。 さっき文字が消えたのは、フォントのサイズを60にして「Text」の範囲 より大きくなってしまったからです。「Overflow」の設定をしていないと フォントサイズを大きくしたときに消えてしまうことがあるので覚えてお くといいでしょう。 108
  109. 109. ゴールシーンを作ろう その10 さて、設定が終わったら「Ctrlキー」と「Sキー」を同時押ししてシーンの 保存をしましょう。 最初にあったシーンの名前を入力する作業をします。 今回は「Goal」と入力して保存しましょう。 保存が出来たら「File」から「Build Setting」を開いて「Project」内にある 「Goal」シーンをドラッグ&ドロップしましょう。 109
  110. 110. ゴールシーンを作ろう その11 「Project」内にある「Main」のシーンをダブルクリックしてさっきのシーン に戻りましょう。 戻ったらゲームをスタートしてゴールポイントに当たって正常に起動す か確かめてみましょう。 さっき作った「Goal」シーンに移動出来たらOKです。 110
  111. 111. STAGEを作りこもう 今日はここまでです。 が、明日もあるので今日の残り時間はステージの作りこみをしましょう。 床の長さ調節して、長くして、ゴールを設置して、自分だけのステージ を作りましょう。 一日目 おつかれさまでした。 111

×