最終更新: kenken2020 2024年01月03日(水) 16:08:15履歴
目次
◎参考用のプレハブの場所
MovingToTarget
レトロコーギーキャラクターアニメーターコントローラーを参考にする
参考サイト1
◎MASTを使ったマップエディット
◎「3Dオブジェクト」→「キューブ」で作ったのが当たり判定しない
◎Cinemachineカメラの活用
◎Character SlopeOrientation
参考サイト1
◎MASTを使ったマップエディット
- MASTの描画レイヤーは-5ぐらいがコーギーエンジンのオフセットを重なる?
- MASTタブ→Tools→「Merge Meshes」を行うとオブジェクトを結合したメッシュが出来る
- 古い個別のオブジェクトは削除して、コライダーをアタッチして、レイヤーをPlatformにすると地形が出来る
◎「3Dオブジェクト」→「キューブ」で作ったのが当たり判定しない
- レイヤーを「Platform」
- 既存のコライダーコンポーネントを削除して「Box Collider 2D」をアタッチすれば出来る?
◎Cinemachineカメラの活用
- v6.0以降Cinemachineに対応した
◎Character SlopeOrientation
- 坂道で使う
- RayCast Lngth:10ぐらい?
◎準備編
◎使用編
- Tile Palette の作成
- 「Window>Tile Palette」→「Create New Palette」
- タイル用の画像を選択、「Sprite Mode」を「Multiple」
- 「Pixels Per Unit」でタイルのサイズ
- 「Filter Mode」を「Point (no filter)」
- スプライトエディタでスライス
- スライスしたタイルセット用の画像をタイルパレットにドラッグ
- サブフォルダを作成し、そこに分割されたタイルチップが作成される
◎使用編
- Hierarchy の「Create>2D Object>Tilemap でタイルマップ使用の準備ができる
- 当たり判定の注意
- 「Tilemap」に「Tilemap Collider 2D」のコンポーネントを追加
- コーギーエンジン使用時は、タイルマップの「タグ」と「レイヤー」の設定を忘れずに
- タグは「Background」?レイヤーは「Platform」?
- オートタイル等を実装したい場合はGithubにて拡張する
- Unityの新規プロジェクトを作成
- アセット「Visual Studio Editor」を削除
- 削除しないとVisual Studioが起動しない
- コーギーエンジンをインポートする
- 3Dオブジェクト→平面を作成
- Transformで10倍程度引き伸ばす
- 市松模様のテクスチャを適当なところから用意する
- 市松模様テクスチャのインスペクター→上級者向け→ラップモードを「繰り返し」にする
- Directional Lightをシーンに配置する
- 適当な3Dモデルをインポートしシーンに配置する
- ディレクショナルライトの向きを調整に3Dモデルに光が当たるようにする
- 新しく3D確認用のカメラを作成する
- 3D確認時は最初に作成さえたMainCameraのチェックボックスを切る
- FOV(視野角)は歪みを低くするため、30に設定する
- 新しくロック用のレイヤーを作る
- 地面など、めったに動かさないオブジェクトはロックレイヤーにセットして、レイヤー丸ごとロックする
- ヒエラルキー「****2DCameras」→「CM vcam1」のインスペクター→「CinemachineVitualCamera」→「Noise」を「BasicMultiChannelPerlin」を「none」に変更する
- コーギーエンジンでプレイヤーが一定範囲内に入った時に、ユーザー定義のスクリプトの関数を呼びたい
- AIBrain, AI Decision Detect Target Radius, AIActiionUnityEvents, AI Action Do Nothing,自作のスクリプトの5つを用意する
- AIBrainの設定
- 上側のStateの「Action」→「AI Action Do Nothing」:「遷移」→「AI Decision Detect Target Radius」
- True Stateの場合は自身へ Flse Stateの場合は下側の遷移へ飛ばす
- 下側のStateの「Action」→「AIActiionUnityEvents」:「遷移」→「AI Decision Detect Target Radius」
- 遷移条件は空白
- AIActiionUnityEventsの設定
- ◎の中に自身のオブジェクトをドロップ
- 先に自作のスクリプトをアタッチ
- プルダウンメニューから自作スクリプトの中の実行したpublic関数を選択する
- 空のオブジェクトをヒエラルキーに作成し、その子供としてFBXモデルを配置する
- Characterスクリプトなどは、親のオブジェクトにアタッチ
- 回転や縮尺は、FBXのオブジェクトのインスペクターで調整する
- Characterスクリプトの「Character Model」にはFBXオブジェクトをドロップする
- Box Collider 2Dの大きさを調整する
◎NPCに必要な最低限のスクリプト
◎プレイヤーセットアップ
- Corgi Controller
- Character
◎プレイヤーセットアップ
- コーギーエンジンで使う足場は、2Dオブジェクトで「Box Collider 2D」をアタッチしてないと、キャラクターがすり抜けてしまう
- キャラクターが奥を向くので調整が必要
- 「XXX3DモデルXXX」→子オブジェクト→「ModelContainer」→子オブジェクト→3Dデータ の階層構造にする
- 「ModelContainer」をCharacterコンポーネントの「Character Model」にドロップする
- Y軸90度回転させる
- 「Character」コンポーネントのあるオブジェクトの下に「Abilities」オブジェクトを作成する
- 「Character」インスペクターの「Additional Abilities Nodes」のサイズ「1」、上で作った「Abilities」オブジェクトを指定
- 「Character」「TopDownEngine」「Health」(「MMhealthBar」)以外のスクリプトは、「Abilities」オブジェクトにアタッチ出来る?
- 「Health」のあるオブジェクトに「MMhealthBar」をアタッチする
- 「Sorting Layer Name」を「UI」から「Characters」に変更?
- Unity 2D Animation(旧Anima2D)
- 2D Animation
- 2D PSD Importer
- 2D IK(パッケージマネージャ→歯車→アドバンスセッティング→Enable Preview Packagesにチェックを入れると表示される)
- パーツ分けしたキャラクターの画像を用意
- フォトショのPSDデータをPSBデータ形式に出力する
- インスペクターに追加されるPSB関連のオプション
Import Hidden | hidden layersをインポートします |
Mosaic | レイヤー単位でスライスします |
Character Rig | スプライトをPSBと同じ位置に再配置します |
Use Folder Grouping | PSBと同じオブジェクト構成で作ります |
Pivot | キャラクターの中心位置を調整します |
- 「Use Folder Grouping」にチェックを入れる。ヒエラルキーに表示される時にスッキリさせる為
- 「スプライトエディタ」→「」Skinning Editor」→「Create Born」
- 体の中心となるボーンを作る
- 下半身ボーン→上半身ボーン→首ボーン→頭ボーン
- 長髪は工程が増えるので、まずは短い髪のキャラで試す
- 手足のボーンと体との接続
- 左右の足のボーンを作るために、下半身ボーンの◎をクリックして半透明のボーンの出るようにする
- ボーンはコピペ出来るので、似た体型なら量産できる?
- 「Split Born」でボーンを分割出来る
- 「Auto Geometry」→「Genererate For All Vsiable」でオートで作成
- 「Born Influense」で微調整を行う
- ボーンを選択したり動かし、関係ないボーンと関連したものは「-」ボタンで取り除く
- 上記でボーンやジオメトリを設定したキャラをシーンにドロップ
- 空ののオブジェクトを作りIK関連のルートとし、「IK Manager 2D」のコンポーネントを追加する。
- 上記のコンポーネントの「IK Solvers」に、左右の手足と頭、場合によっては髪やアクセサリを追加作成する
- 手足はLimb(2つまでのボーンをIK制御する)
- 頭はChain(CCD)
- 「Effecter」IK制御する先端のボーン。空のオブジェクトを対象ボーンの子として作る
- 「Target」はインスペクターで「Create Target」ボタンを押す
- 事前にオブジェクトの位置をボーンの先端に合わせる
- 逆関節の動きになる場合、インスペクターの「Flip」にチェック
- モーションが途中で途切れる→「アニメータ」の「setting」の「自身に遷移」のチェックを外す
- □「」□ →アニメコントローラ:モーションの管理を行う
- 三△ →アニメーションクリップ:個別のモーション
- モーションに絶対座標?が含まれていると、コーギーエンジンがうまく認識してくれない
- コーギーエンジンは基本右向き
- コーギーエンジンはキャラクターモデルを設定しないと反転処理できない
- インベントリのデモはThirdParty→MoreMountains→InventoryEngine→Demosにある
- シーン上に空のゲームオブジェクトを作り、「Inventories」などの適当な名前をつける
- その子オブジェクトに「武器インベントリ」「防具インベントリ」「メインインベントリ」「その他のインベントリ」等を作成する
- インスペクターから「Inventory」スクリプトをアタッチする
- インベントリの表示の管理は「InventoryCanvas」で行っている
- 「Inventory input Manager」でインベントリーのキー設定ができる
- 表示枠のが画像もこの辺で行う
- 「Inventory Display」スクリプトで表示設定を行う
- 「Binding」で表示先を指定
- SEもこの辺で設定する
- シーン上に空のオブジェクトを作成し「テストインベントリ」と名付ける
- 上記オブジェクトに「Inventory」スクリプトをアタッチ
- 「Inventory」インスペクタの設定
- 「コンテンツ」にインベントリのサイズを設定
- 「Inventory Type」を「メイン」「Equipment」から選ぶ、追加装備なら「Equipment」でいい?
- 「Inventory」インスペクタの設定
- カメラ関連のオブジェクト→UI関連のオブジェクト→インベントリUI関連のオブジェクトの下に「テストインベントリUI」オブジェクトを作成
- 「Inventory Sound Player」スクリプトをアタッチする
- 「Inventory Display」スクリプトをアタッチする
- 「Target inventory Name」で先程作成した「テストインベントリ」オブジェクトの名前を指定
- 「Inventory Size」に縦と横のサイズをそれぞれ入力する
- 「Target choice Inventory」でメインインベントリディスプレイのオブジェクトを指定?
- 「item Class」で装備するアイテムの種類を指定(防具やポーション等)
- 「Slots」でスロットの画像の設定を行う
- 「Tile Text」で装備のタイトルテキストを設定する
- 「Quantity Text」で在庫数の設定を行う
- 「Auto setup inventory display panel」を押す?
- プロジェクトウィンドウから右クリック→作成→MoreMountains→inventoryEngineから作りたい種類のアイテムを選ぶ(武器やポーション等)
- 「ItemID」は、定義したオブジェクトの名前と同じである必要がある
「TargetInventoryName」に先程設定した「テストインベントリ」を指定する- 「TargetInventoryName」にメインのインベントリを指定する
- 「Methods」で「Usable」→消費する装備(弾や爆弾など) 「Equippable」で装備可能な装備か(武器や防具)
- 「Basic info」にアイテムの説明を設定する
- 「Image」→「Icon」にアイテムの画像を設定
- 「Prefab Drop」に対象のアイテムピッカーのオブジェクトを指定する?
- 「Inventory Properties」でスタックの最大数とアイテムの種類を設定する
- 「Equippable Weapon」で武器関連の設定
- シーンに配置するアイテムのプレハブを設定していく
- 「Box Collider 2D」「Pickable Item」「Item Picker」を対象のアイテムのピッカーにアタッチする
- 「Pickable Item」の「Picked MM Feedbacks」に「PickedMMFeedbacks」を指定
- 「Item Picker」の「Item」に先程設定したアイテムを設定する
- 画像関連のオブジェクト、(アイテムの影用のオブジェクト)、(画面効果関連の設定)、(LOOT関連の設定)
- 「スプライト」にアイテムのスプライトを設定する
- 追加設定→ソートレイヤーで「Above」に変更する?
- スプライト素材を用意する
- 分割された素材なら結合する
- スプライト画像をインポートし、インスペクターでテクスチャタイプを「スプライト(2DとUI)」、スプライトモードを「複数」に変更
- Sprite Editorでスライス→自動→適用する、でスプライト画像が分割される
- プロジェクトウィンドウのスライスしたPNG画像には「◀」アイコン付き展開できる
- 展開した画像の中から「右移動、下移動」などアニメーションクリップにしたい画像を複数選択して、ヒエラルキーにドロップする。
- 同じアセットの所にアニメーションクリップができる。必要なモーション分のアニメーションクリップを作成する
- シーンに作成されたオブジェクトやアセットのアニメーターコントローラーは削除していい?
- 1から作ると面倒なので、TopDownEngineのデモにある「GrassLands」の「HornsRed」のアニメーターを流用する
- 上記のアニメーターは「IdleBlendTree」「AttackBlendTree」「WalkingBlendTree」の3つのブレンドツリーのブロックから構成されている
- 「IdleBlendTree」の設定する
- スプライトの8方向移動の参考
- ヒエラルキーに空のゲームオブジェクトを作成、その下に子の空オブジェクトも作る
- その子オブジェクトに上で作ったスプライトをアタッチする。
- 同じく上で作ったAnimatorコンポーネントをアタッチする
- コンポーネントを追加→TopDownEngine→キャラクター→コア→キャラクター
- インスペクターのキャラクター→「Auto Bild Player Character 2d」でオートビルド
- 「Character Handle Weapon」を追加でアタッチする
- スプライトのアニメーション
- プロジェクトで画像をインスペクターのスプライトエディタで分割する
- 分割されたスプライトから表示したい画像をの複数選択して、シーンに投げ込む
- ループされない→ループ時間はチェックされているか?
- スピードを変更したい→
- 初期スポーン用のプレイヤーの設定
- 「LevelManager」→「Player Prefabs」→「Element 0」
◎参考用のプレハブの場所
- トウフ君
◎アニメーションの仕方
◎アニメーションセットアップ
◎待機モーションをプレイヤーに行わせる
◎歩きモーションを追加し、待機状態と歩き状態を行き来出来るようにする
◎ジャンプ処理の追加
- 「CharacterAnimationParametersInitializer」→「」自動でアニメーションのパラメータが作成される
- 待機: Active、idleがTrue
- 移動: Walking、GroundedがTrue
- 死亡: Activeがfalse
◎アニメーションセットアップ
- ループさせたいモーションの場合、アニメーションクリップの「時間をループ」のチェックボックスを入れているか?
- 途中で遷移するモーションの場合、遷移矢印の「終了時間あり」チェックボックスを外しているか?
◎待機モーションをプレイヤーに行わせる
- アニメーターコントローラー(以下アニコンと略)を作成する
- アニコンに待機モーションをドロップする
- プレイヤーにアニコンを取り付ける
◎歩きモーションを追加し、待機状態と歩き状態を行き来出来るようにする
- 新たに歩くモーションをアニコンにドロップする。
- コーギーエンジンの場合、プレイヤーのオブジェクトに「InitializeAnimatorParameters」をアタッチしてパラメータを自動登録してくれる
- 遷移条件は「Walking」がTrueの時、「待機」→「歩く」、戻るときは条件を逆にする
◎ジャンプ処理の追加
- アニコンを右クリックから「サブステートマシンの作成」
Projetile Weapon→ 「Animation Parameter Names」以下のパラメータに名前をつけて、アニメータの条件の設定で使う
Use Animation Parameter
Stop Animation Parameter
Weapon Angle Animation
Weapon Angle Relative Angle Animation
◎コーギーエンジン用武器の設定
◎武器のセットアップ
Use Animation Parameter
Stop Animation Parameter
Weapon Angle Animation
Weapon Angle Relative Angle Animation
◎コーギーエンジン用武器の設定
- 空のオブジェクト→遠距離武器の場合「ProjectileWeapon」、近接武器の場合「MeleeWeapon」のコンポーネントを追加
◎武器のセットアップ
- 「キャラクターコンポーネントをアタッチしたオブジェクト」→「スプライトをアタッチしたオブジェクト」の下に「WeaponAttachment」オブジェクトを作成する
- これにメインウェポンがアタッチされる
- 以下のコンポーネントを「AiBrain」のあるオブジェクトにアタッチする
- 「AIDecisionDetectTargetRadius2D」「AIDecisionTargetIsAlive」「AIAcitonDoNothing」「AIActionMoveTowardsTarget2D」「AIActionShoot2D」「AIDesionDistanceTotarget」
- 「Detecting」「Moving」「Attacking」の3ブロックで構成
- Detecting
- Action
- 1-AIAcitonDoNothing
- 遷移
- 1-AIDecisionDetectTargetRadius2D
- True:Moving
- False:---
- Action
- Moving
- Action
- 1-AIActionMoveTowardsTarget2D
- 遷移
- 1-AIDecisionDetectTargetRadius2D
- True:---
- False:Detecting
- 遷移
- 2-AIDecisionTargetIsAlive
- True:---
- False:Detecting
- 遷移
- 3-AIDesionDistanceTotarget
- True:Attacking
- False:---
- Action
- Attacking
- Action
- 3-AIActionShoot2D
- 遷移
- 3-AIDesionDistanceTotarget
- True:---
- False:Detecting
- Action
- 「AIDecisionDetectTargetRadius2D」「AIDecisionTargetIsAlive」「AIActionMoveTowardsTarget2D」「AIActionMoveRandomly2D」コンポーネントをアタッチ
- 「MovingRandomly」「MovingToTarget」の2つのブロックで構成
- 「AIActionMoveTowardsTarget2D」の「Minimum Distance」がデフォルトの1のままだと、相手と重ならないためダメージを与えられないので、「0.1」程度に設定
- MovingRandomly
- Action
- 1-AIActionMoveRandomly2D
- 遷移
- 1-AIDecisionDetectTargetRadius2D
- True:MovingToTarget
- False:---
- Action
MovingToTarget
- Action
- 2-AIActionMoveTowardsTarget2D
- 遷移
- 1-AIDecisionDetectTargetRadius2D
- True:----
- False:MovingRandomly
- 2-AIDecisionTargetIsAlive
- True:----
- False:MovingRandomly
- 「Box Collider 2D」の「トリガーにする」にチェックを入れる
- このコンポーネントをオブジェクトに追加すると、衝突するオブジェクトに損傷を与える可能性があります
- TargetLayerMask:Player
- PerfectImpact :これをtrueに設定すると、オブジェクトが死の影響ポイントにテレポートします。発射物のような動きの速いものに便利です
- DamageCaused = 10 :プレイヤーの体力から取り除く体力の量
- DamageCausedKnockbackType :ダメージを与えるときに適用するノックバックのタイプ
- DamageCausedKnockbackDirection:ノックバックを適用する方向
- DamageCausedKnockbackForce = new Vector3(10、10、0):損傷したオブジェクトに適用する力。
- InvincibilityDuration = 0.5f :ヒット後の無敵フレームの持続時間(秒単位
- このコンポーネントはBox Collider 2Dのある場所にアタッチする
- 「Bounds Based On」を「Colider 2D」に変更
- このクラスを、objectPoolerからプールする予定のオブジェクトに追加します。これらのオブジェクトは、Destroy()を呼び出して破棄することはできず、非アクティブに設定されるだけであることに注意してください(これが要点です)。
- USE
- TriggerModes: この武器はセミオートまたはフルオートですか?
- DelayBeforeUse = 0f :使用前の遅延、それはすべてのショットに適用されます
- DelayBeforeUseReleaseInterruption = true :ボタンを離して使用前の遅延を中断できるかどうか(trueの場合、ボタンを離すと遅延ショットがキャンセルされます)
- Magazine
- MagazineBased :武器がマガジンベースであるかどうか。そうでない場合は、グローバルプール内に弾薬を入れるだけ です
- MagazineSize = 30:マガジンのサイズ
- 自動リロード:これが当てはまる場合、
- ReloadTime : 武器をリロードするのにかかる時間リロードが必要なときに発射ボタンを押すと、武器がリロードされます。それ以外の場合は、リロードボタンを押す必要があります
- AmmoConsumedPerShot :武器が発砲するたびに消費される弾薬の量
- AutoDestroyWhenEmpty:これがtrueに設定されている場合、弾薬が残っていないときに武器は自動的に破壊されます
- AutoDestroyWhenEmptyDelay :空の場合の武器破壊までの遅延(秒単位)
- CurrentAmmoLoaded :武器内に装填されている弾薬の現在の量
- Position
- WeaponAttachmentOffset :WeaponAttachmentトランスフォームの中心にアタッチされると、武器に適用されるオフセット。
- FlipWeaponOnCharacterFlip :キャラクターが反転したときにその武器を反転する必要がありますか?
- Movement
- ModifiedMovementWhileAttacking :これが当てはまる場合、武器がアクティブな間、乗数が動きに適用され ます
- MovementMultiplier = 0f :攻撃中の動きに適用する乗数
- PreventAllMovementWhileInUse :これが本当の場合、武器がアクティブである間、すべての動きが妨げられます
- Recoil
- RecoilForce = 0f :撮影時にキャラクターを押し戻すために適用する力
- Animation
- アニメーター :この武器が使用されるたびに更新したい他のアニメーター
- WeaponAnimationID :アニメーターに渡す武器のID
- InitialWeapon: キャラクターが所有する最初の武器
- CanPickupWeapons :これがtrueに設定されている場合、キャラクターはPickableWeaponsを取得でき ます。
- WeaponUseFeedback :武器が使用されるたびにキャラクターレベルでトリガーされるフィードバック
- WeaponAttachment :武器が取り付けられる位置。空白のままにすると、this.transformになります。取り付けたい位置のオブジェクトをドロップする
- ProjectileSpawn :発射物がスポーンされる位置(安全に空のままにすることができます)
- AutomaticBindAnimator :これが本当の場合、このアニメーターは自動的に武器にバインドされ ます
- AmmoDisplayID:AmmoDisplayのIDこの機能は更新する必要があり ます
- AutoIK :これが当てはまる場合、可能であればIKが自動的にセットアップされます
- ContinuousPress :これが本当なら、自動リロードするために発射ボタンを離す必要はありません 。
- GettingHitInterruptsAttack :このキャラクターが攻撃を受けるかどうかは、攻撃を中断する必要があるかどうか(武器が中断可能としてマークされている場合にのみ機能します)
- BufferInput:攻撃入力をバッファリングする必要があるかどうか。別の入力が実行されている間に攻撃を準備できるため、攻撃の連鎖が容易になります
- NewInputExtendsBuffer:これが当てはまる場合、すべての新しい入力はバッファを延長し ます。
- 「Moving」「Deciding」「Ataacking」の3ブロック
- Movingブロックの設定
- Action
- 4-AIActionMoveRandomly2D
- 3-AIActionAimWeaponAtMovement
- 遷移
- AIDestestTargetRadius2D
- TrueState:Deciding
- FalseState:---
- Action
- Decidingブロックの設定
- Action
- 1-AIAcitonDoNotiong
- 遷移
- AIDecisionTargetIaAlive
- TrueState:Ataacking
- FalseState:---
- Action
- Ataackingブロックの設定
- Action
- 2-AIActionShoot2D
- 遷移
- AIDecsiinDistanceToTarget
- TrueState:---
- FalseState:Moving
- Action
- この決定は、TargetLayerレイヤーマスク上のオブジェクトが指定された半径内にある場合はtrueを返し、そうでない場合はfalseを返します。また、Brain'sTargetをそのオブジェクトに設定します。
- 「半径」→8
- 「Target Layer」→Player
- 「Obstacle Mask」→Obstacle
- 現在装備されている武器を使用して撃つアクション。武器が自動モードの場合、状態を終了するまで射撃し、SemiAutoモードでは1回だけ射撃します。オプションで、キャラクターの顔(左/右)をターゲットにして、ターゲットを狙うことができます(武器にWeaponAimコンポーネントがある場合)。
- 「Aim at Target」にチェック
- この決定は、現在のブレインのターゲットが指定された範囲内にある場合はtrueを返し、そうでない場合はfalseを返します
- 「Comparison」→「LowerThan」
- 「距離」→8
コメントをかく