スマートデバイスプログラミング 第2回
Unityで開発してみよう(その1、基礎文法編)

参考資料

View(画面内の各要素)について

Hierarrchy View(左上)
   シーン上にあるオブジェクトを管理するための画面

Scene/Game View(中央)
   Scene:レイアウトを確認したり、編集したりする画面
   Game:ゲーム画面(実行中はゲーム画面が前面に出て来ます)

Inspector View(右サイド)
   各オブジェクトの詳細を閲覧、設定する画面

Project/Console View(左下)
   Project:プロジェクト内にある物の管理
   Console;実行時のエラーなどを表示する画面
   (エラーが出たらConsoleのタブを押して確認してみましょう)

レイアウトは自由に変更できます。
Window→Layouts→RevertFactorySetteinで戻せます。

C#について

C#でのプログラムの記載例

課題

(1)Text、Toggleを使って、簡単なクリックゲームを作ってみましょう。
(2)(↑がうまくいったら)Slider、Scrollbarを使って、文字の色を変えられるようにしてみましょう。
(3)(↑がうまくいったら)Input Field、Buttonを使って、名前を入力できるようにしてみましょう。
(4)(余力があったら)ゲームをより改良するか、学んだ技術を使って何か面白いものを作ってみましょう。

作ったC#のプログラムを添付してください。
(プロジェクトを保存したフォルダのasset以下にあると思います。
コメント欄には、どこまでやったかとハイスコア書いてください。

  1. 新規プロジェクトを作る(「2D」プロジェクトを選びましょう)
    プログラム
  2. GameObject→UI→Textで新規テキストを作成。
  3. PosXとPosYを0にしましょう(Inspector窓)
  4. Widthが160になっているので320に増やしましょう(Inspector窓)
  5. GameObject→UI→ToggleでチェックボックスToggleを作成。
  6. GameObject→UI→ToggleでチェックボックスToggle1を作成。
  7. GameObject→UI→ToggleでチェックボックスToggle2を作成。
  8. Sceneのタブをクリックして中央の画面をGameViewからSceneViewに。
  9. HierarchyViewからToggleを選んでダブルクリックしましょう。
  10. SceneView内でToggleが選択され、移動可能な状態になります。
  11. 青い□の部分をドラッグして、Textと被らないよう下に移動しましょう。
  12. 同様にToggle1、Toggle2を移動しましょう。
  13.       
  14. Assets → Create → C# Scriptで新規スクリプトを作成
  15. 名前を「GameManager」に変えてから確定させましょう
  16. 作ったスクリプトをダブルクリックしてエディタ起動
  17. プログラムを編集

    3行目(プログラム冒頭)に1行足す

    using UnityEngine.UI;

    5行目のクラス名を確認。class GameManagerになっていなかったら修正

    7行目(クラスに入った直後)に変数の宣言を足す

    public Text t;
    public Toggle tg;
    public Toggle tg1;
    public Toggle tg2;
    int score;
    float time;
    string pname;
    

    16行目(Start()の中)に下記2行を足す

    score = 0;
    time = 20.0f;
    pname = "nanashi";
    

    22行目(Update()の中)に下記6行を足す

    time -= Time.deltaTime;
    if (time >= 0.0f){
      t.text = pname + string.Format ("'s score is{0}pts. time:{1:f1}", score, time);
    } else {
      t.text = pname + string.Format ("'s score is{0}pts. finished!", score);
    }
    
    ※Time.deltaTimeには前回Update()が呼ばれてからの経過時間がfloatで入っています。

    30行目(Update()が終わった後)に下記11行を足す

    public void ToggleChanged(){
      if (tg.isOn==false && tg1.isOn==false && tg2.isOn==false ) {
        if(time >= 0.0f){
          score++;
        }
        int r = Random.Range(0,3);
        if(r==0) tg.isOn=true;
        if(r==1) tg1.isOn=true;
        if(r==2) tg2.isOn=true;
      }
    }
    
    ※Rndom.Rangeは(0,3)で指定すると0~2の値が入ります。(授業「ゲームプログラミング」のgc.Randと挙動が違うので注意)
  18. GameObject→emptyで空のオブジェクトを作成
  19. AddComponentボタンを押して、Scriptを選んで、作ったスクリプト(GameManager.cs)を追加
    プログラム
  20. 左側のHierarchy窓にあるGameObjectを選択し、GameManagerの変数tの欄の右側にあるボタンをクリック。作ったテキスト(Text)を追加
  21. GameManagerの変数tgの欄の右側にあるボタンをクリック。作ったToggleを追加
  22. 同様にtg1にToggle1、tg2にToggle2を追加しましょう。
  23. Hierarchy窓でToggleを選択
  24. Inspector窓の下の方にあるOnvalue Changed(Boolean)のところにある「+」をクリック
  25. None(Object)の横にある○をクリック
  26. Objectが選べるので、GameObjectを選んで窓を閉じる
  27. No Functionの部分もクリック
  28. GameManagerを選ぶとメソッド一覧が出てくる。
  29. 一番下にToggleChangedがあるのでクリック
  30. Toggle1,Toggle2についても同様に、ToggleChangedが呼ばれるようにする
  31. 画面中央の再生ボタン(右向きの△)を押して実行
  32. 全てのチェックボックスをoffにするとスコアが1点増えて、どこか一カ所だけチェックされてる状態になります。
  33. シーンに名前(例:ClickGame)を付けて保存
    プログラム
  1. 課題1がうまくいったら課題2に移りましょう。
  2. UI→Sliderを1個、Scrollbarを2個設置
  3. 被らないよう場所を調整しましょう
  4. Inspectorで設定(Direction)を変えると縦向きにもできます。
  5. プログラムには下記を追加します。
  6. //11行目~
    public Slider sl;
    public Scrollbar sc;
    public Scrollbar sc1;
    
    //48行目~
    public void SetColor(){
      t.color = new Color(sl.value, sc.value, sc1.value);
    }
    
  7. GameObjectのInspecterViewで変数を埋めます。
  8. SrollbarとSliderのInspectoreViewにある「OnvalueChanged」のところでGameManagerのSetColorを呼ぶように設定してあげます
  1. 課題2がうまくいったら課題3に移りましょう。
  2. UI→Buttonを1個、UI→InputFieldを1個設置
  3. 被らないよう場所を調整しましょう
  4. プログラムには下記を追加します。
  5. //14行目~
    public Text inputtext;
    
    //53行目~
    public void SetName(){
      pname = inputtext.text;
      score = 0;
      time = 20.0f;
      tg.isOn = true;
      tg1.isOn = true;
      tg2.isOn = true;
    }
    
  6. GameObjectのInspecterViewで変数inputtextを設定します。
  7. placeholderのすぐ下にあるTextがInputFieldのテキストです。
  8. HierarchyViewからドラッグ&ドロップする操作でも変数を設定できます。
  9. ButtonのInspecterViewの下の方にある「On Click」のところで、GameManagerのSetNameを呼ぶように設定してあげます。

補足

余力がある人の改良の案

・各オブジェクトのInspectorのパラメータを変更してみる
・スクリプトの内容を変えてみる
など、色々やってみてください。
「別の何か」を作りたい人は、絵も無し動きも無しでできることを考えてみましょう。

Tips

ProjectViewでGameManagerを選んで右クリック→ShowInExprolerで、エクスプローラが開きます(提出時に使ってください)
SceneViewにてオブジェクトを選んでいる際、Alt+右クリックしながらタッチパッドを左右にスライドすることで、表示範囲を拡縮できます。(レイアウトを調整する際使ってください)

エディタについて

 標準でついてくるエディタMonoDevelopは日本語入力に不備が多々あります。
 入力せずに済ませるのが現実的ですが、どうしても日本語を入力したい場合は
 他のエディタで打ち込んでコピー&ペーストで持ってくるのが確実です。

 日本語対応するプログラムなども配布されているので、
 検索して試してみると良いかもしれません。
 容量は食いますがVisualStudioCommunityを導入するのもオススメです。

Unityのマニュアルについて

 以下に一式あります。
 http://docs.unity3d.com/ja/current/Manual/
 使いこなしたい人は色々見てみると良いと思います。

よくある質問

スクリプトを更新したのに、InspectorViewの変数が増えない

プログラムが間違っていてビルドエラーが出ている可能性が高いです。

エディタ上でbuildしてみましょう。

{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう