SlideShare une entreprise Scribd logo
1  sur  91
Télécharger pour lire hors ligne
Kumamoto Unity User Group (KUUG)



  Unity入門
                                    情報学部 情報学科   和泉 信生
12年9月7日金曜日
Kumamoto Unity User Group
12年9月7日金曜日
とりあえず開いてみよう




      c:¥ユーザー¥パブリック¥パブリックのドキュメント
      ¥Unity Projects¥AngryBots¥Assets¥AngryBots.unity




12年9月7日金曜日
起動!




12年9月7日金曜日
プレイしてみよう




         w, a, s, d (カーソル)=移動   マウス(プレス) = 視点移動(発砲)
12年9月7日金曜日
各部名称                 メニュー



             いろいろな機能(Windowsは位置が違う)

    シーンビュー       3Dの作業を行うビュー          インスペクタ


                     ゲームビュー
                  ゲーム実行時の画面

                 シーン中のオブジェクト

                 プロジェクトのアセット

                オブジェクトやアセットの設定
                       プロジェクトビュー
   階層ビュー

12年9月7日金曜日
各部名称

   メニュー        いろいろな機能(Windowsは位置が違う)

    シーンビュー         3Dの作業を行うビュー


    ゲームビュー          ゲーム実行時の画面

     階層ビュー         シーン中のオブジェクト

   プロジェクトビュー       プロジェクトのアセット

      インスペクタ      オブジェクトやアセットの設定


12年9月7日金曜日
ギズモ
               シーンビューで見ている向きを表す
             クリックするとその方向から見ることが出来る




12年9月7日金曜日
移動ツール (画面左上)

  ✤   選択した物体やビューの移動方法を選択




         ビュー
               物体移動   物体回転   物体拡縮
         移動     {
               シーンビュー中でクリックすると物体が選択できる
12年9月7日金曜日
プレイツール (画面中央)

  ✤   ゲームのプレイ、停止、一時停止、ステップ実行




              プレイ   一時停止   ステップ実行



                    青くなっている状態でゲーム実行中
                    プレイをもう一度クリックすると停止


12年9月7日金曜日
カメラの移動

  ✤   Altキーを押しながら            操作に慣れよう!

      ✤   マウス左ボタン → 回転

      ✤   マウス中ボタン → 移動

      ✤   マウス右ボタン → 拡大縮小 (スクロールでもOK)

  ✤   何かを選択して f キー → 物体に合わせた位置に移動

  ✤   スペースキー → マウスが指している画面をフルスクリーン化


12年9月7日金曜日
初めてのゲーム作成

  ✤   新規プロジェクトの作成
  ✤   メニューから File → New Project... を選択




12年9月7日金曜日
初めてのゲーム作成

  ✤   プロジェクトを作成する位置を選び、名前をつけてCreate
  ✤   (例) C:¥Documents and Settings¥Izumiken¥My DocumenHelloUnity
             灰色の部分はそれぞれ異なる




                                                全角文字は使わないで!


12年9月7日金曜日
初期画面
             WindowsとMacではメニューの位置が少し違う




12年9月7日金曜日
オブジェクトを作る
 ✤   メニューから GameObject → Create Other → Cube を選択




                                   Cubeが作成された




12年9月7日金曜日
オブジェクトを作る
 ✤   メニューから GameObject → Create Other → Plane を選択




                                    Planeが作成された




12年9月7日金曜日
オブジェクトを動かす
  ✤   Cubeを選択
       階層ビューから選択 / シーンビューでクリック

  ✤   移動ツールから移動を選択

                      ショートカット q,w,e,r


  ✤   緑(上向き)のハンドルをドラッグして上に移動




                     ゲームビューには何も表示されていない
12年9月7日金曜日
カメラの位置と向きを調節
     ✤   Main Cameraを選択
          シーンビューでカメラギズモをクリック / 階層ビューから




 ✤       上手くカメラを移動してください




                                  暗い、、、
12年9月7日金曜日
ライトの追加
 ✤   メニューから GameObject → Create Other → Point Light を選択




12年9月7日金曜日
インスペクタ

  ✤    選択しているオブジェクトの設定

        Color - 色
        Intensity - 光の強さ
        Range - 光の届く距離

                                   その他、、、、

      http://unity3d.com/support/documentation/Components/Components.html




                 ドキュメント読むべし!                                                Point Lightを
                                                                            選択した状態
12年9月7日金曜日
試しに赤く強くしてみた




             プレイをクリックしてみよう
                、、、特に変化なし

12年9月7日金曜日
剛体にしてみよう
  ✤   RigidBody = 剛体 = 重力に作用する物体
       ✤   Cubeを選択
      ✤    メニューから Component → Physics → Rigidbody を選択


                                            Rigidbodyが
                                            追加された




                                            プレイを
                                            クリックすると、、、
12年9月7日金曜日
落ちた?




12年9月7日金曜日
シーンの保存
   ✤   メニューから File → Save Scene を選択

                     ✤   名前を入力して Saveをクリック




12年9月7日金曜日
演習
  ✤   プレイすると球体が3つ地面に落ちて
      転がっていくゲームを作成してください


   (ヒント)
      ✤   Sphereを3つ作成し、
          Rigidbodyにしてください

      ✤   Planeを傾けてください




12年9月7日金曜日
プロジェクトとシーン

  ✤   プロジェクト
      Unityにおけるゲーム開発の単位
      全ての部品はプロジェクト内に保存する
      1つのフォルダーとして管理

  ✤   シーン
      ゲームの1つのステージやスタートメニューなど


             注意!
             Unityが扱うファイルをUnityの外で移動しちゃダメ!

12年9月7日金曜日
GameObjectとComponent
                情報学部 情報学科   和泉 信生
12年9月7日金曜日
新規プロジェクト作成

  ✤   新規プロジェクトの作成
  ✤   メニューから File → New Project... を選択




12年9月7日金曜日
GameObjectとComponent


  ✤   Unityの大きな特徴

  ✤   GameObject ! ゲーム中に存在するもの全て

  ✤   Component ! GameObjectの特性を定めるもの


12年9月7日金曜日
新規プロジェクト作成

  ✤   プロジェクトを作成する位置を選び、名前をつけてCreate
  ✤   (例) C:¥Documents and Settings¥Izumiken¥My Document¥Lecture2




                                             Character Controller
                                             Scripts
                                             Particles

                                             をチェック

12年9月7日金曜日
オブジェクトを作る
 ✤   メニューから GameObject → Create Other → Cube を選択




                                   Cubeが作成された




12年9月7日金曜日
Hierarchy (階層)ビュー




  ✤   ゲーム中に存在する全ての GameObject が表示されている

  ✤   初期状態ではMain Cameraだけが存在する

  ✤   Cubeやカメラ、ライトなど全てGameObject


12年9月7日金曜日
Inspector(インスペクタ)ビュー



✤   選択したGameObjectの属性を表示

✤   複数のComponentを保持

✤   編集可能




12年9月7日金曜日
UnityのGameObject
  ✤   GameObjectは基本情報と複数のComponentを持っている

  ✤   どんなComponentを持つかでGameObjectの機能が決まる

  GameObject                           Transformは
       (基本属性) 名前、レイヤ、タグ等             全てのGameObjectに
                                       必ず存在する
             Transform : 位置、回転、サイズ

             MeshRenderer : 描画方法

             MeshFilter : 3次元の形状

             BoxCollider : 箱型の衝突判定
12年9月7日金曜日
Componentの値設定

  ✤   インスペクタで値を変更することが出来る

      ✤   TransformコンポーネントのPosition値を変更してみよう




  ✤   シーンビューでの変更がインスペクタに反映される

      ✤   Cubeをシーンビューで移動や回転、拡大すると
          Transformコンポーネントの値が変化することを確認しよう

12年9月7日金曜日
Cubeを原点に移動

  ✤   Cubeを階層ビューで選択して、インスペクタからTransformコンポー
      ネントのPosition値を原点(0, 0, 0)に設定しよう




12年9月7日金曜日
GameObjectの名前を変更


  ✤   階層ビューでCubeを選択した状態でもう一度クリック
      (ゆっくりダブルクリック)

  ✤   名前をCubeParentに変更しよう

  ✤   インスペクタで変更してもOK



12年9月7日金曜日
Sphereを作る
 ✤    メニューから GameObject → Create Other → Sphere を選択




  ✤   前(Z軸方向)から見て
      右の図のような位置に移動させる

  ✤   Sphereの名前をSphereChildに変更




12年9月7日金曜日
親子関係の設定

  ✤   階層ビューでSphereChildをCubeParentにドラッグ




  ✤   SphereChildがCubeParentの子になった
12年9月7日金曜日
CubeParentを選択して移動

  ✤   CubeParentを移動するとSphereChildも一緒に移動する

  ✤   SphereChildを移動するとCubeParentは移動しない

             回転、拡大縮小も同じ




             親のTransformの変更は
               子にも影響する

12年9月7日金曜日
空のGameObject
 ✤   メニューから GameObject → Create Empty を選択


                                 Transformだけを持つ
                                GameObjectが作成された




 ✤   GameObjectをまとめるのに利用、音源など形のないものに利用
12年9月7日金曜日
演習

  ロボット型のGameObjectを作成せよ

                                   ど を
                                 な け
                              , V り付
  ✤   HeadはSphere        r l-C 貼    う
                       Ct と しよ
                          ー 用
                        ピ 利
  ✤   BodyはCube       コ

  ✤   手足はCylinder (拡大縮小を利用)

  ✤   Robotゲームオブジェクトは
      空のゲームオブジェクトを使用

  ✤   右下図のような階層構造と名前にせよ


12年9月7日金曜日
次のようなステージを作ってください




             PlaneとPoint lightを追加
             ロボットの位置を適当にずらす
12年9月7日金曜日
プレイヤーを配置

  ✤   中央にCapsule(カプセル)を作ってください

  ✤   名前をPlayerに変更してください




12年9月7日金曜日
CharacterController
  ✤   キャラクタをキーボードで操作できるようにするComponent

  ✤   Playerを選択した状態で               TPS用のコントローラ(≧3.0)
      メニューからComponent->Character->Platform Input Controller




             CapsuleColliderを置き換えてもいいですか? Replaceを選択
12年9月7日金曜日
プレイ

  ✤   カプセルをキーボード入力で操作できる


                           Playerにいくつかの
                            コンポーネントが
                               追加された




12年9月7日金曜日
カメラを追従

  ✤   MainCameraを選択して
      メニューから->Component-> Camera-Controll-> Smooth Follow



  Smooth Follow が追加された




12年9月7日金曜日
カメラが追従する対象物を設定
  ✤   カメラがプレイヤーを追いかけるようにする

      MainCameraを選択してインスペクタにMain Cameraが表示されている状態で

      PlayerをドラッグしてSmooth FollowのTarget属性にドロップ




                                      プレイしてみよう!



12年9月7日金曜日
フィールドを調整

  ✤   フィールドを広く      イン
                      スペ
                        クタ
                           を操作
  ✤   ライトを配置して明るく             しま
                                す




12年9月7日金曜日
Prefab(プレハブ)



  ✤   Unityにおける非常に重要な概念の一つ

  ✤   ゲームを構成する中で繰り返し使うもの (雛形)

  ✤   プレハブを変更すると複製物全てが変更される




12年9月7日金曜日
Prefab(プレハブ)を作る
                  Projectビューで
                Create->Prefabを選択




             空のPrefabが作成された




                名前をRobot Prefabに変更
12年9月7日金曜日
Prefab(プレハブ)を作る
  階層ビューのRobotをドラッグし
  ProjectビューのRobot Prefabにドロップ




                                 プレハブのアイコンが
                                  白から青に変化


   Robotが青字(プレハブと同期している)で表示された




12年9月7日金曜日
Robot Prefabをシーンに追加
  ✤   Robot Prefabをシーンにドラッグ

  ✤   RobotをコピーペーストしてもOK




12年9月7日金曜日
どちらかのRobotを変更してPrefabを更新




✤   変更をプレハブに適用




             変更したRobotを選択して
                インスペクタで
               Applyをクリック
12年9月7日金曜日
Prefabを直接編集
  ✤   プロジェクトビューからRobot Prefabを選択しインスペクタで編集




                            Robot PrefabのScaleを変更すると
                               両方のRobotが変更された



12年9月7日金曜日
Prefabを使いこなすことが大事



  ✤   ゲーム作成では同じオブジェクトを繰り返し使うことが多い

  ✤   大量のオブジェクトを1つ1つ変更する必要がなくなる




12年9月7日金曜日
Scripting
              情報学部 情報学科   和泉 信生
12年9月7日金曜日
新規プロジェクト作成

  ✤   新規プロジェクトの作成
  ✤   メニューから File → New Project... を選択




12年9月7日金曜日
新規プロジェクト作成

  ✤   プロジェクトを作成する位置を選び、名前をつけてCreate
  ✤   (例) C:¥Documents and Settings¥Izumiken¥My Document¥Lecture3




                                             Character Controller
                                             Scripts

                                             をチェック


12年9月7日金曜日
ちなみに


                          プロジェクト作った後 で
                          追加するときは
                          Assets -> Import Package




 ✤   ここではゲーム中で使うパッケージを選んでいます
 ✤   機能毎にまとめられたもの
 ✤   自分でパッケージを作ることも出来ます

12年9月7日金曜日
スクリプト
  ✤   Unityのゲームオブジェクトを操作するプログラム

  ✤   C#, Javascript, Booスクリプトが使える

  ✤   スクリプトはコンポーネントの一種で、
      ゲームオブジェクトにアタッチして使用する



      この講義ではC#を使います




12年9月7日金曜日
UnityのGameObject
  ✤   GameObjectは基本情報と複数のComponentを持っている

  ✤   どんなComponentを持つかでGameObjectの機能が決まる

  GameObject                           Transformは
       (基本属性) 名前、レイヤ、タグ等             全てのGameObjectに
                                       必ず存在する
             Transform : 位置、回転、サイズ

             MeshRenderer : 描画方法

             MeshFilter : 3次元の形状

             BoxCollider : 箱型の衝突判定
12年9月7日金曜日
オブジェクトを作る
 ✤   メニューから GameObject → Create Other → Cube を選択




                                   Cubeが作成された




12年9月7日金曜日
C#スクリプトの作成
  ✤   プロジェクトビューのメニューからC Sharp Scriptを選択

                 ✤   名前をCubeScriptに変更



                 ✤   ダブルクリックしてエディタを起動




                 ✤   クラス名を CubeScriptに変更
12年9月7日金曜日
ゲームオブジェクトを回転させるスクリプト
 using UnityEngine;
 using System.Collections;

 public class CubeScript : MonoBehaviour {

 "   // Use this for initialization
 "   void Start () {
 "   }
 "
 "   // Update is called once per frame
 "   void Update () {
 "   " transform.Rotate(Vector3.up * 90 * Time.deltaTime);
 "   }
 }
12年9月7日金曜日
スクリプトをゲームオブジェクトにアタッチ

  ✤   スクリプトをCubeにドラッグアンドドロップ




        インスペクタでコンポーネントが
         アタッチされたことを確認
12年9月7日金曜日
プレイして確認

  ✤   オブジェクトが回転している




12年9月7日金曜日
スクリプト解説
                                使用するネームスペースの指定


  using UnityEngine;
  using System.Collections;

  public class CubeScript : MonoBehaviour {
  }

              全てのC#スクリプトはMonoBehaviourを継承する
                                        C#では継承は “:” で表す


     クラスの宣言

12年9月7日金曜日
スクリプト解説
  // Use this for initialization
  void Start () {
      //初期化処理を記述するメソッド
  }

  // Update is called once per frame
  void Update () {
      //毎フレームごとの処理を記述するメソッド
  " transform.Rotate(Vector3.up * 90 * Time.deltaTime);
  }

             このスクリプトがアタッチされた
               ゲームオブジェクトを回転
                 (あとで詳しく解説)

12年9月7日金曜日
ゲームループ
  ✤   Unityではゲームの処理がループ状に繰り返される
      1回のループをフレームと呼ぶ
             プレイ

                                        Startメソッドは
       Startメソッド
               Startメソッド
                    Startメソッド
                          Startメソッド    一度だけ実行される

      Updateメソッド
              Updateメソッド               Updateメソッドは
                 Updateメソッド
                      Updateメソッド
                                      フレームごとに実行される


                                      他にもいくつかのメソッドが
             スクリプトスクリプト                 ループ中で呼ばれる
                    スクリプト
                       スクリプト
12年9月7日金曜日
スクリプト解説
  // Update is called once per frame
  void Update () {
  " transform.Rotate(Vector3.up * 90 * Time.deltaTime);
  }
     transform変数 :オブジェクトのTransformコンポーネントへの参照

    Rotateメソッド:Transformが持つメソッド、指定した値で回転

               Vector3:3次元ベクトル[x, y, z]を表すクラス

             Vector3.up:3次元ベクトルの [0, 1, 0] を持つインスタンス

                Time:ゲーム中の時間を表すクラス

    Time.deltaTime:前フレームからの経過時間を保持するクラス変数



12年9月7日金曜日
スクリプト解説


        transform.Rotate(Vector3.up * 90 * Time.deltaTime);
             y軸(上向き)周りに、90×前フレームからの経過時間回転
                フレームの描画は処理速度に依存するので、
                      早くなったり遅くなったりする




                    Time.deltaTimeを掛けることで、
                         一定速度で回転させる

                                       この例では1秒間に90度回転
12年9月7日金曜日
スクリプトを変更
using UnityEngine;
using System.Collections;

public class CubeScript : MonoBehaviour {
   public float rotSpeed = 90.0f; //回転速度
"    // Use this for initialization      回転速度をフィールドに
"    void Start () {
"    }
"
"    // Update is called once per frame
"    void Update () {
"    " transform.Rotate(Vector3.up * rotSpeed * Time.deltaTime);
"    }
}
12年9月7日金曜日
インスペクタを確認
  ✤   Cubeを選択してインスペクタを見ると
      今作成した変数がGUIに表示されている!




                                       h !
                                    yl!
         プログラム中でpublic で宣言した変数は
                                   t
                                  S
             インスペクタで編集できる



      プログラムを書き換えずに、プレイしながら最適な値に調整できる
12年9月7日金曜日
リファレンス




             C#




12年9月7日金曜日
入力処理
  ✤   キーボードやマウス、ゲームコントローラの入力は
      Inputクラスで処理する
             ✤   Sphereを作成してください

             ✤   SphereController というC#スクリプトを作り、
                 Sphereゲームオブジェクトにアタッチしてください

             ✤   SphereControllerのUpdateメソッドを次のようにしてください

        !        void Update () {
        !        ! if(Input.GetKey("left")){
        !        ! ! transform.Translate(Vector3.left * Time.deltaTime);
        !        ! }
        !        }
12年9月7日金曜日
スクリプト解説
        void Update () {
        ! if(Input.GetKey("left")){
        ! ! transform.Translate(Vector3.left * Time.deltaTime);
        ! }
        }
           Input.GetKey():指定したキーが押されている場合 true
      Input.GetKey(“left”):カーソルキー左
       transform.Translate:平行移動するメソッド
               Vector3.left:x軸正の方向[1,0, 0]を保持するインスタンス
    演習
                “up”, “down”, “right”についての処理を追加して
             カーソルキーでオブジェクトを移動できるようにしてください
             移動速度をインスペクタで操作できるようにしてください
                 カメラがSphereに追従するようにしてください
12年9月7日金曜日
using UnityEngine;
 using System.Collections;
 public class SphereController : MonoBehaviour {
 	

   public float moveSpeed = 1.0f;
 	

   void Start () {
 	

   }
 	

 	

   void Update () {
 	

   	

 if(Input.GetKey("left")){
 	

   	

 	

 transform.Translate(Vector3.left * moveSpeed * Time.deltaTime);
 	

   	

 }
 	

   	

 if(Input.GetKey("right")){
 	

   	

 	

 transform.Translate(-Vector3.left * moveSpeed * Time.deltaTime);
 	

   	

 }
 	

   	

 if(Input.GetKey("up")){
 	

   	

 	

 transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
 	

   	

 }
 	

   	

 if(Input.GetKey("down")){
 	

   	

 	

 transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
 	

   	

 }
 	

 	

   }
 }
12年9月7日金曜日
インスタンス生成
  ✤   スクリプトを用いてプレハブからインスタンスを生成する

      ✤   Cubeをプレハブにしてください
      ✤   CubeMakerスクリプトを作成し、Sphereにアタッチしてください
      ✤   CubeMakerクラス(の内部)を次のようにしてください
 public class CubeMaker : MonoBehaviour {
 	

 	

 public GameObject gObject;
 	

 	

 // Update is called once per frame
 	

 void Update () {
 	

 	

 if(Input.GetKeyDown("a")){
 	

 	

 	

 GameObject.Instantiate(gObject, transform.position, transform.rotation);
 	

 	

 }
 	

 }
 }

      ✤   インスペクタで、G ObjectにCubeのプレハブをドロップしてください
12年9月7日金曜日
スクリプト解説
public class CubeMaker : MonoBehaviour {
	

	

 public GameObject gObject;
	

	

 // Update is called once per frame
	

 void Update () {
	

 	

 if(Input.GetKeyDown("a")){
	

 	

 	

 GameObject.Instantiate(gObject, transform.position, transform.rotation);
	

 	

 }
	

 }
}

      GameObjectクラス:全てのゲームオブジェクトはGameObject型
     Input.GetKeyDown:キーが押された時にtrue
GameObject.Instantiate:指定したオブジェクトの複製を作成するメソッド
      transform.position:オブジェクトの位置を保持
      transform.rotation:オブジェクトの回転を保持

12年9月7日金曜日
プレイして確認

  ✤   aキーを押すとCubeが作成される




12年9月7日金曜日
他のゲームオブジェクトの参照



                        DnD

                           public GameObject gObject;
                              公開   型指定        変数名
✤   インスペクターにドラッグして参照を設定
    (参照を設定する方法の1つ)

       public - エディタに表示される (他のスクリプトから参照できる)
       private - エディタに表示されない(他のスクリプトから参照できない)
12年9月7日金曜日
型指定

 public GameObject gObject;   public Rigidbody rObject;
 GameObjectが入る                Rigidbodyコンポーネントを
 なんでもOK                       持ったものだけ入る




12年9月7日金曜日
ゲームオブジェクトを破棄
 ✤   CubeMakerのUpdateメソッドを次のように変更してください

 void Update () {
 	

 if(Input.GetKeyDown("a")){
 	

 	

 GameObject go =
 	

 	

 	

 (GameObject) GameObject.Instantiate(
 	

 	

 	

 	

 gObject, transform.position, transform.rotation);
 	

 	

 GameObject.Destroy(go, 3);
 	

 }
 }

 変数に代入                                  go変数に格納されたオブジェクトを
                                        3秒後に破棄



12年9月7日金曜日
Rigidbodyをスクリプトで操作
  ✤   Cylinderを作成し名前をShooterに変更してください
  ✤   ShooterからCupsuleColliderを削除してください
  ✤   Shootスクリプトを作成し、Shooterにアタッチしてください

  ✤   Sphereを作成し名前をBulletに変更してください
  ✤   BulletにRigidbodyコンポーネントをアタッチしてください
  ✤   Bulletをプレハブにしてください


             図のように
             Shooterを少し傾けてください


12年9月7日金曜日
Rigidbodyをスクリプトで操作
     ✤    Shootクラスを次のようにしてください

    public class Shoot : MonoBehaviour {

    	

   public Rigidbody bullet;
    	

    	

   // Update is called once per frame
    	

   void Update () {
    	

   	

 if(Input.GetKeyDown("s")){
    	

   	

 	

 Rigidbody r =
    	

   	

 	

 	

 (Rigidbody)GameObject.Instantiate(
    	

   	

 	

 	

 	

 bullet, transform.position, transform.rotation);
    	

   	

 	

 r.AddRelativeForce(Vector3.up * 1000);
    	

   	

 }
    	

   }
    }

✤     インスペクタで BulletフィールドにBulletプレハブをセットしてください
12年9月7日金曜日
プレイして確認




12年9月7日金曜日
スクリプト解説
  public class Shoot : MonoBehaviour {

  	

   public Rigidbody bullet;
  	

  	

   void Update () {
  	

   	

 if(Input.GetKeyDown("s")){
  	

   	

 	

 Rigidbody r =
  	

   	

 	

 	

 (Rigidbody) GameObject.Instantiate(
  	

   	

 	

 	

 	

 bullet, transform.position, transform.rotation);
  	

   	

 	

 r.AddRelativeForce(Vector3.up * 1000);
  	

   	

 }
  	

   }
  }

         AddRelativeForce:リジッドボディの向きに応じて力を加える




12年9月7日金曜日
どういうふうに勉強するといいですか?

  ✤   ドキュメントのサンプルコード (重要!)

  ✤   書籍 (Unityマスターブックもよろしくお願いします)

  ✤   Unity Student - http://www.unity3dstudent.com/

  ✤   講義資料 - https://sites.google.com/site/shinobuizumi/home/2012-
      animation

  ✤   Unityユーザー助け合い所(日本語で質問するならここ)
      - https://www.facebook.com/groups/unityuserj/

12年9月7日金曜日
KUUGゲーム!




  ✤   熊本Unity User Groupを題材にして何かをUnityで作ってみて下さ
      い。




12年9月7日金曜日
質問はこちらまで
      ✤   崇城大学情報学部
          和泉助教 の部屋(研究室)

      ✤   izumi@cis.sojo-u.ac.jp 

      ✤   @shinobu_shiva

      ✤   http://www.cis.sojo-u.ac.jp/~izumi
                                    mail address


12年9月7日金曜日

Contenu connexe

Similaire à Kuug 第1回

iPhoneアプリを作ってみよう
iPhoneアプリを作ってみようiPhoneアプリを作ってみよう
iPhoneアプリを作ってみようNagao Shun
 
Unityで作るiOSゲームアプリ
Unityで作るiOSゲームアプリUnityで作るiOSゲームアプリ
Unityで作るiOSゲームアプリkeiso watanabe
 
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Takuya Fujimura
 
iOS/Androidアプリ「こんな息子に育てた覚えはない」について
iOS/Androidアプリ「こんな息子に育てた覚えはない」についてiOS/Androidアプリ「こんな息子に育てた覚えはない」について
iOS/Androidアプリ「こんな息子に育てた覚えはない」についてミルク株式会社
 
ドザーに贈るMacのちょっと効率的な使い方
ドザーに贈るMacのちょっと効率的な使い方ドザーに贈るMacのちょっと効率的な使い方
ドザーに贈るMacのちょっと効率的な使い方Takuya Fujimura
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化COLOPL, Inc.
 
UnityでつくるはじめてのPONG
UnityでつくるはじめてのPONGUnityでつくるはじめてのPONG
UnityでつくるはじめてのPONGKohei Kadowaki
 
Flashup13 Basic Training of Flare3D
Flashup13 Basic Training of Flare3DFlashup13 Basic Training of Flare3D
Flashup13 Basic Training of Flare3DKatsushi Suzuki
 
中高校生対象プログラミング講座Part1
中高校生対象プログラミング講座Part1中高校生対象プログラミング講座Part1
中高校生対象プログラミング講座Part1優希 山本
 

Similaire à Kuug 第1回 (9)

iPhoneアプリを作ってみよう
iPhoneアプリを作ってみようiPhoneアプリを作ってみよう
iPhoneアプリを作ってみよう
 
Unityで作るiOSゲームアプリ
Unityで作るiOSゲームアプリUnityで作るiOSゲームアプリ
Unityで作るiOSゲームアプリ
 
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能
 
iOS/Androidアプリ「こんな息子に育てた覚えはない」について
iOS/Androidアプリ「こんな息子に育てた覚えはない」についてiOS/Androidアプリ「こんな息子に育てた覚えはない」について
iOS/Androidアプリ「こんな息子に育てた覚えはない」について
 
ドザーに贈るMacのちょっと効率的な使い方
ドザーに贈るMacのちょっと効率的な使い方ドザーに贈るMacのちょっと効率的な使い方
ドザーに贈るMacのちょっと効率的な使い方
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化
 
UnityでつくるはじめてのPONG
UnityでつくるはじめてのPONGUnityでつくるはじめてのPONG
UnityでつくるはじめてのPONG
 
Flashup13 Basic Training of Flare3D
Flashup13 Basic Training of Flare3DFlashup13 Basic Training of Flare3D
Flashup13 Basic Training of Flare3D
 
中高校生対象プログラミング講座Part1
中高校生対象プログラミング講座Part1中高校生対象プログラミング講座Part1
中高校生対象プログラミング講座Part1
 

Dernier

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Dernier (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Kuug 第1回

  • 1. Kumamoto Unity User Group (KUUG) Unity入門 情報学部 情報学科 和泉 信生 12年9月7日金曜日
  • 2. Kumamoto Unity User Group 12年9月7日金曜日
  • 3. とりあえず開いてみよう c:¥ユーザー¥パブリック¥パブリックのドキュメント ¥Unity Projects¥AngryBots¥Assets¥AngryBots.unity 12年9月7日金曜日
  • 5. プレイしてみよう w, a, s, d (カーソル)=移動 マウス(プレス) = 視点移動(発砲) 12年9月7日金曜日
  • 6. 各部名称 メニュー いろいろな機能(Windowsは位置が違う) シーンビュー 3Dの作業を行うビュー インスペクタ ゲームビュー ゲーム実行時の画面 シーン中のオブジェクト プロジェクトのアセット オブジェクトやアセットの設定 プロジェクトビュー 階層ビュー 12年9月7日金曜日
  • 7. 各部名称 メニュー いろいろな機能(Windowsは位置が違う) シーンビュー 3Dの作業を行うビュー ゲームビュー ゲーム実行時の画面 階層ビュー シーン中のオブジェクト プロジェクトビュー プロジェクトのアセット インスペクタ オブジェクトやアセットの設定 12年9月7日金曜日
  • 8. ギズモ シーンビューで見ている向きを表す クリックするとその方向から見ることが出来る 12年9月7日金曜日
  • 9. 移動ツール (画面左上) ✤ 選択した物体やビューの移動方法を選択 ビュー 物体移動 物体回転 物体拡縮 移動 { シーンビュー中でクリックすると物体が選択できる 12年9月7日金曜日
  • 10. プレイツール (画面中央) ✤ ゲームのプレイ、停止、一時停止、ステップ実行 プレイ 一時停止 ステップ実行 青くなっている状態でゲーム実行中 プレイをもう一度クリックすると停止 12年9月7日金曜日
  • 11. カメラの移動 ✤ Altキーを押しながら 操作に慣れよう! ✤ マウス左ボタン → 回転 ✤ マウス中ボタン → 移動 ✤ マウス右ボタン → 拡大縮小 (スクロールでもOK) ✤ 何かを選択して f キー → 物体に合わせた位置に移動 ✤ スペースキー → マウスが指している画面をフルスクリーン化 12年9月7日金曜日
  • 12. 初めてのゲーム作成 ✤ 新規プロジェクトの作成 ✤ メニューから File → New Project... を選択 12年9月7日金曜日
  • 13. 初めてのゲーム作成 ✤ プロジェクトを作成する位置を選び、名前をつけてCreate ✤ (例) C:¥Documents and Settings¥Izumiken¥My DocumenHelloUnity 灰色の部分はそれぞれ異なる 全角文字は使わないで! 12年9月7日金曜日
  • 14. 初期画面 WindowsとMacではメニューの位置が少し違う 12年9月7日金曜日
  • 15. オブジェクトを作る ✤ メニューから GameObject → Create Other → Cube を選択 Cubeが作成された 12年9月7日金曜日
  • 16. オブジェクトを作る ✤ メニューから GameObject → Create Other → Plane を選択 Planeが作成された 12年9月7日金曜日
  • 17. オブジェクトを動かす ✤ Cubeを選択  階層ビューから選択 / シーンビューでクリック ✤ 移動ツールから移動を選択 ショートカット q,w,e,r ✤ 緑(上向き)のハンドルをドラッグして上に移動 ゲームビューには何も表示されていない 12年9月7日金曜日
  • 18. カメラの位置と向きを調節 ✤ Main Cameraを選択  シーンビューでカメラギズモをクリック / 階層ビューから ✤ 上手くカメラを移動してください 暗い、、、 12年9月7日金曜日
  • 19. ライトの追加 ✤ メニューから GameObject → Create Other → Point Light を選択 12年9月7日金曜日
  • 20. インスペクタ ✤ 選択しているオブジェクトの設定 Color - 色 Intensity - 光の強さ Range - 光の届く距離 その他、、、、 http://unity3d.com/support/documentation/Components/Components.html ドキュメント読むべし! Point Lightを 選択した状態 12年9月7日金曜日
  • 21. 試しに赤く強くしてみた プレイをクリックしてみよう 、、、特に変化なし 12年9月7日金曜日
  • 22. 剛体にしてみよう ✤ RigidBody = 剛体 = 重力に作用する物体 ✤ Cubeを選択 ✤ メニューから Component → Physics → Rigidbody を選択 Rigidbodyが 追加された プレイを クリックすると、、、 12年9月7日金曜日
  • 24. シーンの保存 ✤ メニューから File → Save Scene を選択 ✤ 名前を入力して Saveをクリック 12年9月7日金曜日
  • 25. 演習 ✤ プレイすると球体が3つ地面に落ちて 転がっていくゲームを作成してください (ヒント) ✤ Sphereを3つ作成し、 Rigidbodyにしてください ✤ Planeを傾けてください 12年9月7日金曜日
  • 26. プロジェクトとシーン ✤ プロジェクト Unityにおけるゲーム開発の単位 全ての部品はプロジェクト内に保存する 1つのフォルダーとして管理 ✤ シーン ゲームの1つのステージやスタートメニューなど 注意! Unityが扱うファイルをUnityの外で移動しちゃダメ! 12年9月7日金曜日
  • 27. GameObjectとComponent 情報学部 情報学科 和泉 信生 12年9月7日金曜日
  • 28. 新規プロジェクト作成 ✤ 新規プロジェクトの作成 ✤ メニューから File → New Project... を選択 12年9月7日金曜日
  • 29. GameObjectとComponent ✤ Unityの大きな特徴 ✤ GameObject ! ゲーム中に存在するもの全て ✤ Component ! GameObjectの特性を定めるもの 12年9月7日金曜日
  • 30. 新規プロジェクト作成 ✤ プロジェクトを作成する位置を選び、名前をつけてCreate ✤ (例) C:¥Documents and Settings¥Izumiken¥My Document¥Lecture2 Character Controller Scripts Particles をチェック 12年9月7日金曜日
  • 31. オブジェクトを作る ✤ メニューから GameObject → Create Other → Cube を選択 Cubeが作成された 12年9月7日金曜日
  • 32. Hierarchy (階層)ビュー ✤ ゲーム中に存在する全ての GameObject が表示されている ✤ 初期状態ではMain Cameraだけが存在する ✤ Cubeやカメラ、ライトなど全てGameObject 12年9月7日金曜日
  • 33. Inspector(インスペクタ)ビュー ✤ 選択したGameObjectの属性を表示 ✤ 複数のComponentを保持 ✤ 編集可能 12年9月7日金曜日
  • 34. UnityのGameObject ✤ GameObjectは基本情報と複数のComponentを持っている ✤ どんなComponentを持つかでGameObjectの機能が決まる GameObject Transformは (基本属性) 名前、レイヤ、タグ等 全てのGameObjectに 必ず存在する Transform : 位置、回転、サイズ MeshRenderer : 描画方法 MeshFilter : 3次元の形状 BoxCollider : 箱型の衝突判定 12年9月7日金曜日
  • 35. Componentの値設定 ✤ インスペクタで値を変更することが出来る ✤ TransformコンポーネントのPosition値を変更してみよう ✤ シーンビューでの変更がインスペクタに反映される ✤ Cubeをシーンビューで移動や回転、拡大すると Transformコンポーネントの値が変化することを確認しよう 12年9月7日金曜日
  • 36. Cubeを原点に移動 ✤ Cubeを階層ビューで選択して、インスペクタからTransformコンポー ネントのPosition値を原点(0, 0, 0)に設定しよう 12年9月7日金曜日
  • 37. GameObjectの名前を変更 ✤ 階層ビューでCubeを選択した状態でもう一度クリック (ゆっくりダブルクリック) ✤ 名前をCubeParentに変更しよう ✤ インスペクタで変更してもOK 12年9月7日金曜日
  • 38. Sphereを作る ✤ メニューから GameObject → Create Other → Sphere を選択 ✤ 前(Z軸方向)から見て 右の図のような位置に移動させる ✤ Sphereの名前をSphereChildに変更 12年9月7日金曜日
  • 39. 親子関係の設定 ✤ 階層ビューでSphereChildをCubeParentにドラッグ ✤ SphereChildがCubeParentの子になった 12年9月7日金曜日
  • 40. CubeParentを選択して移動 ✤ CubeParentを移動するとSphereChildも一緒に移動する ✤ SphereChildを移動するとCubeParentは移動しない 回転、拡大縮小も同じ 親のTransformの変更は 子にも影響する 12年9月7日金曜日
  • 41. 空のGameObject ✤ メニューから GameObject → Create Empty を選択 Transformだけを持つ GameObjectが作成された ✤ GameObjectをまとめるのに利用、音源など形のないものに利用 12年9月7日金曜日
  • 42. 演習 ロボット型のGameObjectを作成せよ ど を な け , V り付 ✤ HeadはSphere r l-C 貼 う Ct と しよ ー 用 ピ 利 ✤ BodyはCube コ ✤ 手足はCylinder (拡大縮小を利用) ✤ Robotゲームオブジェクトは 空のゲームオブジェクトを使用 ✤ 右下図のような階層構造と名前にせよ 12年9月7日金曜日
  • 43. 次のようなステージを作ってください PlaneとPoint lightを追加 ロボットの位置を適当にずらす 12年9月7日金曜日
  • 44. プレイヤーを配置 ✤ 中央にCapsule(カプセル)を作ってください ✤ 名前をPlayerに変更してください 12年9月7日金曜日
  • 45. CharacterController ✤ キャラクタをキーボードで操作できるようにするComponent ✤ Playerを選択した状態で TPS用のコントローラ(≧3.0) メニューからComponent->Character->Platform Input Controller CapsuleColliderを置き換えてもいいですか? Replaceを選択 12年9月7日金曜日
  • 46. プレイ ✤ カプセルをキーボード入力で操作できる Playerにいくつかの コンポーネントが 追加された 12年9月7日金曜日
  • 47. カメラを追従 ✤ MainCameraを選択して メニューから->Component-> Camera-Controll-> Smooth Follow Smooth Follow が追加された 12年9月7日金曜日
  • 48. カメラが追従する対象物を設定 ✤ カメラがプレイヤーを追いかけるようにする MainCameraを選択してインスペクタにMain Cameraが表示されている状態で PlayerをドラッグしてSmooth FollowのTarget属性にドロップ プレイしてみよう! 12年9月7日金曜日
  • 49. フィールドを調整 ✤ フィールドを広く イン スペ クタ を操作 ✤ ライトを配置して明るく しま す 12年9月7日金曜日
  • 50. Prefab(プレハブ) ✤ Unityにおける非常に重要な概念の一つ ✤ ゲームを構成する中で繰り返し使うもの (雛形) ✤ プレハブを変更すると複製物全てが変更される 12年9月7日金曜日
  • 51. Prefab(プレハブ)を作る Projectビューで Create->Prefabを選択 空のPrefabが作成された 名前をRobot Prefabに変更 12年9月7日金曜日
  • 52. Prefab(プレハブ)を作る 階層ビューのRobotをドラッグし ProjectビューのRobot Prefabにドロップ プレハブのアイコンが 白から青に変化 Robotが青字(プレハブと同期している)で表示された 12年9月7日金曜日
  • 53. Robot Prefabをシーンに追加 ✤ Robot Prefabをシーンにドラッグ ✤ RobotをコピーペーストしてもOK 12年9月7日金曜日
  • 54. どちらかのRobotを変更してPrefabを更新 ✤ 変更をプレハブに適用 変更したRobotを選択して インスペクタで Applyをクリック 12年9月7日金曜日
  • 55. Prefabを直接編集 ✤ プロジェクトビューからRobot Prefabを選択しインスペクタで編集 Robot PrefabのScaleを変更すると 両方のRobotが変更された 12年9月7日金曜日
  • 56. Prefabを使いこなすことが大事 ✤ ゲーム作成では同じオブジェクトを繰り返し使うことが多い ✤ 大量のオブジェクトを1つ1つ変更する必要がなくなる 12年9月7日金曜日
  • 57. Scripting 情報学部 情報学科 和泉 信生 12年9月7日金曜日
  • 58. 新規プロジェクト作成 ✤ 新規プロジェクトの作成 ✤ メニューから File → New Project... を選択 12年9月7日金曜日
  • 59. 新規プロジェクト作成 ✤ プロジェクトを作成する位置を選び、名前をつけてCreate ✤ (例) C:¥Documents and Settings¥Izumiken¥My Document¥Lecture3 Character Controller Scripts をチェック 12年9月7日金曜日
  • 60. ちなみに プロジェクト作った後 で 追加するときは Assets -> Import Package ✤ ここではゲーム中で使うパッケージを選んでいます ✤ 機能毎にまとめられたもの ✤ 自分でパッケージを作ることも出来ます 12年9月7日金曜日
  • 61. スクリプト ✤ Unityのゲームオブジェクトを操作するプログラム ✤ C#, Javascript, Booスクリプトが使える ✤ スクリプトはコンポーネントの一種で、 ゲームオブジェクトにアタッチして使用する この講義ではC#を使います 12年9月7日金曜日
  • 62. UnityのGameObject ✤ GameObjectは基本情報と複数のComponentを持っている ✤ どんなComponentを持つかでGameObjectの機能が決まる GameObject Transformは (基本属性) 名前、レイヤ、タグ等 全てのGameObjectに 必ず存在する Transform : 位置、回転、サイズ MeshRenderer : 描画方法 MeshFilter : 3次元の形状 BoxCollider : 箱型の衝突判定 12年9月7日金曜日
  • 63. オブジェクトを作る ✤ メニューから GameObject → Create Other → Cube を選択 Cubeが作成された 12年9月7日金曜日
  • 64. C#スクリプトの作成 ✤ プロジェクトビューのメニューからC Sharp Scriptを選択 ✤ 名前をCubeScriptに変更 ✤ ダブルクリックしてエディタを起動 ✤ クラス名を CubeScriptに変更 12年9月7日金曜日
  • 65. ゲームオブジェクトを回転させるスクリプト using UnityEngine; using System.Collections; public class CubeScript : MonoBehaviour { " // Use this for initialization " void Start () { " } " " // Update is called once per frame " void Update () { " " transform.Rotate(Vector3.up * 90 * Time.deltaTime); " } } 12年9月7日金曜日
  • 66. スクリプトをゲームオブジェクトにアタッチ ✤ スクリプトをCubeにドラッグアンドドロップ インスペクタでコンポーネントが アタッチされたことを確認 12年9月7日金曜日
  • 67. プレイして確認 ✤ オブジェクトが回転している 12年9月7日金曜日
  • 68. スクリプト解説 使用するネームスペースの指定 using UnityEngine; using System.Collections; public class CubeScript : MonoBehaviour { } 全てのC#スクリプトはMonoBehaviourを継承する C#では継承は “:” で表す クラスの宣言 12年9月7日金曜日
  • 69. スクリプト解説 // Use this for initialization void Start () { //初期化処理を記述するメソッド } // Update is called once per frame void Update () { //毎フレームごとの処理を記述するメソッド " transform.Rotate(Vector3.up * 90 * Time.deltaTime); } このスクリプトがアタッチされた ゲームオブジェクトを回転 (あとで詳しく解説) 12年9月7日金曜日
  • 70. ゲームループ ✤ Unityではゲームの処理がループ状に繰り返される 1回のループをフレームと呼ぶ プレイ Startメソッドは Startメソッド Startメソッド Startメソッド Startメソッド 一度だけ実行される Updateメソッド Updateメソッド Updateメソッドは Updateメソッド Updateメソッド フレームごとに実行される 他にもいくつかのメソッドが スクリプトスクリプト ループ中で呼ばれる スクリプト スクリプト 12年9月7日金曜日
  • 71. スクリプト解説 // Update is called once per frame void Update () { " transform.Rotate(Vector3.up * 90 * Time.deltaTime); } transform変数 :オブジェクトのTransformコンポーネントへの参照 Rotateメソッド:Transformが持つメソッド、指定した値で回転 Vector3:3次元ベクトル[x, y, z]を表すクラス Vector3.up:3次元ベクトルの [0, 1, 0] を持つインスタンス Time:ゲーム中の時間を表すクラス Time.deltaTime:前フレームからの経過時間を保持するクラス変数 12年9月7日金曜日
  • 72. スクリプト解説 transform.Rotate(Vector3.up * 90 * Time.deltaTime); y軸(上向き)周りに、90×前フレームからの経過時間回転 フレームの描画は処理速度に依存するので、 早くなったり遅くなったりする Time.deltaTimeを掛けることで、 一定速度で回転させる この例では1秒間に90度回転 12年9月7日金曜日
  • 73. スクリプトを変更 using UnityEngine; using System.Collections; public class CubeScript : MonoBehaviour { public float rotSpeed = 90.0f; //回転速度 " // Use this for initialization 回転速度をフィールドに " void Start () { " } " " // Update is called once per frame " void Update () { " " transform.Rotate(Vector3.up * rotSpeed * Time.deltaTime); " } } 12年9月7日金曜日
  • 74. インスペクタを確認 ✤ Cubeを選択してインスペクタを見ると 今作成した変数がGUIに表示されている! h ! yl! プログラム中でpublic で宣言した変数は t S インスペクタで編集できる プログラムを書き換えずに、プレイしながら最適な値に調整できる 12年9月7日金曜日
  • 75. リファレンス C# 12年9月7日金曜日
  • 76. 入力処理 ✤ キーボードやマウス、ゲームコントローラの入力は Inputクラスで処理する ✤ Sphereを作成してください ✤ SphereController というC#スクリプトを作り、 Sphereゲームオブジェクトにアタッチしてください ✤ SphereControllerのUpdateメソッドを次のようにしてください ! void Update () { ! ! if(Input.GetKey("left")){ ! ! ! transform.Translate(Vector3.left * Time.deltaTime); ! ! } ! } 12年9月7日金曜日
  • 77. スクリプト解説 void Update () { ! if(Input.GetKey("left")){ ! ! transform.Translate(Vector3.left * Time.deltaTime); ! } } Input.GetKey():指定したキーが押されている場合 true Input.GetKey(“left”):カーソルキー左 transform.Translate:平行移動するメソッド Vector3.left:x軸正の方向[1,0, 0]を保持するインスタンス 演習 “up”, “down”, “right”についての処理を追加して カーソルキーでオブジェクトを移動できるようにしてください 移動速度をインスペクタで操作できるようにしてください カメラがSphereに追従するようにしてください 12年9月7日金曜日
  • 78. using UnityEngine; using System.Collections; public class SphereController : MonoBehaviour { public float moveSpeed = 1.0f; void Start () { } void Update () { if(Input.GetKey("left")){ transform.Translate(Vector3.left * moveSpeed * Time.deltaTime); } if(Input.GetKey("right")){ transform.Translate(-Vector3.left * moveSpeed * Time.deltaTime); } if(Input.GetKey("up")){ transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime); } if(Input.GetKey("down")){ transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime); } } } 12年9月7日金曜日
  • 79. インスタンス生成 ✤ スクリプトを用いてプレハブからインスタンスを生成する ✤ Cubeをプレハブにしてください ✤ CubeMakerスクリプトを作成し、Sphereにアタッチしてください ✤ CubeMakerクラス(の内部)を次のようにしてください public class CubeMaker : MonoBehaviour { public GameObject gObject; // Update is called once per frame void Update () { if(Input.GetKeyDown("a")){ GameObject.Instantiate(gObject, transform.position, transform.rotation); } } } ✤ インスペクタで、G ObjectにCubeのプレハブをドロップしてください 12年9月7日金曜日
  • 80. スクリプト解説 public class CubeMaker : MonoBehaviour { public GameObject gObject; // Update is called once per frame void Update () { if(Input.GetKeyDown("a")){ GameObject.Instantiate(gObject, transform.position, transform.rotation); } } } GameObjectクラス:全てのゲームオブジェクトはGameObject型 Input.GetKeyDown:キーが押された時にtrue GameObject.Instantiate:指定したオブジェクトの複製を作成するメソッド transform.position:オブジェクトの位置を保持 transform.rotation:オブジェクトの回転を保持 12年9月7日金曜日
  • 81. プレイして確認 ✤ aキーを押すとCubeが作成される 12年9月7日金曜日
  • 82. 他のゲームオブジェクトの参照 DnD public GameObject gObject; 公開 型指定 変数名 ✤ インスペクターにドラッグして参照を設定 (参照を設定する方法の1つ) public - エディタに表示される (他のスクリプトから参照できる) private - エディタに表示されない(他のスクリプトから参照できない) 12年9月7日金曜日
  • 83. 型指定 public GameObject gObject; public Rigidbody rObject; GameObjectが入る Rigidbodyコンポーネントを なんでもOK 持ったものだけ入る 12年9月7日金曜日
  • 84. ゲームオブジェクトを破棄 ✤ CubeMakerのUpdateメソッドを次のように変更してください void Update () { if(Input.GetKeyDown("a")){ GameObject go = (GameObject) GameObject.Instantiate( gObject, transform.position, transform.rotation); GameObject.Destroy(go, 3); } } 変数に代入 go変数に格納されたオブジェクトを 3秒後に破棄 12年9月7日金曜日
  • 85. Rigidbodyをスクリプトで操作 ✤ Cylinderを作成し名前をShooterに変更してください ✤ ShooterからCupsuleColliderを削除してください ✤ Shootスクリプトを作成し、Shooterにアタッチしてください ✤ Sphereを作成し名前をBulletに変更してください ✤ BulletにRigidbodyコンポーネントをアタッチしてください ✤ Bulletをプレハブにしてください 図のように Shooterを少し傾けてください 12年9月7日金曜日
  • 86. Rigidbodyをスクリプトで操作 ✤ Shootクラスを次のようにしてください public class Shoot : MonoBehaviour { public Rigidbody bullet; // Update is called once per frame void Update () { if(Input.GetKeyDown("s")){ Rigidbody r = (Rigidbody)GameObject.Instantiate( bullet, transform.position, transform.rotation); r.AddRelativeForce(Vector3.up * 1000); } } } ✤ インスペクタで BulletフィールドにBulletプレハブをセットしてください 12年9月7日金曜日
  • 88. スクリプト解説 public class Shoot : MonoBehaviour { public Rigidbody bullet; void Update () { if(Input.GetKeyDown("s")){ Rigidbody r = (Rigidbody) GameObject.Instantiate( bullet, transform.position, transform.rotation); r.AddRelativeForce(Vector3.up * 1000); } } } AddRelativeForce:リジッドボディの向きに応じて力を加える 12年9月7日金曜日
  • 89. どういうふうに勉強するといいですか? ✤ ドキュメントのサンプルコード (重要!) ✤ 書籍 (Unityマスターブックもよろしくお願いします) ✤ Unity Student - http://www.unity3dstudent.com/ ✤ 講義資料 - https://sites.google.com/site/shinobuizumi/home/2012- animation ✤ Unityユーザー助け合い所(日本語で質問するならここ) - https://www.facebook.com/groups/unityuserj/ 12年9月7日金曜日
  • 90. KUUGゲーム! ✤ 熊本Unity User Groupを題材にして何かをUnityで作ってみて下さ い。 12年9月7日金曜日
  • 91. 質問はこちらまで ✤ 崇城大学情報学部 和泉助教 の部屋(研究室) ✤ izumi@cis.sojo-u.ac.jp  ✤ @shinobu_shiva ✤ http://www.cis.sojo-u.ac.jp/~izumi mail address 12年9月7日金曜日