Unityメモ
カメラの追加コンポーネントである CineMachineを使って、キャラクターを追尾するカメラを作る。
参考:https://gametukurikata.com/camera/cinemachine
-
PackageManagerからCineMachineをインストール
-
追尾するキャラクターを作成
-
頭の位置に空のGameObjectを追加
- 例えば名前を「HeadTarget」とする。
-
-
メインカメラに対してコンポーネント追加で「Cinemachine Brain」をセット。
-
適当なGameObjectを作って、コンポーネント追加で「Cinemachine Free Look」をセット。
-
次の値をセット
-
Follow:キャラクター
-
Look At:HeadTarget
-
Common Lens:チェックをいれる。
-
Lens
- Field Of View:カメラがフィールドを写す範囲。結果としてキャラクターとカメラの距離。ゲームによるだろうが初期値よりは増やす。
-
Axis Control
-
Y Axis
- Input Axis Value:Invertのチェックを外す。
-
X Axis
- Input Axis Value:Invertのチェックを外す。
-
-
Orbits
- Brending Mode:World Spaceにする。
-
-
-
Aim に Group Composer を付け、かつ Cinemachine Confiner で Box Collider を付けた場合に、カメラの位置が Collider 外になる事がある。
-
Aim はカメラ方向を制御するものであるが、Group Composer は特殊で、カメラ位置を変化させる場合もある。これが干渉しているものと思われる。
-
Confilner を付ける場合は、Aim の Adjustment Mode を Zoom Only にする事とする。
-
アニメーション
既存のものを削りすぎるとキャラクターが動かなくなるが、何がそうさせるのかがまだわからない。
-
PlayerControllerのm_Respawningがtrueになるまでは動けない。Respawnの状態に付いているEllenSetTargetableSMBで降ろしているが、このスクリプトを削除したことで動かなくなった。
- 削除するならRespawnの扱いも考える必要がある。演出上プレイヤーを動かしたくない場合があるだろうから、意味をそれに変更するのが良いかもしれない。
-
LocomotionSMの中のLocomotionに付いているMotionを削除したら動かなくなった。
-
ジャンプは出来る。
-
LocomotionBlendTreeとなっている。アイコンが違うので何か特殊なもののようだ。
-
ダブルクリックで詳細が出た。
-
https://docs.unity3d.com/ja/current/Manual/class-BlendTree.html
-
Animatorの編集画面ではStateとSubSMとあったが、加えてブレントツリーもあったようだ。
-
-
→ 原因判明
-
キャラクターを動かしているのは AnimatorではなくCharacterController
-
PlayerController内のOnAnimatorMoveで、CharacterController.Moveで動くが、Animator.deltaPositionが有効な値にならないので進まない。
-
ジャンプ中はアニメーションを使っていないので、常にジャンプ中の計算を使うことで進むように出来た。
アニメーション基本
-
AnimationというGameObjectを作る。
-
ダブルクリックをするとエディタが表示される。
-
右クリックで項目を追加
-
State:四角い図形。
-
Sub-StateMachine:横に長い六角形の図形。
- ダブルクリックで子の遷移を作る。
-
-
設定
-
名前をつける。
-
アニメーションの時間
-
アニメーションの動作をMotionオブジェクトとして関連付け → これの作り方は不明。おそらく外部ツールが必要。FBXみたい。
-
スクリプトを付けると、StateMachineBehaviorベースのクラスが出来る。
-
-
それらを矢印で結び、スクリプトで矢印の先のStateの名前を与えることで遷移する。
サンプルでのアニメーションは、地上にいるかどうかと入力があるかどうかで遷移している。
- PlayerController 内から m_Animator.SetBool でそのフラグをセットしている。
サンプルを元に自分で作ったオブジェクトを置いた場合に、当たり判定がない場合。
レイヤーでどれとどれが当たり判定を付けるかどうかの設定がある。
Edit → Project Setings → Physics を開き、Layer Collision Matrixを展開する。
とりあえずオブジェクトに色を塗りたい時
-
Materialsフォルダを作る。
-
フォルダ内でCreate->Material
-
色を設定
-
出来たマテリアルを、色を塗りたいオブジェクトにドラッグ&ドロップ
キーアサイン
Edit - Project Settings - Input
Unityで以下のエラーが出る場合
There are inconsistent line endings in the 'Assets/Scripts/PeerToPeerBehaviourScript.cs' script.
Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.
プロジェクトに以下のファイルを含める。
-
ソリューションを選択した状態から、新規項目でテキストを選んで、ファイル名を.editorconfigにする。
-
次の内容を記述する。
root = true
[*.cs]
indent_style = tab
indent_size = 4
end_of_line = lf
charset = utf-8
参考 https://www.f-sp.com/entry/2017/04/06/023709
→うまく行っていないような感じ。おそらくUnityが毎回ソリューションファイルなどをリセットするため。
修正
2026/02/22 更新しました。主な内容は変わっていません。