poi’s tech blog

3D多人数同時接続型球体アクション成人向けゲーム開発のためのアイデア、ナレッジ

作ってるUnityプロジェクトのオブジェクトとかクラスの構成まとめ

自分用

オブジェクト一覧

kirby_body // Parent オブジェクト
│├ Animator // MyAnimationControllerをセット
│├ Character Controller // 適当に
│├ My Player Ctrl (Script) // メインの状態遷移スクリプト
│├ My Character Status (Script) // HP、ACME、攻撃力、攻撃対象の値管理
│├ My Character Move (Script) // 移動、ジャンプ制御
│├ My Character Animation (Script) // AnimatorController用の状態管理
│├ Attack Area Activator (Script) // 球体キック当たり判定用
│├ Insert Animation (Script) // 突発的なアニメーションを再生する
│├ Liner (Script) // えっち体位への移動用
│└ S〇x Ctrl (Script) // えっちの判定管理
├Body // Mesh オブジェクト、Materialが複数ある
││├ Skinned Mesh Renderer // 口を動かしたりホバリング体型になるBlendShapes有
││├ Change Color (Script) // デフォルトカラーを一式で選択したり色変更が可可能
││└ Expression Ctrl (Script) // 瞬き、紅潮、口の切り替え等を行う
│└Genital // おまんちんの Mesh オブジェクト 
│ └ Skinned Mesh Renderer // 性器出したり仕舞ったりするBlendShapes有
└ Root // Bone オブジェクト
 │├ Rigidbody // 自キャラ当たり判定
 │├ Box Collider // 自キャラ当たり判定
 │└ Hit Area (Script) // 攻撃受けたとき用
 └ Hips // 子Bone(左足以外のBoneは省略)
  └ UpperLeg_L // 子Bone
   └ LowerLeg_L // 子Bone
    ├ Rigidbody // 球体キック当たり判定
    ├ Capsule Collider // 球体キック当たり判定
    └ Attack Area (Script) // 球体キック用

State管理系

  • My Player Ctrl (Script)

 メインの状態遷移スクリプト

// ステートの種類.
public enum State
{
    Walking,
    Attacking,
    Downed,  // HP0になったとき。まだ動ける。
    Died,  // 基本的にゲームオーバー用
    Jumping,
    SexInit,  // 位置整えたり色々初期化する用
    NormalUp,  // 正常位上側
    NormalBottom,  // 正常位下側
};

 キー入力を受けて歩いたり攻撃したりジャンプしたりする状態を表現してるEnumを切り替えた後、MyCharacterStatus Classのフラグをいじってあげてる。

 AttackAreaActivator Classから伝播してきた被ダメージイベントを受けてMyCharacterStatus ClassのHPを減らしてHP0になったらDown状態にしたりする。

  • My Character Status (Script)

 HP、ACME、攻撃力、攻撃対象の値管理

 ACME自動回復とかアイテム使用したときの攻撃量Upとか回復の作用はここでしてる。

 MyPlayerCtrl Classから書き換えられたフラグはこのスクリプト自体は使わずMyCharacterAnimation Classが見る。

  • My Character Move (Script)

 移動、ジャンプ制御

 MyCharacterCtrl Classがこっちの向きに動いて~って命令したら動いたり、ジャンプしてーって言ったらジャンプする。

 地面からジャンプ、ジャンプ中のジャンプの挙動のハンドリングもしてる。

 ホバリング系の状態ここでも持っちゃってるやん…

  • My Character Animation (Script)

 AnimatorController用の状態管理

 MyCharacterStatus ClassのフラグをUpdate()で常に監視してる。

 一度だけParameterの値を設定するようにしないとAny Stateからジャンプするアニメーションが高速ループするため、MyCharacterStatus Classのフラグの切り替わりに応じて自身が持ってるフラグも切り替えながらAnimatorControllerのParameterの値を設定してる。

 フラグの論理演算が乱立してて頭こんがらがる。

  • AnimatorController

 ざっくりとしたアニメーションの状態遷移をここでおこなってる。

 MyCharacterAnimation ClassがParameterをいじって状態を変えてくれる。

 Idle続けたり、キック→キック終わる→待機等のシーケンス制御が楽。

Animation系

f:id:poipoipoip:20190502221549p:plain
MyAnimationController

  • My Player Ctrl (Script)

  • My Character Animation (Script)

  • AnimatorController

  • Insert Animation (Script) 

 突発的なアニメーションを再生する

 今のところ突くくらいだけどAnimatorControllerから移行できるやつはどんどん以降していきたい。

  • Expression Ctrl (Script)

 瞬き、紅潮、口の切り替え等を行う

 MyPlayerCtrl ClassからホバリングBlendShape100にしてって命令したら徐々に切り替えてくれる。

  • BodyのSkinned Mesh Renderer

 口とホバリングのシェイプキー

 ExpressionCtrl Classから全部制御したい。

  • GenitalのSkinned Mesh Renderer

 性器出し入れするシェイプキー

 ExpressionCtrl ClassかS〇xCtrl Classから全部制御したい。

移動系

  • My Player Ctrl (Script)

 状態持つのと攻撃対象保持とかしてる。

  • My Character Status (Script)

 ここに移動速度や回転速度、ジャンプ力を設定したほうがきれい

  • My Character Move (Script)

  • Liner (Script)

 えっちするときのふたりの位置関係を整えてくれる。

 MyPlayerCtrl Classからスクリプト自体を有効にすると動作して、目的の座標に到達すると自身を無効にする。

 相手の座標はMyPlayerCtrl Classが教えてくれる。

攻撃系

かなりぐっちゃ。いつかまとめる。