ゲームクリエーター特訓 夏の集中講義 Unity #1 講師: 尾形 薫 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 1/57 Unity • Unityって? – 「高性能ゲームツクール」 by ファミ通 – 3Dのゲームをなるべく簡単にそれっぽく素早く作る ツール • 万能ではない。よく「Unityあれば何でもOK!」みたいに言 われるけど • 3Dモデルをレイアウトできて、物理エンジン搭載 • Mayaで作ったアニメーション再生可能 • ちょっとプログラムを追加すればゲームが作れる! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 2/57 大前氏曰く・・・ Unityではプログラムを 書かないのが大事ですね By 大前氏(ユニティジャパン) OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 3/57 まずは起動 • スタート>全てのプログラム>Unity>Unity • 「最新版のお知らせ」が出てもSkip! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 4/57 起動すると・・・ • 初回起動時は、こんな画面になる – 「前回終了時」のプロジェクトで始まる OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 5/57 画面の見方 3Dシーン 個別オブジェクトの 属性値編集 (インスペクタ) シーン内オブジェクト OGATA Kaoru, 2012 プロジェクト内 オブジェクト Game Programming Summer Special, Unity #1 6/57 Sceneでの操作 • Macの場合 – クリック • オブジェクト選択 – optionキーを押しながらマウスドラッグ • シーン内回転 – マウスホイール • ズーム – option + command + マウスドラッグ • 上下左右移動 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 7/57 いきなり「プレイ」 • プレイボタンを押してみる – 終るときは再び「プレイボタン」を押す • 画面が切り替わり、 「ゲームモード」 になる! – マウスとキーボード で操作可能 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 8/57 iPhoneでも動く! • Unityで作成したゲームは、 – Mac、Windows、iPhone、Android用に出力可能 • iPhone, Androidは別途有償($350) – ライセンスがあれば、PS3やWiiにも! • Sonyや任天堂との契約が前提 • この1年で急速にブームに – Unity案件も激増 – Unityは個人や少人数制作向けだが、 – 大型案件も増えている(当然求人も) OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 9/57 制作に必要な要素 • Unityでのゲーム制作に必要なもの – 表示データ ・・・FBX • プリミティブなら内部で生成可能 – スクリプト ・・・JavaScript、C# • ただし、UnityのJSはやや独自なJavaScript • C#の方が主流 • スクリプト編集は「MonoDevelop」 – やる気と根性 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 10/57 スクリプトの扱い • 1オブジェクト = 1スクリプト – それぞれのオブジェクトが1個のスクリプトを持つ – オブジェクトにスクリプトをアサインする – オブジェクト中心の考え方 • 従来のプログラムスタイル: – 1スクリプト = 多数のオブジェクト – スクリプトで、オブジェクトを動かす – スクリプト中心の考え方 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 11/57 MyFirstUnity • 新規プロジェクトを作成 – プロジェクトフォルダ 「MyFirstUnity」 全てのチェックを 外してから、 「Create Project」 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 12/57 新規プロジェクト状態 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 13/57 シーン保存 • 先ほどは「プロジェクトフォルダ」を作成した だけ – プロジェクトには、複数の「シーン」を保存できる • 改めて、シーンを保存する – File > Save Scene – 「MyFirstUnity」として保存 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 14/57 オブジェクトを追加 • 「Plane」を追加してみる • 続いて「Cube」を追加し、Planeの上に配置 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 15/57 カメラを移動 • カメラの位置を調整する – 注意:Sceneのカメラと、Gameのカメラは別 – カメラを選択すると、Sceneの右下にpreviewが出る – XYZ方向への移動と回転で 見え方を調整 – ※実際にはカメラはプログラムで 位置と方向を制御する場合が多い • FPSなどではキャラクタと一緒にカメラが動く OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 16/57 レイアウトを変更 • このままでは操作しづらいので・・・ – レイアウトを 2 by 3 に変える – レイアウトは自由に変更することができる OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 17/57 光あれ • Sceneはライティングされているが、 • Gameは真っ暗 • ライトを追加する – Directional Lightを作成 – 明るく(真っ白に)なった! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 18/57 マテリアル追加 • Planeにマテリアル追加 • Assets > Create > Material – プロジェクトにMaterialを 追加してから、 – オブジェクトにアサイン – マテリアルのMain Colorを 変更してみる OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 19/57 テクスチャを貼り付ける • まずProjectに画像を追加 – PNG画像を全て選択して、 Projectにドラッグ&ドロップ – 「New Material」を選択して 「Alternating...ColorMap」をドラッグし マテリアルの画像エリアにドロップ OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 20/57 Cubeにも・・・ • Cubeにもテクスチャを貼り付けたい – 1. マテリアルを作成 – 2. マテリアルをオブジェクトにアサイン – 3. 画像をマテリアルにアサイン • PyramidVerdigris-ColorMapを OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 21/57 物理効果 • 物理効果を適用してみる – Cubeを選択して、 Component > Phycics > Rigidbody – CubeにRigidbodyが追加される • Inspectorで確認 – 「Play」 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 22/57 何がどうなった? • Cubeに「Rigidbody」を追加 – Rigidbody=剛体 – 他と衝突して、跳ね返る – 跳ね返るには「衝突対象」が必要 • 衝突対象 = collider • PlaneのInspectorを 確認すると・・・ – Colliderがある! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 23/57 さらに物理的に • あんまり跳ね返ってない • もっとジャンプ!! – Physic Material – Asset > Create > Physic Material – 「New Physic Material」 をCubeとPlaneに アサイン – まだ跳ね返らない・・・ OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 24/57 はねる! • CubeのInspectorを確認 – Cubeを選択 – Box ColliderのMaterialに New Physic Materialがある • Physic Materialのパラメータ調整 – Bouncinessを0.5に – 跳ね返り率 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 25/57 見た目をよく • 見た目のディテールを上げる – ノーマルマップ (normal mapping) – 凹凸感を出すことができる – マテリアルのShaderを「Diffuse」から「Bumped Diffuse」に変更 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 26/57 ノーマル画像をアサイン • 「Alternating...-NormalMap」をNormalmapに – 「Fix Now」をチェック(Normal Map画像に変更するため) OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 27/57 ディテールアップ • ディテールが良くなった! ←ノーマルなし ノーマルあり→ OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 28/57 やってみよう • Sphereを作成して、床ではねるようにしよう – CubeとSphereがぶつかると、お互いにも跳ね返る! • さらにCubeやCapsuleを増やすとか! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 29/57 キーボードで操作 • キーやマウスなどで動かしたい – スクリプトを書く必要がある! • スクリプトの考え方 – 各オブジェクトごとに、対応するスクリプトを記述 できる – スクリプトには、初回の1回だけ実行する部分と、 毎フレーム実行する部分が記述できる – 毎フレーム、キーの状態を確認して移動すれば! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 30/57 スクリプトAssetの作成 • スクリプトもアセット – Asset > Create > C# Script – Inspectorにはスクリプトの中身が表示される • ここでは見るだけ OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 31/57 スクリプトを編集 • Inspectorの「Open...」をクリック • MonoDevelopが起動し 編集できる OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 32/57 スクリプトの中身 • 空の関数が2つ StartとUpdate using UnityEngine; using System.Collections; public class NewBehaviourScript : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 33/57 MonoBehaviourクラス • Unityの基底クラス – 様々なイベントに対応するメソッドを用意 • Update, Awake, OnMouseEnter, … OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 34/57 スクリプトを書く • 試しに、Start関数の中身を書いてみる – コンソールに KAIT Unity と表示する // Use this for initialization void Start () { Debug.Log("KAIT Unity"); } – 保存する – Unityに戻ると、スクリプトが更新されている OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 35/57 何かにアサイン • Cubeにアサイン – Projectにあるだけでは実行されない – スクリプトはシーン内の何かのオブジェクトに アサインされている必要がある OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 36/57 Cubeを確認&実行 • CubeのInspectorを確認 – Scriptがある • 「Play」 – 特に何も変わらない・・・?? – コンソールの表示が必要! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 37/57 コンソール • Window > Consoleで表示 – コンソールには unity の文字が! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 38/57 コンソールの利用目的 • 利用目的 – デバッグ用 – 様々な数値が現在どうなっているかはUnity Editorで も分かるが・・・ – 計算途中、処理途中の値は分からない – コンソールに表示することで、計算や処理が適切か 正しいかどうか分かる OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 39/57 キーで操作 • 新しくCapsuleを作成 – 名前を「Player」に • 新しくC# Scriptを作成 – 名前を「PlayerController」に – Playerにアサイン – Open... で編集へ OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 40/57 PlayerController.cs • つぎのように、Updateの中身を記述 – ←→キーで、X方向に移動(現在位置と相対移動) void Update () { float x = 0.0f; if (Input.GetKey(KeyCode.RightArrow)) { x = 0.5f; } if (Input.GetKey(KeyCode.LeftArrow)) { x = -0.5f; } transform.Translate(x, 0, 0, Space.World); } OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 41/57 やってみよう • ↑↓キーで、Z方向に移動するには? – ↑キーは、KeyCode.UpArrow – ↓キーは、Keycode.DownArrow OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 42/57 カメラを制御 • カメラの位置と注視点を変えてみる • まずは、注視点から • カメラ制御用スクリプトを新規作成 – 「CameraController」とする – 「Main Camera」にアサイン – エディタで開く OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 43/57 CameraController.cs • 変数target(Transform型)を追加 • 自身(カメラ)のLookAt先をtargetに public class CameraController : MonoBehaviour { public Transform target; // 略 // Update is called once per frame void Update () { transform.LookAt (target); } } OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 44/57 スクリプト内変数にアサイン • Main CameraのInspector – スクリプトのtarget変数が登場 – Hierarchyリストから、 SphereをTargetに ドラッグ&ドロップ OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 45/57 CameraController.cs • 新しく「campos」変数を追加 • カメラの位置(position)をcamposのY+2の位置に public Transform target; public Transform campos; /// 略 /// void Update () { Vector3 pp = campos.position; transform.position = new Vector3(pp.x, pp.y + 2, pp.z); transform.LookAt(target); } • camposに、Playerを アサイン OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 46/57 ブロック崩しゲーム • 3Dブロック崩しゲームを作る!(前編) – アセットは後から差し替えできるようにする – まずは、壁とボール、操作できるパドルを表示 – ボールの反射はダイナミクスで • ではまずNew Project – プロジェクト名「Blocks」 – シーンを保存「0001」 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 47/57 壁を作る • ホントはMayaで作りたいところだが・・・ • まずはUnityのプリミティブで作ろう • 右のように、Cubeを 細長くして枠を作る→ – 長さ50くらい – XZ平面に!(Y=0) • ついでにDirectinal Lightも作成 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 48/57 球とパドルを作る • Sphereを作成し、適当に位置合わせ – とりあえず座標(0,0,0)に • Cubeからパドルを作る – 名前をpaddleに変更 OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 49/57 Rigidbody • 衝突反射させるために、ボールをRigidbodyに – Sphereを選択して↓ – Use GravityをOFFに – Freeze Position YをONに OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 50/57 球を動かす • 球を動かすには? – 初速を与える – Start時に速度を設定してみよう • スクリプトで与えないとならない! – C#スクリプトを作成し 「BallScript」とリネーム ボール(Sphere)に アサインして、Open – Start関数を↓のように void Start () { rigidbody.velocity = new Vector3(15, 0, 2); } OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 51/57 動いたが・・・ • 壁にぶつかるとくっつく!! – 実際に速度を表示して確認してみたい • GUI Textで、文字列を表示! – 見やすい位置に調整する OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 52/57 スクリプト修正 • BallScript.csを修正 public class BallScript: MonoBehaviour { public GUIText text; void Start () { rigidbody.velocity = new Vector3(15, 0, 2); } void Update () { float vv = rigidbody.velocity.sqrMagnitude; text.text = "v: " + vv; } } – InspectorにてGUI Textをアサイン OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 53/57 やはり遅くなっている • ここはPhysics Materialで調整だな – 物理挙動のパラメータ設定 – 反射するそれぞれにアサイン OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 54/57 Physics Material • Boucinessを1に – 反射係数。0だと反射しない – Bouce Combineを「Maximum」にすればボールだけにPhysic Materialを設定するだけでいいはずだが、現実には速度が落ち る・・・ OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 55/57 パドルを動かせるように • パドルを動かし、球を跳ね返せるように • やること: – Physics Materialの適用 – キー操作でのパドル移動 – 先ほどのスクリプトを参考に、各自やってみよう! OGATA Kaoru, 2012 Game Programming Summer Special, Unity #1 56/57 次回 • 9/5 • 1∼2限 • 3∼4限 OGATA Kaoru, 2012 ブロック崩し(後編) シューティング Game Programming Summer Special, Unity #1 57/57
© Copyright 2024 ExpyDoc