2015年1月11日日曜日

Unity

※※Unityでの重要要素※※

40点分…Instantiate

30点分…OnCollisionEnter
20点分…OnTriggerEnter
15点分…OnControllerColliderHit

15点分…AddComponent
30点分…GetComponent

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



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.○○などとと使える


0 件のコメント:

コメントを投稿