【unity道場 2017】playmakerによる初めてのunityプログラミング

243
1 PlayMakerによる 初めてのUnityプログラミング ユニティ・テクノロジーズ・ジャパン合同会社

Upload: unitytechnologiesjapan

Post on 21-Jan-2018

17.183 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

1

PlayMakerによる初めてのUnityプログラミングユニティ・テクノロジーズ・ジャパン合同会社

Page 2: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

2

0. はじめに

Page 3: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

3

研修の概要

•本研修は外部アセット「PlayMaker」によるUnityをアプリケーションの作成について紹介します。

Page 4: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

4

使用しているソフトウェアについて

ソフトウェア名 バージョンUnity 5.6.0f3(5.6.2f1でも動作確認済み)PlayMaker https://www.assetstore.unity3d.com/jp/#!/content/368

1.8.4

Page 5: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

5

目次

1. PlayMaker概要2. 基本操作3. 衝突判定4. Unity UIとの連携

Page 6: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

6

1. PlayMaker概要

Page 7: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

7

PlayMakerとは• 特徴

• 状態遷移ベースのフロー設計ができる• ロジックをノンコーディングで記述できる• 実行中プログラムの状態を視覚的に把握でき、デバッグ効率が高い

• 既存コードや他アセットとの連携が容易• ユーザー独自の「アクション」の開発が可能• 全てをPlayMakerだけで作成することができる。• C#スクリプトと連携させてプロジェクトの一部にだけ

PlayMakerを適用することもできる

Page 8: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

8

PlayMakerとは•導入における効果• モック製作/ラピッドプロトタイピング• UI/状態遷移の管理システム• Tweenアニメーションの制御• AIの思考ルーチン• Unity Engine APIの学習

Page 9: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

9

PlayMakerとは•チーム開発における注意点• コードではないのでマージができない(Template

Export機能である程度カバーできる)• 厳密なカプセル化は困難• 自由度が高く、ほぼどんなロジックも書けてしまうため、統一感を図るのが難しい。

Page 10: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

10

PlayMakerとは•前述の注意点に対する対策案• 使用範囲を特定シーンに限定する• 既存コードとの連携ルールを明文化する• コードは全てPlayMakerのアクションにして使用する

• 状態遷移制御のみに使用して、ロジックを書かない• iTween制御のみに使用する

Page 11: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

11

FSMとは• FSM(Finite State Machine:有限状態機械)と呼ばれるUMLの状態遷移図に似た形式で記述•主な構成要素• ステート:オブジェクトの状態• イベント:状態遷移を起こすトリガーとなるもの• アクション:ある状態におけるオブジェクトの振る舞い• 変数:FSMが扱うオブジェクトや数値などの値を格納する※有限状態機械(英:  finite  state  machine,  FSM)は別の呼び⽅方で有限オートマトン(英:  finite   automaton,  FA)もある

Page 12: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

12

FSMとは• 具体例:プレイヤ・キャラクタ

• ステート• 「待機」、「歩き」、「走り」、「ジャンプ中」など

• イベント• 「待機」から「歩き」、「歩き」から「走り」などのへのステート変化を引き起こすもの(一般的にはユーザからの入力操作をトリガとする)

• アクション• 「待機」時の具体的な挙動、「歩き」時の具体的な挙動など各ステートにおける具体的な挙動

• 変数• プレイヤの移動方向(Vector3型)と速度(float型)など

Page 13: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

13

PlayMakerのインストール• Asset Storeにアクセスし、検索欄に「PlayMaker」と入力して検索するか、「エディタ拡張」-「ビジュアルスクリプティング」と辿り以下のアイコンを探す

Page 14: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

14

PlayMakerのインストール• またはWeb Browserで以下のURLを表示する

• https://www.assetstore.unity3d.com/jp/#!/content/368

• PlayMakerは「エディタ拡張」のため利用者数分のライセンスが必要な点に注意してください(他のカテゴリのアセットはチームで一つだけ購入するだけで全員が利用できる)

Page 15: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

15

PlayMakerのインストール•パッケージインポート直後の画面

Page 16: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

16

PlayMakerのインストール• PlayMaker 1.8.xのインストール• この資料は「1.8. 4」を元に記述されています。

• Unityのメニューに「PlayMaker」が増えているので、[PlayMaker]-[Install PlayMaker]を実行する

Page 17: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

17

PlayMakerのインストール•このウィンドウの「Install

PlayMaker」ボタンを押す

Page 18: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

18

PlayMakerのインストール•自動的に互換性のチェックが行われます。今回は新規なので特に問題は出ません。

Page 19: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

19

PlayMakerのインストール•「Install PlayMaker

1.8.x」ボタンを押す

Page 20: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

20

PlayMakerのインストール•「I Made a Backup. Go Ahead!」ボタンを押す

Page 21: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

21

PlayMakerのインストール•「Import」ボタンを押す

Page 22: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

22

PlayMakerのインストール•「OK」ボタンを押す

Page 23: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

23

PlayMakerのインストール•似たようなダイアログが出ます。この画面が出たら「I Made a Backup. Go Ahead!」ボタンを押す

Page 24: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

24

PlayMakerのインストール•インストール作業直後の状態

Page 25: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

25

PlayMakerのインストール•アップデートチェックダイアログは不要なので閉じてください。

Page 26: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

26

PlayMakerのインストール•このウィンドウは不要なので右下の「Show At Startup」のチェックを外してから閉じてください。

Page 27: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

27

PlayMakerのインストール• PlayMakerのインストールが完了した直後のProjectビュー

Page 28: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

28

PlayMakerの基本設定(オプション)

•表示言語の変更• [PlayMaker]-[PlayMaker

Editor]を実行• 右下の[Preferences]ボタンを押す

Page 29: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

29

PlayMakerの基本設定(オプション)

•右上でGeneralを選び、「Language」を[English]から[Japanese]に変更する

Page 30: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

30

PlayMakerの基本設定(オプション)

• PlayMaker Editorウィンドウを好みの大きさ/位置に調整してレイアウトを保存(次に使うときに楽になります)• F1キーを押すか右下の「ヒント(F1)」を押してヒントを消してください。

•例として次のスライドを参照

Page 31: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

31

PlayMakerの基本設定(オプション)

•レイアウトの例

Page 32: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

32

2.基本操作

Page 33: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

33

2.1. ステージの作成

Page 34: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

34

今回のワークショップのゴール

• Unityチュートリアルの「玉転がし」をPlayMakerで作成する• https://unity3d.com/jp/learn/tutorials/projects

/roll-ball-tutorial• WebGL版• https://developer.cloud.unity3d.com/share/-

J8WDI2XUz/

Page 35: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

35

ステージの作成• ステージはPlaneをベースにします。• Planeを作成してPosition (0, 0, 0)、Scale(2,1,2)として名前を「Ground」に変更• 詳細

• [GameObject]-[3D Object]-[Plane]でPlaneを作成• InspectorのTransformのPositionを(0, 0, 0)に設定• InspectorのTransformのScaleを(2, 1, 2)に設定• HierarchyのPlaneをクリックして少し待つと編集可能になるので、「Ground」に変更(MacユーザはRETURNキーで、WindowsユーザはF2キーでも編集可能)

Page 36: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

36

ステージの作成

•イメージ図

Page 37: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

37

プレイヤーの作成

• プレイヤーは球(Sphere)です。• Sphereを作成してPosition (0, 0.5, 0)として名前を「Player」に変更• 詳細

• [GameObject]-[3D Object]-[Sphere]でSphereを作成• InspectorのTransformのPositionを(0, 0.5, 0)に設定• HierarchyのSphereをクリックして少し待つと編集可能になるので、「Player」に変更(MacユーザはRETURNキーで、WindowsユーザはF2キーでも編集可能)

Page 38: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

38

プレイヤーの作成

•イメージ図

Page 39: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

39

フォルダーの作成• ボールや床などに色をつけたり、テクスチャを貼り付けるにはマテリアル(Material)を使用します。

• マテリアルはファイルとして保存するためProjectビューで作成します。

• マテリアルを格納するフォルダーを作成し、そこの保存します。

• Projectビューの[Create]ボタンを押して、[Folder]を選択しフォルダーを作成

• フォルダーの名前を「Materials」に変更

Page 40: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

40

マテリアルの作成

• ProjectビューのMaterialsフォルダーを選択状態にする(そうするとそのフォルダー内にファイルが作成できる)• [Create]ボタンでも良いのですが、もう一つの方法も紹介します。Materialsフォルダーで右マウスボタンをクリックし、[Create]-[Material]でMaterialファイルを作成します(次ページ参照)

Page 41: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

41

マテリアルの作成

Page 42: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

42

マテリアルの作成• 作成したマテリアルの名前を「New Material」からを「Background」に変更• InspectorのAlbedoの右側にある白四角部分をクリックしてカラーピッカーを開く• R:0, G:32, B:64 (濃い青色)に設定して閉じる

Page 43: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

43

マテリアルの適用

•作成したBackgroundマテリアルをProjectビューからSceneビューにあるGround、またはHierarchyにあるGroundのいずれかにドラッグ&ドロップ(以下、D&D)

Page 44: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

44

ライトの調整(オプション)• シーン全体はDirectional Lightで一様に照らされています。太陽光をイメージすると良い。• Directional Lightは距離は無関係でX軸、Y軸で太陽高度と向きを調整します。• X軸:太陽高度(0度、180度=水平線、90度=真上、190度以上、あるいは負の値=日没)

• Y軸:太陽方位• 好みに応じて適当に調整しましょう。• ここではDirectional LightのRotationを(50, 60, 0)とします。

Page 45: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

45

シーンの保存

• これまでの作業内容はシーンとして記録されています。シーンは適宜保存しましょう。

• [Ctrl]-[S](Win) / [Cmd]-[S](Mac)を押してシーンを保存します。

• シーン名は「MiniGame」とします。

Page 46: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

46

シーンの保存

•今回はシーンファイルは一つしかありませんが、複数作成することも考慮してフォルダーを作成して整理します。• Projectビューで[Create]-[Folder]でフォルダーを作成• 名前を「Scenes」に変更• MiniGameシーンファイルをScenesフォルダーにD&Dして移動

Page 47: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

47

これまでのデータ

•もしこの時点でうまくいかなかった場合は、Roll-a-ball_Playmaker.zipに含まれているRoll-a-ball_Playmaker1 のプロジェクトファイルを開いて次に備えてください。

•ただし、PlayMakerのパッケージは含まれていませんのでプロジェクトファイルを開いたら、PlayMakerのインストールを行ってください(他のプロジェクトファイルも同様です)。

Page 48: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

48

2.2. プレイヤーの移動

Page 49: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

49

プレイヤーの移動

•プレイヤーをキーボードで移動できるようにします。

•プレイヤーの動きをリアルなボールのような感じにするために物理エンジン(Rigidbody)を使用します。• HierarchyまたはSceneビューのPlayerを選択• [Component]-[Physics]-[Rigidbody]を実行し、

Rigidbodyコンポーネントをアタッチ(次スライド参照)

Page 50: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

50

プレイヤーの移動

•イメージ図

Page 51: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

51

プレイヤーの移動

• InspectorビューでRigidbodyコンポーネントがアタッチされていることを確認

Page 52: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

52

プレイヤーの移動

•移動はキーボードを使用します• 矢印キーまたはW A S Dキー

•キーボードの入力に応じてボールに徐々に力を加えて移動させます。

•通常、これらの処理をUnityではスクリプトを記述時して実現しますが、今回はPlayMakerで実現します。

Page 53: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

53

プレイヤーの移動

• PlayMakerは必ず対象となるGameObjectを指定する必要があります• Playerゲームオブジェクを選択状態にする• PlayMaker Editorの左側のエリアでマウス右ボタンを押し、[状態遷移を追加]を実行(次スライド参照)

Page 54: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

54

プレイヤーの移動

•マウス右ボタンを押した直後の画面

Page 55: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

55

PlayMakerの操作の基本•「状態遷移を追加」直後の様子

Page 56: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

56

用語の解説

• PlayMakerで使用する用語とイメージ

開始イベント(システムイベント)

ステート(状態)

遷移

Page 57: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

57

FSMの名前• FMSの名前の初期設定は「状態遷移」です。

• PlayMaker Editorの右側の上にある「状態遷移」タブを選択し、すぐ下の欄で名前を変更できます。

• ここではPlayerControllerに変更します。

タブの選択

FSMの名前

Page 58: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

58

スクリプト(イメージ)using UnityEngine;using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;

private Rigidbody rb;

void Start (){

rb = GetComponent<Rigidbody>();}

void FixedUpdate (){

float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

rb.AddForce (movement * speed);}

}

Page 59: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

59

変数の定義

• PlayMakerにおける変数は2種類• ローカル変数(そのFSMのみで使える変数)• グローバル変数(FSM間で利用できる変数)

•変数はInspectorに表示/非表示が選択可能• Inspectorに表示させるとUnity Editorから直接値の入力や設定が可能

Page 60: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

60

スクリプト(イメージ)using UnityEngine;using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;

private Rigidbody rb;

void Start (){

rb = GetComponent<Rigidbody>();}

void FixedUpdate (){

float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

rb.AddForce (movement * speed);}

}

float型インスペクター表⽰示(public)

Rigidbody型インスペクター⾮非表⽰示(private)

Page 61: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

61

スクリプト(イメージ)using UnityEngine;using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;

private Rigidbody rb;

void Start (){

rb = GetComponent<Rigidbody>();}

void FixedUpdate (){

float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

rb.AddForce (movement * speed);}

}

float型変数が2つ

Vector3型変数

Page 62: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

62

PlayMakerによる変数の定義• 変数を作成するには、PlayMaker

Editorの[変数]タブを選択し、下の[新しい変数]欄に変数名を入力し、変数の型を選択して、[追加]ボタンを押します。

• すると変数が作成されて、さらに詳細設定画面が表示されます。

• 続けて変数を作成するときは、一旦空いている箇所をクリックしてから行ってください。

Page 63: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

63

PlayMakerによる変数の定義•右図はPlayMakerで標準的に指定できる型の一覧

• Rigidbody型は一旦Object型で作成し、選択した後に表示される詳細設定画面にて、Object TypeをUnityEngine > Rigidbodyに変更します。

Page 64: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

64

PlayMakerによる変数の定義•変数を追加した後のイメージ

Page 65: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

65

PlayMakerによる変数の定義• Speedは変数の詳細設定画面の「インスペクタ」をチェックするとInspectorビューに表示されます

• 値は好みで変えてください。ここでは10とします。

Page 66: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

66

処理の記述(アクション)• PlayMakerにおける処理は「アクション」と記述します。

•アクションは「状態(ステート)」に記述します。•つまり、特定の状態になった時の処理をアクションとして記述します。

Page 67: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

67

スクリプト(イメージ)using UnityEngine;using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;

private Rigidbody rb;

void Start (){

rb = GetComponent<Rigidbody>();}

void FixedUpdate (){

float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

rb.AddForce (movement * speed);}

}

アクションとして記述する

Page 68: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

68

処理の記述(アクション)• PlayMaker Editorの「State1」を選択• [状態]タブの「State1」を「Init」に変更

Page 69: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

69

処理の記述(アクション)•アクションの一覧は[状態]タブの下にある[アクションブラウザ]ボタンを押すと表示されます。

•慣れるまで大変ですが、上の検索欄に単語を入力すると絞り込みができるのでうまく使ってください。

Page 70: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

70

処理の記述(アクション)• アクションブラウザの検索欄に「get com」と入力するとGet Componentアクションが絞り込まれます。

• [状態にアクションを追加]ボタンを押すとアクションが追加されます。

• なお、アクションブラウザは邪魔なら閉じるか、Inspectorの裏に移動すると良いでしょう。

Page 71: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

71

処理の記述(アクション)• Get Componentアクションは対象となるゲームオブジェク(Game Object)から値を格納する変数(Store Component)の型に応じたコンポーネント取得して格納します。

• Every Frameは毎フレームごとに実行するかどうかを指定するチェックボックスです。

Page 72: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

72

処理の記述(アクション)•赤丸!の記号は指定を誤っていたり、必須パラメータが不足していることを表しています。

何か問題がある

ここに問題がある

Page 73: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

73

処理の記述(アクション)• Store Componentの

Noneをクリックしてrbを選択します。rbとは変数の定義でRigidbody型として指定した変数です。

Page 74: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

74

処理の記述(アクション)• Every Frameチェックボックスは毎フレーム実行するかどうかを指定します。今回は初期化の一回だけなのでチェックしません。

• Init状態におけるアクションはこれで完成です。

Page 75: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

75

実行と状態のリアルタイム確認

• Playボタンを押してプレビューしましょう• PlayMaker Editorの左側のグリーンの枠は現在の状態を表しています。

•変数のrbを選択するとValueにPlayer(Rigidbody)を表示されています。これはPlayにアタッチされているRigidbodyコンポーネントへの参照を得たことを表しています。

•次スライド参照

Page 76: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

76

実行と状態のリアルタイム確認

現在の状態

Page 77: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

77

実行と状態のリアルタイム確認

•【重要】Playボタンをもう一度押してプレビューを止めてから続きのアクションを書きます。

Page 78: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

78

参考:毎フレームアクションの記述

• FixedUpdate()関数の部分を記述します。• Unityには3つのUpdate()関数があります。• Update()

• 一般的なキー入力やゲーム内の様々な判定処理など• FixedUpdate()

• 物理エンジンを用いた処理を記述する• LateUpdate()

• すべてのUpdate()終了後に呼び出される。主にカメラの制御に使用する

Page 79: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

79

参考:毎フレームアクションの記述• PlayMakerでは一般的なルールに基づいてアクションが定義されていますので、スクリプトによるプログラミングのルールをそこまで意識しなくても良い構造になっています。

• 例• GetAxisアクション:Update()で実行• AddForceアクション:FixedUpdate()で実行

• 詳細はAssets/PlayMaker/Actions/にあるスクリプトを参照してください。

Page 80: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

80

キー入力

•キーボードに限らずマウス、コントローラー、タブレットなど全ての入力処理はすべてInputが行います。

•今回はVirtual Inputによる入力を使用しています。

Page 81: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

81

キー入力

• Virtual InputはUnityが用意している汎用的な入力システムです。

•「水平移動」、「垂直移動」、「ボタン1」などキーボード、コントローラ、マウスに関わらず同じように扱うことができるようにしたシステムです。

•初期設定はUnityの[Edit]-[Project Settings]-[Input]で確認ができます。

Page 82: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

82

キー入力• Virtual Inputの初期設定• 今回はHorizontal(水平)と

Vertical(垂直)を使用します。• 値は -1から1までの範囲• 二箇所に同じ記述がありますが、上はキーボード(矢印キーとWASDキー)で、下はコントローラの十字キーが設定されています。

Page 83: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

83

スクリプト(イメージ)using UnityEngine;using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;

private Rigidbody rb;

void Start (){

rb = GetComponent<Rigidbody>();}

void FixedUpdate (){

float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

rb.AddForce (movement * speed);}

}

InputのGetAxis()を使⽤用してキーの⼊入⼒力状態を取得。そこで得られた値をそれぞれの変数に代⼊入している。

Page 84: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

84

キー入力

• Play Maker Editorでどこか空いているところで右クリックし、「状態の追加」を実行します。

Page 85: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

85

キー入力• 「State 1」の名前を「Moving」に変更• アクションブラウザを開く• アクションブラウザの検索欄に「GetAx」と入力し、「Get Axis」を選択• アクションブラウザの[状態にアクションを追加]ボタンを2回押す。

Page 86: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

86

キー入力• Axis Nameにそれぞれ「Horizontal」、「 Vertical」と入力。

• 一字一句正確に大文字小文字を間違えずに入力しなければなりませんので、先ほど紹介したInput Settingsからコピーすることをお勧めします。

• StoreにはそれぞれmoveHorizontal、moveVerticalを指定

Page 87: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

87

キー入力

•シーンを保存してPlayボタンを押します。

•しかし、状態はInitのままになっています。これはMoving状態に遷移するイベントがないからです。

Page 88: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

88

InitからMoving状態への遷移• 【重要】Playボタンをもう一度押してプレビューを止めてから続きのアクションを書きます。

• Init状態を選択し、右クリックして[遷移を追加]-[FINISHED]を実行します。すると状態の下に[遷移イベント]が追加されます。

• FINISHEDイベントはこの状態に記述したアクションをすべて実行した後に発生するイベントです。

• 赤丸!マークはそのイベントが発生した後に遷移する状態の指定が無いためです。正しく指定すると消えます。

Page 89: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

89

InitからMoving状態への遷移• InitのFINISHEDをマウスの左ボタンでクリックしながらMovingまで移動して手を離すことで遷移先を指定することできます。

Page 90: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

90

InitからMoving状態への遷移•シーンを保存してPlayボタンを押します。

•無事にMoving状態に遷移しました。

•キーの入力状況は変数に格納していますが、まだ球を動かすアクションを記述していないので動きません。

Page 91: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

91

移動処理

•今回採用した移動方法は自分自身(球)に「力」を加える方法です。

•力を加えるのはAddForceアクションを使用します。

•力の強さはキーボードから入力した値に外部から指定したSpeedを掛けた値を使用します。

Page 92: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

92

スクリプト(イメージ)using UnityEngine;using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;

private Rigidbody rb;

void Start (){

rb = GetComponent<Rigidbody>();}

void FixedUpdate (){

float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

rb.AddForce (movement * speed);}

}

InputのGetAxis()で得られた値をX⽅方向(左右)とZ⽅方向(前後)に設定してmovementを求める

Movementにspeedを掛けた値だけ⼒力を加える

Page 93: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

93

移動処理

• XYZに変数や値を指定してVector3型の変数を新たに作成するアクションはSet Vector3 XYZです。• まずMoving状態を選択し[状態]タブを選択し、[アクションブラウザ]ボタンを押して起動します。• 検索欄にset vector3と入力して、 Set Vector3 XYZ を選択してから[状態にアクションを追加]ボタンを押します。

Page 94: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

94

移動処理• アクションの挿入位置はどうなりましたか?• アクションの実行順番は上から下に向かって実行します。

• もし一番上にアクションが挿入された場合、このままではキーボードで入力した値を得る前に計算してしまい誤動作の元になります。

処理順番

Page 95: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

95

移動処理

•アクションの順番を入れ替えるには2通りの方法があります。• アクション名(Set Avtor3 XYX、Get Axisなど)をマウスでD&Dする• 歯車メニューの中から「アクションを下に移動」「アクションを先頭に移動」などを選択する

Page 96: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

96

移動処理

•歯車アイコンのメニューによる移動

Page 97: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

97

移動処理

•このような順番になるように調整してください。

Page 98: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

98

移動処理• Set Vector3 XYZを次のように設定してください。

• 各変数の右にある二重線をクリックすると、変数による指定と値による指定を切り替えることができます。

• Yは値による指定に切り替えて0を入力しています。

• 毎フレーム計算をするためにEvery Frameをチェックします。

Page 99: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

99

移動処理

• Moving状態にAdd Forceアクションを追加。

•実行順番が 後になっていることを確認して適宜調整してください。

•変更点はVectorとEvery Frameです。

Page 100: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

100

移動処理

• シーンを保存してPlayボタンを押して動作確認

• これでボールが動くようになりました。• しかし、想定よりとても遅いです。これはSpeedを掛ける処理を行っていなためです。

• Speedパラメータを使用するためにSet Vector3 XYZとAdd Forceの間にアクションを追加します。

Page 101: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

101

スクリプト(イメージ)using UnityEngine;using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;

private Rigidbody rb;

void Start (){

rb = GetComponent<Rigidbody>();}

void FixedUpdate (){

float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

rb.AddForce (movement * speed);}

}

InputのGetAxis()で得られた値をX⽅方向(左右)とZ⽅方向(前後)の⼒力にするためにVector3を求めている

Movementにspeedを掛けた値だけ⼒力を加える

Page 102: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

102

移動処理

• Vector3とfloatの掛け算を行うアクションはVector3 Multiplyです。•参考• 足し算:Add• 引き算:Subtract• 掛け算:Multiply• 割り算:Divide

Page 103: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

103

移動処理• Set Vector3 XYZとAdd Forceの間にVector3 Multiplyアクションを追加します。• Vector3 Variableを

movementに、Multiply Byをspeedに設定(右の二重線をクリックして変数を使用するのを忘れずに)• Every Frameをチェックします。

Page 104: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

104

移動処理

• シーンを保存してPlayボタンを押しましょう。

• これで先ほどの10倍の速度で移動します。

• もし移動しない場合は、Inspectorビューのspeedに10を設定してから再度実行し直してください。

Page 105: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

105

補足

•実は変数rb(Rigidbody型)は使用していません。• PlayMaker側で用意しているAddForceアクションの内部で指定されたGameObjectにアタッチされているRigidbodyコンポーネントへの参照を取得しています。(今回は自分自身のGameObject)

Page 106: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

106

これまでのデータ

•もしこの時点でうまくいかなかった場合は、Roll-a-ball_Playmaker.zipに含まれているRoll-a-ball_Playmaker2 のプロジェクトファイルを開いて次に備えてください(別途PlayMakerのインストールもお忘れなく)。

Page 107: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

107

2.3. カメラの移動

Page 108: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

108

カメラの移動

•ボールの動きに合わせてカメラを移動させます。•イメージとしては常にボールの正面を捉えながら移動します。

• Unityではすべてのキャラクターの移動が終わった後にカメラを動かすためにLateUpdate()が用いられます。

Page 109: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

109

スクリプト(イメージ)using UnityEngine;using System.Collections;

public class CameraController : MonoBehaviour {

public GameObject player;

private Vector3 offset;

void Start (){

offset = transform.position - player.transform.position;}

void LateUpdate (){

transform.position = player.transform.position + offset;}

}

Page 110: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

110

カメラの移動• HierarchyのMain Cameraを選択し、[PlayMaker]-

[Components]-[Add FSM To Selected Objects]を実行• PlayMaker Editorの[状態遷移]タブの「状態遷移」を「CameraController」に変更• PlayMaker Editorの[状態]タブの「State 1」を「Init」に変更• [変数]タブでplayerとoffset変数を追加。playerは[インスペクタ]をチェックする(インスペクタで値の指定ができる)

Page 111: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

111

カメラの移動

•登録のイメージ

Page 112: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

112

カメラの移動• Init状態ではPlayerとカメラとの差分を計算して

offset変数に代入しています。あとでこれを使用します。

• C#では「(自GameObjectの)transformのpositionプロパティを取得し、そのまま続けてplayerゲームオブジェクとのtransformのpositionを取得し引き算する」のように複数の処理を一度に書くことができます。

void Start (){

offset = transform.position - player.transform.position;}

Page 113: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

113

カメラの移動• PlayMakerでは基本的に一つ一つ丁寧にアクションと指定記述します。• 自GameObjectのPositionを取得して「格納する」(A)• 指定されたGameObjectのPositionを取得して「格納する」(B)• (A)-(B)の結果をoffsetに格納する

• つまり、(A)と(B)の値を格納する変数が別途必要になります。

• ここでは少しだけ処理を効率的に行う方法を紹介します。どうしてこれでうまくいくかご自身で考えてみてください。

Page 114: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

114

カメラの移動

• 予め[変数]タブですべての変数を指定しても良いのですが、必要に応じて追加する方法も紹介します。

• Main Cameraを選択し、PlayMaker EditorのInit状態を選択し、Get Positionアクションを追加• Get PositionのVectorをクリックし、[New

Variable…]を実行• New Variableと入力欄が表示されるので[offset]と入力し、[Create Variable]ボタンを押す

Page 115: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

115

カメラの移動

Page 116: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

116

カメラの移動• もう一つGet Positionを追加• Game Objectを[Specify Game Object]に変更• すぐ下に入力欄が増えるので、変数を指定に切り替える• 変数playerを選択• VectorでNew Variable…]を実行• New Variableと入力欄が表示されるので

[playerPos]と入力し、[Create Variable]ボタンを押す

Page 117: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

117

カメラの移動

Page 118: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

118

カメラの移動

• Vector3 Subtractアクションを追加(処理順番は後)• Vector3 Variableにoffset、Subtract Vectorに

playerPosを指定

Page 119: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

119

カメラの移動

• Trackingステートを追加• InitステートにFINISHED遷移を追加• InitステートのFINISHED遷移からTrackingステートへの遷移を追加

Page 120: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

120

カメラの移動

• プレイヤーの現在位置を取得(Get Position)• プレイヤーの現在位置にoffsetを加える(Vector3

Add)• 計算結果を自GameObjectのtransformのPositionに代入する(Set Position)• すべてEvery Frameをチェックする• 後のSet PositionのLate Updateをチェックする

Page 121: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

121

カメラの移動

Page 122: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

122

カメラの移動

•カメラの高さと向きを調整します。好みで変えても構いません。

Page 123: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

123

カメラの移動

• 後にMain CameraのInspectorの Play Maker FSMコンポーネント内のplayerにInspectorのPlayerゲームオブジェクとをD&Dする

Page 124: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

124

カメラの移動

•シーンを保存してPlayボタンを押しましょう。• Player(球)を移動させるとカメラが追いかけてくるはずです。うまくいかない場合は何度も見直してみてください。

Page 125: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

125

これまでのデータ

•もしこの時点でうまくいかなかった場合は、Roll-a-ball_Playmaker.zipに含まれているRoll-a-ball_Playmaker3 のプロジェクトファイルを開いて次に備えてください(別途PlayMakerのインストールもお忘れなく) 。

Page 126: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

126

2.4.カメラとプレイエリア

Page 127: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

127

ステージ枠の作成

•プレイヤー(球)は床のないところに移動すると落ちてしまいます。

•そこで壁を作ります。•まず、空のGameObject(Empty GameObject)を作成し、Position(0, 0, 0)にします。•名前をWallsとします。

Page 128: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

128

ステージ枠の作成

• Wallsを選択し、[Create]-[3D Object]-[Cube]を作成。名前をWest Wallに変更。• Transformを以下のように変更

Page 129: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

129

ステージ枠の作成

• West Wallを[Ctrl]-[D](Win) / [Cmd]-[D](Mac)で複製して同様に壁を作成

Page 130: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

130

ステージ枠の作成名前 Position RotationWest  Wall -‑10, 0,  0 0,  0,  0East  Wall 10,  0,  0 0,  0,  0North  Wall 0,  0,  10 0,  90,  0South  Wall 0,  0,  -‑10 0,  90,  0

Scaleはすべて(0.5, 2, 20.5)

Page 131: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

131

ステージ枠の作成

•シーンを保存してPlayボタンを押しましょう。•これでステージから落ちなくなります。•もしこの時点でうまくいかなかった場合は、

Roll-a-ball_Playmaker.zipに含まれているRoll-a-ball_Playmaker4 のプロジェクトファイルを開いて次に備えてください(別途PlayMakerのインストールもお忘れなく) 。

Page 132: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

132

収集アイテムの作成

•プレイヤーが移動して集め得るアイテムを作成します。

•アイテムはCubeを加工したものです。• [GameObject]-[3D Object]-[Cube]でCubeを作成• 名前を「Pick Up」に修正• Transformを以下のように修正

• Position(0, 0.5, 0)• Rotation(45, 45, 45)• Scale(0.5, 0.5, 0.5)

Page 133: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

133

収集アイテムの作成

•アイテムっぽくするために自転させます•スクリプトのイメージ

using UnityEngine;using System.Collections;

public class Rotator : MonoBehaviour {

void Update () {

transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime);}

}

回転する

X軸15度Y軸30度Z軸45度

毎フレーム

クラス名PlayMakerではFSM名

1フレームの時間

Page 134: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

134

収集アイテムの作成• Pick Upゲームオブジェクを選択• PlayMaker Editorで右クリックし[状態遷移を追加]を実行• [状態遷移]タブを開いて「状態遷移」を「Rotator」に変更• 「State 1」ステートの名前をRotatingに変更

Page 135: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

135

収集アイテムの作成• Rotatingステートを選択し、アクションブラウザからTransformの[Rotate]を追加• X Angle, Y Angle, Z Angleにそれぞれ15, 30, 45を代入• Pre Second(指定した角度は

1秒あたりの角度とみなす)をチェック• Every Frameをチェック(初期設定でチェック済み)

Page 136: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

136

収集アイテムの作成

• このままPlayをするとプレイヤーと同じ座標なので開始と同時に衝突しておかしな動きになります。

• そのため一時的にPlayerを無効にします。

• Playerを選択して、Inspectorの左上のチェックを外します

Page 137: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

137

収集アイテムの作成

•シーンを保存してPlayボタンを押しましょう。

•ゆっくりと回転すれば成功です。

Page 138: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

138

収集アイテムの作成• 収集アイテムをプレハブにします• プレハブ(Prefab)

• シーン上で様々な設定を施したゲームオブジェクを資産(Asset)にして再利用することができる仕組み。

• PrefabをシーンにD&Dすると、同じ設定のゲームオブジェクを作成できます(インスタンス化するとも言う)。

• ProjectビューのPrefabを変更するとシーンに複製されたゲームオブジェクもまとめて変更できる

• Prefabからシーンに作成されたゲームオブジェクと変更し、Inspectorの上にある「Apply」ボタンを押すと変更した内容をProjectビューのPrefabに適用する。結果、同じPrefabから作成されたゲームオブジェクも同じように変更される

• Prefabからシーンに作成されたゲームオブジェクと変更し、Inspectorの上にある「Apply」ボタンを押すと変更を破棄します。

Page 139: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

139

収集アイテムの作成• PlayMakerを使用しているゲームオブジェクトにおけるPrefabの注意点• PlayMakerは基本的にPrefabから作られたGameObject(インスタンス)を編集できません。ProjectビューにあるPrefabを編集してください。

• 誤って編集しようとすると下図のようなダイアログが表示されます。その場合は[Edit Prefab]を選択してPrefabを編集してください。

Page 140: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

140

収集アイテムの作成

• Prefabの作成• Projectビューで「Prefabs」フォルダーを作成• HierarchyビューのPick Upゲームオブジェクとを

ProjectビューのPrefabsフォルダーにD&D

Page 141: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

141

収集アイテムの作成

•収集アイテムを合計12個作成•詳細(1/2)• 収集アイテムをまとめて管理するために空のゲームオブジェクトを作成([GameObject]-[Create Empty]。名前:Pick UpsPosition: (0, 0, 0)• Pick UpをPickUpsの子にする

Page 142: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

142

収集アイテムの作成

•収集アイテムを合計12個作成•詳細(2/2)• Pick Upを選択し、複製([Ctrl]-[D](Win)

/ [Cmd]-[D](Mac))を11回行う

Page 143: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

143

収集アイテムの作成

•それぞれ適当に並べてください。

•時計をイメージして並べるといいでしょう。

Page 144: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

144

収集アイテムの作成• 白いままでは寂しいので色をつけます。• ProjectビューのMaterialsフォルダーにあるBackgroundを選択し、複製([Ctrl]-[D](Win) / [Cmd]-[D](Mac))して、名前をPick Upに変更

• Pick UpマテリアルのAlbedoのカラーピッカーを開いてR:255, G:255, B:0に変更

• Pick UpマテリアルをPick UpプレハブにD&D

Page 145: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

145

収集アイテムの作成• シーンを保存してPlayボタンを押しましょう。

• すべての収集アイテムがゆっくりと回転すれば成功です。• もしこの時点でうまくいかなかった場合は、 Roll-

a-ball_Playmaker.zipに含まれているRoll-a-ball_Playmaker5 のプロジェクトファイルを開いて次に備えてください(別途PlayMakerのインストールもお忘れなく) 。

Page 146: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

146

3. 衝突判定

Page 147: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

147

3.1. Unityにおける衝突判定

Page 148: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

148

衝突とは

• Unityにおける衝突はCollider同士がぶつかった状態を表す

• 静的コライダー(各種コライダ+Rigidbodyコンポーネントなし)• 床、壁など動かない要素

• 動的コライダー(各種コライダ+ Rigidbodyコンポーネントあり)• プレイヤーのように動く要素

Page 149: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

149

衝突の発生条件

•静的コライダーと静的コライダー• 衝突イベントが発生しない

•静的コライダーと動的コライダー• 衝突イベントが発生する

•動的コライダーと動的コライダー• 衝突イベントが発生する

Page 150: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

150

衝突の発生条件(補足)• RigidbodyコンポーネントのIs Kinematicオプション• Kinematicオン

• スクリプトによる制御だけで動かす。

• 衝突判定はKinematicオフの動的コライダーのみ発生

• 主な利用用途• スライドドア、ラグドールなど

Page 151: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

151

衝突イベント

•衝突条件が成立した時に呼び出されるイベント• OnCollisionEnter

• コライダーが触れた• OnCollisionStay

• 衝突中• OnCollisionExit

• コライダーが離れた

Page 152: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

152

トリガーイベント• 衝突ではなく、自動ドアやトラップのような見えないスイッチに触れた時に発生するイベントをトリガーイベントと呼んでいます

• Unityでは各コライダにある「Is Trigger」プロパティをチェックすると、衝突イベントが発生せずにすり抜けてしまい、トリガーイベントが発生します

Page 153: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

153

トリガーイベント

•トリガー条件が成立した時に呼び出されるイベント• OnTriggerEnter

• トリガーに触れた• OnTriggerStay

• トリガーに触れている 中

• OnTriggerExit• トリガーから離れた

Page 154: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

154

参考: コライダーの衝突に関する詳細情報

• Unityオンラインマニュアル• https://docs.unity3d.com/ja/current/Manual/Collid

ersOverview.html衝突アクションマトリクス

Page 155: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

155

収集アイテムとの衝突判定

•収集アイテムと触れた時、反発しては困るので「トリガーイベント」を使用します。

•トリガーイベントを発生させるためにPick UpプレハブのBox ColliderのIs Triggerをチェックします

Page 156: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

156

タグの設定• Pick Upプレハブを選択し、InspectorのTagをクリックして、[Add

Tag…]を実行• Tag & Layers Setting画面のTagsの下にある「+」ボタンを押して「Pick Up」と入力し、[Save]ボタンを押す

Page 157: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

157

3.2. Playmakerにおける衝突処理

Page 158: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

158

トリガーイベント• Playerゲームオブジェクトが非アクティブのままなので、アクティブに戻します。• Playerゲームオブジェクトを選択し、

PlayMakerEditorで右クリックして[状態を追加]を実行• 「State 1」を「Picking Up」に変更• Picking Upステートを選択し、右クリックして[グローバル遷移を追加]-[System Events]-[TRIGGER ENTER]を実行

Page 159: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

159

トリガーイベント

Page 160: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

160

トリガーイベント

Page 161: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

161

参考:ステートの色を変更•ステートを右クリックして[色の設定]の中にある色を選ぶと、ステートの背景色を変更することができます。

Page 162: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

162

トリガーイベント後の処理

void OnTriggerEnter(Collider other) {

if (other.gameObject.CompareTag ("Pick Up")){

other.gameObject.SetActive (false);}

}

トリガーイベントが発⽣生

トリガー元の情報が格納された変数

トリガー元のTagが“Pick  Up”か調べる

トリガー元を⾮非アクティブにする

Page 163: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

163

トリガーイベント後の処理• Picking UpステートにGet Trigger Infoアクションを追加• Game Object Hitに新規に作成した「other」変数を設定

Page 164: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

164

トリガーイベント後の処理• 続けて、Game Object Compare Tagアクションを追加• Game Objectにotherを設定• TagにPick Upを設定

Page 165: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

165

トリガーイベント後の処理

• Compera関連のアクションは何かの比較を行い、それが合っている時(True)と、合っていない時(False)でそれぞれイベントを設定することができます。

•これまで扱ってきたイベントはどれも事前にPlayMakerが用意した物でしたが、独自にイベントを作ることもできます。

Page 166: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

166

トリガーイベント後の処理

• [イベント]タブをクリック

•このFSMで使用しているイベントの一覧が表示されます

Page 167: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

167

トリガーイベント後の処理• [イベントを追加]に「Get Item」と入力してEnterキー(MacはReturnキー)を押すと独自イベントを追加することができます。

Page 168: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

168

トリガーイベント後の処理

• [状態]タブに戻り、Get Object Compare TagのTrue Eventをクリックして「Get Item」を選択•すると警告が出るので赤字の部分をクリックすると状態遷移が追加されます。

ここをクリック

Page 169: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

169

トリガーイベント後の処理

まだ遷移先のステートが設定されていないので⾚赤丸!が

付いている

Page 170: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

170

トリガーイベント後の処理• PlayMaker Editorの空いている場所で右クリックし[状態の追加]を実行

• ステート名を「State 1」から「Getting Item」に変更

• Getting Itemステートを選択してActivate Game Objectアクションを追加

• Game Objectを「Specify Game Object」に変更し、other変数を指定する

• Activateのチェックを外す

Page 171: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

171

トリガーイベント後の処理

• PlayerController FSMの全体図

Page 172: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

172

トリガーイベント後の処理

• シーンを保存してPlayボタンを押しましょう。

• アイテムを取るとGetting Itemステートで止まってしまいます。

• Getting Itemのアクションが終了したらMovingに戻るようにしましょう。

Page 173: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

173

トリガーイベント後の処理• Getting Itemを選択し、右クリックで[遷移を追加]-

[FINISHED]を実行• 追加されたFINISHED遷移をクリックしながら

MovingステートにD&D

Page 174: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

174

トリガーイベント後の処理• シーンを保存してPlayボタンを押しましょう。

• 収集アイテムに触れるとアイテムが消えるのと、プレイヤーの操作を続けることできるようになれば成功です。• もしこの時点でうまくいかなかった場合は、 Roll-

a-ball_Playmaker.zipに含まれているRoll-a-ball_Playmaker6 のプロジェクトファイルを開いて次に備えてください(別途PlayMakerのインストールもお忘れなく) 。

Page 175: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

175

4. Unity UIとの連携

Page 176: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

176

4.1. Add-Onの使い方(ecosystem)

Page 177: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

177

Add-Onパッケージとは• 収集アイテム数の表示用にuGUIを利用します。• uGUIは正式にはUnity UIと呼ばれ、Unity4.6から追加された機能です。

• 従来のOnGUIメソッドによるUI表示の弱点を克服し、2Dはもちろん、3Dオブジェクトしても配置ができるなど非常に汎用性の高いUIパッケージです。• PlayMakerは標準でuGUIに対応していないため

Add-Onパッケージを使用します。

Page 178: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

178

Add-Onのダウンロード• Add-Onを使うには[PlayMaker]-[Addons]-

[Download Addons]を実行します。

Page 179: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

179

Add-Onのダウンロード• Webブラウザが起動します。表示されたページの一番上にある「Ecosystem Browser」のリンクをクリックします。

Page 180: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

180

Add-Onのダウンロード•次のページの

EcosystemBrowserPackageをクリックしてダウンロードします。

Page 181: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

181

Add-Onのインポート•ダウンロードが完了したらファイルを開き、Unityにインポートします。

Page 182: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

182

Add-Onのインポート• Add-Onのインポートが完了したら、

[PlayMaker] -[Addons]-[Ecosystem]-[Ecosystem Browser]を実行してください。

Page 183: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

183

Add-Onのインポート• [Use the ecosystem!]ボタンを押す

Page 184: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

184

Unity UI連携パッケージのインストール

• Ecosystem browserの検索欄にuguiと入力して[Search]ボタンを押す

•「u GUI Proxy Full」にマウスを移動させると[Get]ボタンが表示されるのでそれを押す

Page 185: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

185

Unity UI連携パッケージのインストール

•インストールの様子

Page 186: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

186

4.2. Add-Onで追加できる主な機能一覧

Page 187: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

187

Add-onパッケージ• Add-onのダウンロードページには様々なアドオンが紹介されています。

• Unity Action Packs• Blend Shapes• Shuriken• Unity UI(今回はこちらを使用)• Unity Pathfinding• IOS Game Controller

Page 188: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

188

Add-onパッケージ• Third Party Tools• 2D Toolkit• A* pathfinding• Final IK• MegaFiers• PoolManager• Third Person Controller• など

Page 189: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

189

Add-onパッケージ• Starter Kits• 3D Infinite Runner for Playmaker• Platforming Starter Kit• Playmaker Essentials Pack• など

Page 190: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

190

Add-onパッケージ• Extensions• ArrayMaker• Comms Tool• PlayerPrefs X• TimeLine for PlayMaker• DataMaker• など

Page 191: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

191

4.3. UIのTextを変更

Page 192: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

192

得点表示用のUI• uGUIをPlayMakerから使うときは[PlayMaker

uGui] -[Prefabs]-[Playmaker UGui]プレハブをシーンに追加します。

Page 193: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

193

得点表示用のUI•体力表示のTextはHierarchy Viewから[Create]-

[UI]-[Text]で作成します。• CanvasやEventSystemは自動的に生成されるものなので削除しないようにしてください。

Page 194: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

194

得点表示用のUI• CanvasのCanvas Scaleを以下のように修正してください。これにより端末の解像度に依存しないUIが作成できます。

Page 195: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

195

得点表示用のUI• Game Viewの左上の「Free Aspect」を16:9などに変更します。

Page 196: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

196

得点表示用のUI• Canvas/Textをダブルクリックすると非常に大きな白い枠が表示されています。この白い枠はUI専用の枠でGame Viewには表示されません。

Page 197: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

197

得点表示用のUI• TextをScoreに名前を変更。• ScoreのRect Transformコンポーネントを次のように修正

注意!

Page 198: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

198

得点表示用のUI• ScoreのTextコンポーネントを次のように修正

Page 199: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

199

得点表示用のUI• Gameビューのイメージ

Page 200: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

200

クリアメッセージ用のUI• HierarchyのCanvasを選択し、右クリックで

[UI]-[Text]を実行(Canvasの下にTextが作成される)• TextをWinに変更

Page 201: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

201

クリアメッセージ用のUI• WinのRect Transformコンポーネントを次のように修正

Page 202: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

202

クリアメッセージ用のUI• ScoreのTextコンポーネントを次のように修正

Page 203: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

203

クリアメッセージ用のUI• Gameビューのイメージ

Page 204: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

204

スクリプト(イメージ)using UnityEngine;using UnityEngine.UI;using System.Collections;

public class PlayerController : MonoBehaviour {

public float speed;public Text countText;public Text winText;

private Rigidbody rb;private int count;

void Start (){

rb = GetComponent<Rigidbody>();count = 0;SetCountText ();winText.text = "";

}

<<< 続く >>>

Unity  UIのパッケージ名

スコアおよびクリアメッセージ⽤用

アイテムを取得した数

初期化処理

Page 205: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

205

スクリプト(イメージ)<<< 続き >>>

void FixedUpdate (){

float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

rb.AddForce (movement * speed);}

void OnTriggerEnter(Collider other) {

if (other.gameObject.CompareTag ( "Pick Up")){

other.gameObject.SetActive (false);count = count + 1;SetCountText ();

}}

<<< 続く >>>

アイテムを取得した数を1つ増やして、得点を更新

Page 206: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

206

スクリプト(イメージ)void SetCountText (){

countText.text = "Count: " + count.ToString ();if (count >= 12){

winText.text = "You Win!";}

}}

“Count:  取得数”という⽂文字列を⽂文字列を表⽰示取得数が12以上ならクリアメッセージを表⽰示

Page 207: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

207

Unity UIのText用変数の追加• Playerを選択し、PlayMaker

Editorの[変数]タブを開く•変数名: score、型:GameObjectを新規作成•インスペクタをチェック

Page 208: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

208

Unity UIのText用変数の追加•変数名: win、型: GameObjectを新規作成

•インスペクタをチェック

Page 209: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

209

count変数の追加•変数名:count、型: intを追加

Page 210: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

210

インスペクタによる指定• PlayerのInspectorのPlay Maker

FSMのscoreの右にある◎をクリックして表示されたダイアログのScoreを選択

• これはSceneのScoreゲームオブジェクトをD&Dしてもできます。どちらの操作でも構いません。

• 同様にwinも設定してください。

Page 211: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

211

初期化処理(Initステート)• Initステートを選択•アクションブラウザからSet Int Valueを追加• Int Variableにcountを設定

• Int Valueは0(初期値)

Page 212: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

212

初期化処理(Initステート)• InitステートにおいてアクションブラウザからU GUI Text Set Textを追加•図を参照して値を設定

Page 213: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

213

初期化処理(Initステート)• InitステートにおいてアクションブラウザからU GUI Text Set Textを2つ追加•図を参照して値を設定•変数winのText欄にはスペースを一つ入力してください

Page 214: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

214

初期化処理(Initステート)•シーンを保存して

Playボタンを押しましょう。

•左上に「Count: 0」、Winは空欄になれば成功です。

Page 215: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

215

アイテムの取得(Getting Item)• Getting Itemステートを選択し、Int Addアクションを追加

•図を参考に設定

Page 216: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

216

アイテムの取得(Getting Item)• Getting Itemステートを選択し、Convert Int To StringとBuild Stringアクションを追加

•図を参考に設定

“:”の後ろに空⽩白を1つ追加する

Page 217: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

217

アイテムの取得(Getting Item)• Getting Itemステートを選択し、

U GUI Text Set Textを追加•図を参考に設定

Page 218: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

218

アイテムの取得(Getting Item)• Getting Itemステートを選択し、

Int Compareアクションを追加•図を参考に設定

Page 219: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

219

クリア(Winステート)• Winステートを追加• Getting ItemのWinイベントからWinステートへの遷移を追加

•図を参考に設定

Page 220: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

220

基本システム完成!• シーンを保存してPlayボタンを押しましょう。

• アイテムを取得するとCountが増えていき、全て回収(12個)すると”You Win!”のメッセージを表示します。• もしこの時点でうまくいかなかった場合は、 Roll-

a-ball_Playmaker.zipに含まれているRoll-a-ball_Playmaker7 のプロジェクトファイルを開いて次に備えてください(別途PlayMakerのインストールもお忘れなく) 。

Page 221: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

221

4.4. UIのボタンに対応

Page 222: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

222

Unity UIのボタン対応• Unity UIのボタンが押されるとOnClick()呼ばれるイベントが発生します。

• PlayMakerではu GUI Proxy FullのAdd-onパッケージをインストールすると「ON CLICK」という名前のカスタムイベントが発生します。

Page 223: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

223

処理概要

•実現したい内容• 全てのアイテムを回収後に[Restart]ボタンを表示• [Restart]ボタンが押されたらシーンを再度読み込む

Page 224: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

224

処理概要• Unity UIボタンを追加

• Play Maker U Gui Component Proxyを追加(FSM内でUnity UIのイベントを受信する代理スクリプト)

• Restart FSMを追加• Restartステートを追加• カスタムイベント > UGUI > ON CLICKイベントを追加• RestartステートにLoad Levelアクションを追加し、Load Nameに「MiniGame」と入力

• PlayerController FSMの修正• restart変数(GameObject型)を追加、インスペクタに表示• Initステート

• [Restart]ボタンを非アクティブにする• Winステート

• [Restart]ボタンをアクティブにする• InspectorからRestartボタンへの参照を設定

• UnityのBuild SettingsにMiniGameシーンを追加

Page 225: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

225

Restartボタン• HierarchyのCanvasを選択し、右クリックを押して[UI]-[Button]を実行し、Buttonを作成

• Buttonを「Restart」に名前を変更

• RestartボタンのRect Transformを右図のように調整

• Canvas/Restart/TextのTextコンポーネントのTextプロパティを「Button」から「Restart」に変更

Page 226: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

226

Restartボタン• Unity UIのイベントをPlayMaker FSM内で受け取るためにPlay Maker U Gui Component Proxyコンポーネントを追加(Inspectorの[Add Component]ボタンを押して検索するのが比較的簡単)

Page 227: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

227

Restartボタン• Canvas/Restartを選択し、[PlayMaker]-

[Components]-[Add FSM to Selected Object]を実行• PlayMaker Editorで操作

• State 1をInitに変更。特にアクションは無し• 状態を追加。名前をRestartに変更• Restartステートを選択し、右クリックで[グローバル遷移を追加]-[カスタムイベント]-[UGUI]-[ON CLICK]を実行

• RestartステートにLoad Levelアクションを追加し、Load LevelのLevel Nameに「MiniGame」と入力

Page 228: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

228

Restartボタン• ON CLICKイベントの追加画面

Page 229: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

229

Restartボタン• Restart FSM

Page 230: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

230

Restartボタン• Restartステート

Page 231: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

231

PlayerController FSMの修正• Restart(GameObject型)変数を追加し、「インスペクタ」プロパティをチェックする

• InspectorのPlay Maker FSMコンポーネントのrestartにRestartボタンをD&Dする

Page 232: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

232

PlayerController FSMの修正•イメージ図

Page 233: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

233

PlayerController FSMの修正• InitステートにActive Game Objectアクションを追加(今回の処理は順番に依存しないため場所は任意)•下図のように設定

Page 234: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

234

PlayerController FSMの修正• WinステートにActive Game Objectアクションを追加(今回の処理は順番に依存しないため場所は任意)•下図のように設定

Page 235: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

235

Build Settingsの修正•シーンをロードするにためにはあらかじめBuild Settingsに使用するシーンを登録する必要があります。この設定は名前の通り、ビルドするために使用するものです。

• [File]-[Build Settings…]を実行

Page 236: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

236

Build Settingsの修正• ProjectビューのScenes/MiniGameシーンファイルをBuild Settingsの上の方にD&D

Page 237: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

237

完成• シーンを保存してPlayボタンを押しましょう。

• 全てのアイテムを回収してRestartボタンを押してみましょう。シーンが再度読み込まれました。

• もし、Restartしたあとライティングがおかしい場合は、[Window]-[Lighting]-[Settings]を実行して、Lightingビューの一番下にある[Auto Generate]のチェックを外して、[Generate Lighting]ボタンを押してからBuildしてみましょう。

• あとはBuild Settingsから好きなプラットフォームに切り替えてBuildしてみましょう。

• 終バージョンはRoll-a-ball_Playmaker.zipに含まれているRoll-a-ball_Playmaker8 のプロジェクトファイルです(別途PlayMakerのインストールもお忘れなく) 。

Page 238: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

238

5. FAQ

Page 239: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

239

FAQ• Q1. 実行画面(Gameビューやビルドしたアプリなど)に表示されるPlayMakerのステータスを消したい

• A1. PlayMaker Editorの[環境設定]の[ゲームビューニ状態ラベルを表示]のチェックを外してください

Page 240: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

240

FAQ• Q2.他にどんなことができるの?• A2.公式サイトを見ましょう。このワークショップが終わった後なら自力で読めると思います。• チュートリアル

• http://www.hutonggames.com/tutorials_game_design_with_playmaker.php

• リファレンスマニュアル• https://hutonggames.fogbugz.com/default.asp?W1

Page 241: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

241

FAQ• Q3. 同じようなFSMを何度も入力したくない。• A3. テンプレート機能を使えばFSMの保存/読み込みができますので、似たようなFSMのコピーができます。

Page 242: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

242

FAQ• Q4. Mecanim(Animator)制御はできるの?• A4. Add-onがあります(何故か一覧に無い)• https://hutonggames.fogbugz.com/?W1031

Page 243: 【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング

243

FAQ• Q5. C#/UnityScriptの方が分かりやすくない?• A5. 混合も出来ますので、うまく使い分けてください(例えば敵キャラのAI部分にだけPlayMakerを使ってみるとか)。

• その他、性能に関する情報やiOS/Androidなどの情報は公式FAQをご覧ください。• https://hutonggames.fogbugz.com/default.asp?W541