40点分…Instantiate
30点分…OnCollisionEnter
20点分…OnTriggerEnter
15点分…OnControllerColliderHit
15点分…AddComponent
30点分…GetComponent
25点分…SendMessage
20点分…Find
※※※※※※※※※※※※25点分…SendMessage
20点分…Find
画面構成
Sceneビュー
開発で使う、Scene内のGame Objectを操作する
Gameビュー
実際のゲームでの見え方を確認する
ゲームを実行するとSceneビューから切り替わる
Hierarchy(ヒエラルキー)ビュー
Game Objectが階層構造で表示される
Projectビュー
Project内のデータやスクリプトなどが格納されている
Inspector(インスペクター)ビュー
選択したGame Objectの詳細設定が表示される
Consoleビュー
スクリプトのデバッグ表示やエラーメッセージが表示される
Game Object
物やキャラクターなどの総称
UI切り替え
Window→Layoutsで選択
ゲーム実行中の注意点
ゲーム実行中にGame Objectの設定を変えても保存されない
→ゲームプレイ中のビューの色を変えた方が良い
ゲームプレイ中のビューの色の変更
Edit→Preferences→Colors→Playmode tint→変える色を選択
Game Objectの生成
Hierarchy→Create→作りたいモノを選択
プリミティブ素材
以下のような基本的な図形が用意されている
Cube…立方体
Sphere…球
Capsule…カプセル型
Cylinder…円柱
Plane…板
操作ツール
手のひら、矢印などのボタン群、どのような操作をするのかを切り替える
→左からQWERボタンがショートカットに割り当てられている
表示位置の変更
手のひらツールでSceneビューの表示位置を動かすことができる
[Alt]を押しながら(Macではoption)で、アイコンが目の表示に変わり、アングル(角度)を変えることができる
右上のScene Gizmoでも同じように視点の変更ができる
Hierarchyのオブジェクトをダブルクリックで、それが視点の中心にくる
Scene Gizmo(シーンギズモ)
真ん中の□クリックで遠近感が無くなる
Shift+真ん中クリックで角度をつける
オブジェクトの移動
十字キーツールで選択したGame Objectを移動することができる
InspectorビューのTransformのPositionを入力しても同じ
オブジェクトの回転
回転ツールで選択したGame Objectを回転させることができる
InspectorビューのTransformのRotationを入力しても同じ
オブジェクトの大きさを変える
拡大縮小ツールで選択したオブジェクトの大きさを変えることができる
→真ん中をドラッグで全体的に拡大縮小できる
InspectorビューのTransformのScaleを入力しても同じ
ライト
ライトで光を当てることでオブジェクトが明るくなる
Directional Light…太陽の光で方向のみを設定する
現在の見た目でカメラを固定
Hierarchyでカメラを選択→Game Object→Align With View
Hierarchyでカメラを選択→Game Object→Align With View
ProjectとScene
Projectはそのゲーム全体のことで複数のSceneが格納される
Sceneはタイトル画面や各ステージなど、別々のシーン毎に1つずつ作る
Prefab(プレハブ)
個別のシーンのオブジェクトをプロジェクト内で共通に使えるようにすること
→HierarchyビューにあるオブジェクトをProjectビューにドラッグ&ドロップする
ProjectビューにあるプレハブはHierarchyビューにドラッグ&ドロップで同じものをいくつも生成できる
シーンの作成
File→Save Scene→シーン名を入力して保存
※保存後、Projectビューにシーンが表示される
オブジェクトの生成
Hierarchy→Create→作りたいモノを選択
オブジェクトの複製
Hierarchyの複製元を右クリック→Duplicate
重力の付与
オブジェクトにRigidbody(リジッドボディ)を設定する
InspectorのAdd Component→Physics→Rigidbody
Rigidbodyの設定項目
Mass…質量
Drag…空気抵抗
Angular Drag…回転にかかる空気抵抗
Use Gravity…重力を付けるかどうか
Is Kinematic…スクリプトから操作しなければ動かない
Constraints→Freeze Position…ポジション固定
Constraints→Freeze Rotation…回転固定
衝突判定を無くす
~ Colliderのチェックを外す
※Box Colider、Sphere Coliderなど
摩擦や反発の設定
プロジェクトにPhysic Materialを作成し、それをオブジェクトに付与する
Physic Materialの作成
Projectビュー→Create→Physic Material→名前を付ける
Physic Materialの付与
付与したいオブジェクトを選択→Inspectorの~ ColiderのMaterialに作成したPhysic Materialをドラッグ&ドロップ
Physic Materialの設定項目
Dynamic Friction…動的な状態の摩擦(0~1) ※0が摩擦なし
Static Friction…静的な状態の摩擦(0~1) ※0が摩擦なし
Bounciness…反発係数(0~1) ※0で反発無し
Friction Combine…オブジェクトが衝突した際の摩擦の計算方法
Bounce Combile…オブジェクトが衝突した際の反発の計算方法
オブジェクトに色をつける
プロジェクトにMaterialを作成し、設定後それをオブジェクトに付与する
Materialの作成
Projectビュー→Create→Material→名前を付ける
Materialの設定
Projectビュー→Materialを選択→InspectorのMain Colorで色を設定
Materialの付与
Projectビュー→Materialを選択→Hierarchyの付与したいオブジェクトの上に、Materialをドラッグ&ドロップ
Empty
フォルダ的にいくつかのオブジェクトをまとめられる
GameObject→Create Empty
※Emptyでまとめたオブジェクトに重力を付けたい場合、EmptyにRigidbodyを付与する
物体の形の変更
Inspectorの○○○(Mesh Filter)->Meshを変更で可能
Asset(アセット)
アセットと呼ばれる部品を使うと簡単に地面や空などを作れる
unityPackageとして標準で使えるアセット
Character Controller…操作できるキャラクター
Particles…火や煙などのエフェクト
Skyboxes…空
Terrain Asset…地面
Tree Creator…木
Water(Basic)…水
Terrain
ブラシでなぞって山を作ったり、筆で土や湖などを塗ったりできる
テクスチャーを貼り、地面の表面を芝や雪などの質感を与えられる
木を生やしたり、草を生やしたりすることもできる
Skybox
Main Camera(メインカメラ)に設定することで、カメラが移動しても常に空が表示される
Character Controller
自分で動かすことのできるキャラクター
First Person Controller…一人称視点
3rd Person Controller…三人称視点
3rd Person Controller
各アニメーションを設定するだけで、自在に動かせるキャラクターを作れる
Idel Animation…待機中
Walk Animation…歩く
Run Animation…走る
Jump Pose Animation…ジャンプ
Particle
エフェクトで様々な表現を作れる
Dust Storm…砂嵐
Water fall…滝
Fire1…炎
Asset Store(アセットストア)
様々なアセットが入手できるストア
Web Player書き出し
Web Playerに書き出せばブラウザ上でプレイできる
File→Build Settings…→WebPlayerを選択しSwitch Platform→Buildで名前をつけて保存
スクリプトの追加
Inspector→Add Component →New Script
エディタを変える
edit-→Preferences…→External Tools →External Script Editor
スクリプトについて
jsはクラス宣言が省略されている
(ファイル名と同じクラスでMonoBehaviourを継承)
Startメソッド…最初に一回だけ呼ばれる
Updateメソッド…フレーム毎に何度も呼ばれる
デバッグ出力
Debug.Log
変数宣言
var
関数宣言
function
オブジェクトの移動
transform
全てのGame Objectが持っているプロパティで位置・回転の情報を持っている
移動(相対)
transform.Translate(X軸, Y軸, Z軸);
※X,Y,Zの値が加算された位置に移動する
回転
transform.Rotate(X軸方向,Y軸方向,Z軸方向);
前進(Z軸方向)
transform.Translate(transform.forward);
※負の値を掛けると反対方向
上昇(Y軸方向)
transform.up
右(X軸方向)
transform.right
フィールド値
フィールド(privateではない)値がInspectorに表示され、そちらで編集できる
フィールド値の優先順位
初期値→Inspector→Start()内の順で設定した値が優先される
位置情報
Vector3クラスを使う
new Vector3(X座標, Y座標, Z座標)
現在座標
transform.position
絶対座標への移動
transform.position = Vector3.MoveTowards(transform.position, new Vector3(X座標, Y座標, Z座標), 移動量);
例)
transform.position = Vector3.MoveTowards(transform.position, new Vector3(10,10,10), 0.1);
キーボード入力の取得
Input.GetKey(キーコード)
※true or falseを返す
キーコード
上…KeyCode.UpArrow
下…KeyCode.DownArrow
右…KeyCode.RightArrow
左…KeyCode.LeftArrow
画像をテクスチャにする
画像をAssetsにドラッグ&ドロップ
力を加える
transform.rigidbody.AddForce(X, Y, Z);
※オブジェクトにリジッドボディが付与されている必要がある
パーティクルの追加
Add Component→Effects→Particle System
移動(直接入力)
transform.position.x = Xの値;
transform.position.y = Yの値;
transform.position.z = Zの値;
拡大・出力(直接入力)
transform.localScale.x = Xの値;
transform.localScale.y = Yの値;
transform.localScale.z = Zの値;
見えなくする
Mesh Rendererのチェックを外す
無効にする
オブジェクト名の左側のチェックを外す
コンポーネントの削除
設定(歯車ボタン)→Remove Component
型の付け方
var 変数名 :型名;
Keyの割り当て参照
edit→Project Settings→Input
キー入力の取得
Input.GetButtonUp(Input名)
→ボタンを押した後、離したかどうかをtrue or falseで返す
キー入力の取得
Input.GetAxis(Input名)
→正方向がプラス、負方向はマイナスを返す
インスタンスの生成
Instantiate(生成したいオブジェクト, position, rotate);
※生成したいオブジェクトはプレハブ化していること
衝突判定
OnCollisionEnter(obj:Collision)
→他のオブジェクトと衝突した場合に呼ばれる
※引数はぶつかった相手
衝突したオブジェクトの名前を取得
Collsionの変数名.gameObject.name
乱数
Random.Range(From値, To値)
時間関係の処理
Timeクラスを使う
フレームのカウント取得
Time.frameCount
数学関数
Mathfクラス
Mathf.Floor()…切り捨て
Mathf.Ceil()…切り上げ
Mathf.Round()…四捨五入
スクリプトを実行しているオブジェクト
gameObjectプロパティで取得
Game Objectを消す
Destroy(消したいオブジェクト);
例)自分を消す
Destroy(gameObject);
BGMの付与
EmptyでBGMを与えるオブジェクトを作る
Add Component→Audio→Audio Source
起動したら再生
Play On Awakeにチェック
ループ
Loopにチェック
効果音(SE)の再生
AudioSource.PlayClipAtPoint(効果音, transform.position);
※音が鳴らない場合は3D Soundを外すと良い場合がある
エフェクト
Particleを生成する
例)
var explosion :GameObject;
function OnCollisionEnter(obj :Collision) {
//爆発のエフェクト
Instantiate(explosion, transform.position, transform.rotation);
}
トレイルレンダラ
オブジェクトの後ろにエフェクトを出す
Add Component→Effects→Trail Renderer
Materials→Element0にパーティクルを設定
テキストを表示
GUIText
※ver4.6以降はuGuiを使用
Position x(0~1), y(0~1)で調整
※(0,0)で左下
テキストを設定
GUI Textの場合
guiText.text = 設定したい文字列;
uGuiの場合
var score :Ui.Text;
score.text = 設定したい文字列;
GUIの表示
OnGUI()で実行時に表示される
矩形型
Rect(x, y, width, height)
ラベルの表示
var style : GUIStyle;
function OnGUI() {
GUI.Label(Rect(10,10,200, 50), "abc", style);
}
→InspectorでStyleを設定する
画面遷移
File→Build Settings→シーンを登録
Application.LoadLevel(シーン名);
Tiling(タイリング)
テクスチャ画像を張る枚数
当たり判定の設定
Add Component→Phusics→Colliderを設定
タグ
オブジェクトのスクリプトでの識別に使う
InspectorのTab→Add Tag…→Element0にタグ名を入力し作成
→作成したタグを設定
タグの参照
gameObject.tag
例)タグの名前がBulletかどうか
if (gameObject.tag == "Bullet") {
マウスクリック
押したとき
Input.GetMouseButtonDown(ボタン番号);
離したとき
Input.GetMouseButtonUp(ボタン番号);
0…左クリック
1…右クリック
2…真ん中クリック
関数の戻り値の型
function 関数名(引数) : 戻り値の型 {
・・・
}
キャスト
キャストしたい変数 as キャストしたい型
親オブジェクトの設定
設定したいオブジェクト.transform.parent = 親にしたいオブジェクトのtransform;
ローカルな位置情報
親オブジェクトからの相対位置になる
例)親からX方向に10ずれたポジションに設定
obj.transform.localPosition = Vector3(10, 0, 0);
ローカルな位置…transform.localPosition
ローカルな大きさ…transform.localScale
(0,0,0)のVecter3を生成
Vector3.zero
クリックした座標の取得
Input.mousePosition
Rayを飛ばす
Rayとは指定の向きへレーザーを放つ感じ
ScreenPointToRay(飛ばすポジション);
例)メインカメラからマウスポインタへRayを飛ばす
Camera.main.ScreenPointToRay(Input.mousePosition);
角度を取得
オブジェクト.direction.normalized;
加速度を与える
rigidbody.AddForceと違い、摩擦などを考慮せずいきなりトップスピードになる
オブジェクト.rigidbody.velocity = 加速度の値
※オブジェクトにrigidbodyが設定されていること
当たり判定(スクリプト上だけ)
Is Triggerにチェック
OnTriggerEnter(col : Collider) で検出
オブジェクト同士のくっつき
CharacterJointを設定
Break Force…耐えられる力の限界
Break Torque…耐えられる回転の限界
スクリプトでコンポーネントを追加
gameObject.AddComponent(コンポーネント名)
→追加したコンポーネントを戻り値として返す
スクリプトでのCharacterJoinの設定
オブジェクト.connectedBody = くっつけたい相手のrigidbody
オブジェクト.breakForce = Break Forceの値
オブジェクト.breakTorque = Break Torqueの値
フィールドのアクセス修飾子
public,なし…Inspectorに表示される
private…Inspectorに表示されない
ボタンを生成
GUI.Button(Rect型の変数, テキスト);
→クリックされたらtrue、そうでなければfalseを返す
例)
if (GUI.Button(Rect(400, 250, 100, 50), "BUTTON")) {
Debug.Log("Click!");
}
ラベルを生成
GUI.Label(Rect型の変数, テキスト, GUIStyle型の変数);
GUIStyle
GUIのStyleを設定
例)フォントサイズを40,色を赤に設定
var style : GUIStyle;
style.fontSize = 40;
style.normal.textColor = Color.red;
プリミティブ素材の生成
GameObject.CreatePrimitive(プリミティブ素材のタイプ);
プリミティブ素材のタイプ
PrimitiveType.Sphere
PrimitiveType.Cube
PrimitiveType.Plane
オブジェクトを無効にする
オブジェクト.renderer.enabled
Rayの当たり判定
Physics.Raycast(Ray型の変数, RaycastHit型の変数, 距離)
→当たったかどうかをtrue or falseで返す
例)メインカメラからマウスポインタまでの当たり判定
var ray : Ray;
var hit : RaycastHit;
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, hit, 100)) {
Debug.Log("Hit!!");
}
プレハブのインスタンスの変更
インスタンスのみ変更され、プレハブ本体は変更されない
→Applyボタンを押すとプレハブ本体の方にも変更が適用される
経過時間
Time.time
ある地点から角度を指定した座標の指定
rad = 角度 * PI / 180;
x = sin(rad), y = cos(rad);
例)(0,0)の地点から30度の場所に移動
var rad = 30 * Mathf.PI / 180
transform.pisition(sin(rad), 1, cos(rad));
マウスポインターが重なったとき
OnMouseEnter()
フレームレートに依存しない処理
1秒間にUpdateが呼び出される回数は環境毎に変わる
→Time.deltaTimeを掛けると良い
例)1秒間に30度ずつ回転させる
transform.Rotate(0, 30 * Time.deltaTime, 0);
Mecanim
アニメーションの遷移を管理する
Characer Controller
キャラクターを動かす
物理演算の影響を受けなくなる
カメラの追従
Smooth Foolowスクリプトを設定する
影を作成
Projectorsアセットを使用
レイヤー
Edit→Project settings→Physics
Layer Collision Matrixでレイヤー同士の衝突の有無を設定
プロジェクト内の重力
Edit→Project settings→Physics
Gravityを変更することができる
データの保存
PlayerPrefsでKey,Value方式で保存できる
キーの存在確認
PlayerPrefs.HasKey(キー);
PlayerPrefs.Set○○(キー);
※○○はデータの型名(Intなど)
値の取得
PlayerPrefs.Get○○(キー);
データの削除
PlayerPrefs.DeleteKey(キー);
設定しているコンポーネントの取得
GetComponent(コンポーネント名)
アニメーターのパラメーターをセット
アニメーター.Set○○(キー, 値);
※○○はデータの型名(Intなど)
アニメーターのステート情報を取得
アニメーター.GetCurrentAnimatorStateInfo(0);
→AnimatorStateInfo型の戻り値にステート情報が格納されている
アニメーターステート情報の名前を確認
アニメーターステート情報.IsName(名前)
→現在のアニメーションがその名前かどうかを返す
関数の遅延実行
Invoke(関数名, 秒数);
キャラクターを操る方法
transform
rigidbody
charactor Controller
Charactor Controller
接触判定も含まれている
→元々あった接触判定は差し替えとなる
接触判定
Center,Radius,Height
接地しているかどうか
isGrounded
Slope Limit…上れる坂の角度
Step Offset…上れる段差
ベクトル大きさ
Vector3の変数.magnitude
そちらを向く
transform.LookAt(方向<Vector3>)
移動
キャラクターコントローラー.move(方向<Vector3>);
Vector3.zero = Vector3(0, 0, 0);
Vector3.one = Vector3(1, 1, 1);
Vector3.forward = Vector3(0, 0, 1);
Vector3.back = Vector3(0, 0, -1);
Vector3.up = Vector3(0, 1, 0);
Vector3.down = Vector3(0, -1, 0);
Rigを設定できるWebサービス
https://www.mixamo.com/
子要素のコンポーネントを取得
GetComponentInChildren(コンポーネント名)
OnTrigger○○○
OnTriggerEnter:接触した時
OnTriggerStay:接触している間
OnTriggerExit:離れた瞬間
影を付ける
ライトを選択→ShadowTypeをSort,Hard Shadows
※影の演算は重くなるので注意
オブジェクトの関数を実行
オブジェクト.gameObject.SendMessage(関数名);
→戻り値を取得できない
関数が無い場合もエラーを表示させない
第二引数に「SendMessageOptions.DontRequireReceiver」を指定する
SendMessageを使わない方法
var s:スクリプト型 = gameObject.GetComponent(スクリプト名);
s.実行したい関数
傾きを設定
transform.eulerAnglesに値を設定する
※transform.rotation = Quaternion.Euler(Vector3の値);でも同じ
そちらの方向を向く
transform.rotation = Quaternion.LookRotation(Vector3の向きたい方向);
Mathfの関数
Mathf.Pow…べき乗
Mathf.Sqrt…平方根
Mathf.Clamp…値の上限,下限を設定できる
Mathf.PingPong…往復する値を返す
Mathf.Lerp…線形補完
Mathf.Abs…絶対値
指定時間後に削除
Destroy(オブジェクト, 秒数);
オブジェクトの有効・無効
設定
オブジェクト.SetActive(booleanで有無)
取得
オブジェクト.activeSelf
自分が削除されたとき
OnDestroy()
配列
2つのやり方がある
【1】
new Array(配列の要素,・・・);
【2】
var 変数名:配列の型[];
変数名 = new 変数名:配列の型[要素数];
※初期化子を使う場合
var 変数名 = [要素1, 要素2, ・・・];
キャラクターコントローラーの衝突判定
OnControllerColliderHit(ControllerColliderHit型)
単位ベクトル
magnitudeが1になるような値
→方向のみを使いたい場合に使用
Vector3型の変数.normalized
Arrayクラス
Shift…要素を前方向に詰める
Unshift…要素を先頭に追加して後ろにずらす
Push…最後の要素として追加
Pop…最後の要素を取り出す
2台目のカメラ
Audio Listenerを削除する
mainカメラと2台目と両方のViewport Rectを調整する
→X, Wを設定
当たり判定
1.CharacterControllerを持つオブジェクトが移動して衝突する場合
OnControllerColliderHit
2.colliderを持つオブジェクトがCharactorControllerを持つオブジェクトに衝突する場合
OnTrigger○○○
3.CharacterControllerを持つオブジェクト同士
OnControllerColliderHit
Hierarchyのオブジェクトを取得
GameObject.Find("オブジェクト名");
子要素の数を取得
transform.childCount
子要素を取得
transform.GetChild(インデックス)
オブジェクト、スクリプトの取得
GameObject.FindObjectOfType(オブジェクトの型);
→メソッドチェーンで取得したスクリプトのメソッドを呼べる
C#について
using→import
:→extens
アクセス修飾子無し→private
ジェネリクス<型>
画面の幅と高さを設定
Build Settings…→Player Settings…→Resolution and Presentation→幅と高さを指定
Gameビューの左上をWeb(○○○×○○○)にすると幅と高さが制限される
オブジェクトが画面外になった場合
OnBecameInvisible()
デバッグでポーズ
Debug.Break();
Skyboxの設定
Edit→Render Settings→Skybox Material
※SceneビューのEffectsでSkyboxにチェック
Euler角からQuaternionへの変換
Quaternion.Euler(X, Y, Z);
Updateが終わった後の処理
LateUpdate()に記載する
→Updateの後に呼ばれる(毎フレーム)
Legacy Animation
アニメーションを実行
アニメーション.clip = 実行したいアニメーションクリップ;
アニメーション.Play();
徐々にアニメを変化(クロスフェード)
アニメーション.CrossFade(アニメの名前<String>, クロスする時間);
内部クラスをInspectorに表示させる
[System.Serializable]
※C#の場合
影を付ける(軽めの処理)
Projectorで黒い光を当てる
→自分も真っ暗になってしまう
解決策
→Ignore Layersで例外を設定
→Near Clip Planeで当てる範囲を調整
影を付ける(軽い処理)
足元に影の画像を表示するオブジェクトを設置する
衝突判定の条件
1.衝突を起こす両方のゲームオブジェクトにColliderコンポーネントが追加されていなければならない
2.2つのゲームオブジェクトのうちで移動する方には必ずRigidbodyコンポーネントが含まれていなければならない
コルーチン
スレッド(マルチタスク)のようなモノ
開始
StartCoroutine(実行したいメソッド)
実行したいメソッドの型
IEnumeratorを戻り値として返す
→「yield return 戻り値;」で返す
コルーチンの一時中断
yield return new WaitForSeconds(中断時間);
→再開はこの後から
例)コルーチンの例
void Start () {
// コルーチンを実行
StartCoroutine ("Sample");
StartCoroutine ("Sample2");
}
// コルーチン(途中で一定時間中断)
private IEnumerator Sample() {
// ログ出力
Debug.Log ("1");
// 1秒待つ
yield return new WaitForSeconds (1.0f);
// ログ出力
Debug.Log ("2");
// 2秒待つ
yield return new WaitForSeconds (2.0f);
// ログ出力
Debug.Log ("3");
}
//1フレームごとにログを出力
private IEnumerator Sample2() {
for (int i = 0; i < 100; i++) {
Debug.Log ("i:" + i);
yield return null;
}
}
回転の初期値
Quaernion.identity
ある範囲内にあるColliderを取得
Physics.OverlapSphere(中心点, 半径)
例)指定した原点を中心に10.0f半径内に入っているColliderオブジェクトを抽出
Collider[] colls = Physics.OverlapSphere(tr.position, 10.0f);
爆発のような力を与える
オブジェクト.rigidbody.AddExplosionForce(爆発力, 原点, 半径, 上に跳ね飛ばす力);
テクスチャの更新
MeshRenderer変数.material.mainTexture = Texture型;
コンポーネントの削除禁止
[RequireComponent(typeof(コンポーネント名))]
※クラス宣言の前に記述
アニメーション
Rig→Animation Type
Humanoid…人間型
Generic…四足歩行
Apply→Configure…→モデルの動きを調整
追跡ルーチン
床と障害物を「Navigation Static」
Window→Navigation→Bakeタブ→Bakeボタン→通っても良い部分が青くなる
Nav Mesh Agentコンポーネントを追加
NavMeshAgent変数.destination = 対象のポジション;
2点間の距離
Vector3.Distance(A地点, B地点);
列挙型
enum 型名 {値1, 値2,・・・};
→使う場合は「型名.値」
徐々に方向を変える
Quaternion.Slerp(from, Quaternion.LookRotation(to - from), speed(0~1));
どんな状況からもアニメーションする
「Any State」からMake Transition
アニメーションが○%まで再生したら
Exit Time を設定(0~1)
アニメーターの階層構造
複数のレイヤーを持つことができる
→GetCurrentAnimatorStateInfo(0)は1つ目のレイヤー
アニメーションをハッシュ値で比較
GetCurrentAnimatorStateInfo(0).nameHash == Animator.StringToHash(レイヤー名.アニメーション名")
同じタグのオブジェクトを取得
FindGameObjectsWithTag(タグ名)
例)
GameObject[] ary = GameObject.FindGameObjectsWithTag("a");
foreach (GameObject a in ary) {
・・・
}
イベント駆動
イベントを発生させる側
デリゲートの設定
public delegate void デリゲート名(引数);
イベントの設定
public static event デリゲート名 イベント名;
イベントの発生
イベント名(引数);
イベントを受け取る側
イベントを登録
void OnEnable() {
スクリプト名.イベント名 += 実行するメソッド名;
}
イベントを削除
void OnDisable() {
スクリプト名.イベント名 -= 実行するメソッド名;
}
子オブジェクトのコンポーネントを全て取得
GetComponentsInChildren
※Index:0に自分自身が入る
ゲームオブジェクトを動的に生成
GameObject 変数名 = new GameObject(名前);
Trigger型パラメータ(アニメーション)
アニメーション型変数.SetTrigger("パラメーター名");
→トランジションが終らないとOffにならない為、使い方が難しい
アニメーションによって座標を変化させない
Inspector→Animator→Apply Root Motion
→チェックをはずす
アニメーションのリターゲティング
違うアバターにアニメーションコントローラーとスクリプトを付与
→元のアバターと同じアニメーションをする
※RigのAnimation Typeを合わせる必要がある
アニメーションイベント
アニメーションを選択→Inspector→Eventsにイベントを追加
→呼び出す関数名(Function)、関数の引数を設定
→→設定したイベントのタイミングで登録した関数が呼ばれる
Unity 2D
画像の重なりを管理
Sorting Layersを追加する
1つの画像を分割
Sprite Mode→Multiple
Sprite Editorで選択する
回転させない
Rigidbody2D→Fixed Angle
2Dアニメーション
Window→Animation→Create New Clip
Sample:1秒間のコマ数
画像をドラッグ&ドロップ
画像を反転
Scaleを負の値にする
LineCast
線を引いて、その線上に当たり判定があるかを判定
Physics2D.Linecast(開始点, 終了点, 判定するレイヤー);
→戻り値としてRaycastHit2Dを返す
アニメーションイベント
Animationウィンドウで左クリック→Add Animation Event
→呼び出すfunctionを設定
uGUI
Render Mode→Screen Space-Overlay
→最前面に表示
※using UnityEngine.UI;
→こうしておくとText.○○などとと使える