はじめに
CorgiEngineの武器処理は奥が深いです。それでも好きな弾道で発射できるようしたく調査しています。調査項目が多いため何回かの記事に分けてまとめています。今回は銃の設定についてまとめました。
使用アセット
Corgi Engine - 2D + 2.5D Platformer
作業環境
Unity 2019.4.16f1
公式ドキュメントの場所(英語)
Weapons | Corgi Engine Documentation
- はじめに
- デモの構成確認
- Character Handle Weapon
- SoldierMachineGun
- Weapon Aim
- WeaponLaser Sight
- MMSimpleObjectPooler
- おわりに
デモの構成確認
プレイヤーが初期装備をしているデモCorgi3DxTheHuntで武器の扱いを確認しました。
Assets/CorgiEngine/Demos/Corgi3D/Corgi3DxTheHunt
装備している武器はマウスクリックで発射します。
このプレイヤーはSoldier3DRedというプレハブで
Assets/CorgiEngine/Demos/TheHunt/Prefabs/PlayableCharactersにあります。
Soldier3DRed のプレハブを開き、ノードトップを選択しInspectorを下にスクロールし、Character Handle WeaponのパラメータWeapon/Initial Weaponが初期装備のプレハブになります。
Character Handle Weapon
スクリプトのパラメータですがとても数が多いです。確認して分かるくらいで、覚える必要はないと感じています。
Permissions
CharacterAbility共通のパラメータ、条件を満たしたときに武器が持てるようになる等の場合に変更します。
Ability Permitted
true このアビリティは有効。false このアビリティは無効。
Blocking Movement States
特定の行動状態でアビリティを無効化する場合に設定します。ジャンプ中は攻撃できないようにする場合は、この配列にジャンプ状態を設定します。
Blocking Condition States
特定ステータス状態でアビリティを無効化する場合に設定します。死亡状態の場合に攻撃できないようにする場合は、この配列に死亡状態を設定します。
Weapon
初期装備は空にして拾って装備するといった事もできます。落ちている装備を拾えないキャラの実装も可能です。
Initial Weapon
初期装備武器
Can Pickup Weapons
落ちている装備を拾えるかどうか
Binding
Weapon Attachment
武器が取り付けられる位置を指定します。空の場合はこのスクリプトが付いているオブジェクトが対象
Force Weapon Scale Reset On Equip
trueの場合、装備時に武器のScaleを1,1,1,1にする。小さく配置していた武器を元のサイズに戻す場合などに使用します。
Automatically Bind Animator
trueの場合、このアニメーターは自動的に武器にバインドされます。
Ammo Display ID
UIの更新対象となる関連番号を設定します。
ContinuousPress
trueの場合、押しっぱなしでも自動リロードされます。
Getting Hit Interrupts Attack
ダメージを受けた際に攻撃を中断するかどうか (装備武器のInterruptableがtrueの場合有効)
Can Shoot From Ladders
梯子に登ってる際に攻撃できるか
Face Weapon Direction
trueの場合、キャラクターは現在の武器の方向を強制的に向くようになります。
Buffering
Buffer Input
攻撃入力をバッファリングするかどうかを指定することで、別の攻撃が実行されている間に攻撃を準備できるようにし、コンボしやすくできます。
New Input Extends Buffer
trueの場合、新しい入力があるたびに受付時間が延びます。
Maximum Buffer Duration
バッファの最大持続時間を秒単位で指定します。
Debug
Current Weapon
現在装備されている武器
Feedbacks
Ability Start Feedbacks
使用時のフィードバック
Ability Stop Feedbacks
停止時のフィードバック
SoldierMachineGun
武器プレハブSoldierMachineGunを確認しました。
Assets/CorgiEngine/Demos/TheHunt/Prefabs/Weapons/SoldierMachineGun
SoldierMachineGunプレハブの構成
SoldierMachineGun ... トップノード。主要なスクリプトはここに設定されている。
LeftHandHandle ... 左手位置
MachineGunShells ... 薬莢パーティクル
MachineGunFlames ... ノズルファイヤ(玉発射時にノズルに出るエフェクト)
MachineGunModel ... 銃のモデル
RightHandHandle ... 右手位置
WeaponStartFeedback ... 発射時のフィードバック。SEが設定されている。
WeaponUsedFeedback ... 使用中のフィードバック。SE, Flash, Bloom, Particle様々設定されている。
WeaponStopFeedback ... 停止時のフィードバック。SEが設定されている。
SoldierMachineGunプレハブのスクリプト
4つのスクリプトが設定されています。
武器の発射間隔や装弾数に関わる重要なところなので詳しく調査しました。
変更前の動き
Projecttile Weapon
General Settings
Trigger Mode
Auto ボタン押しっぱなしで打ち続ける
Semi Auto ボタン1度につき一発発射
DelayBeforeUse
Trigger ModeがAutoの時専用(Semi Autoでは弾が出なくなります)ボタンを押し続けていると、この時間待ってから発射されるようになる。
DelayBeforeUseReleaseInterruption
trueの場合、ボタンを離すとディレイ時間がクリアされます。falseの場合、ボタンを離しても合計押時間が越えたら弾が発射されるようになります。
TimeBetweenUses
Auto発射時の発射間隔。Semi Autoの場合連打するとこの時間以下でも発射できます。
TimeBetweenUsesReleaseInterruption
trueの場合、ボタンを離すと発射間隔時間がクリアされます。falseの場合、ボタンを離しても合計発射間隔時間が越えたら弾が発射されるようになります。
Interruptable
ダメージを受けた際に攻撃が中断されるかどうか。CharacterHandleWeapon 側のGettingHitInterruptsAttackもtrueになっている場合有効になる。
InitializeOnStart
trueの場合、武器の起動時に自身で初期化を呼び出すか。設定しない場合、CharacterHandleWeaponクラス等から手動で初期化する必要があります。とあるのですが特に設定しなくても大丈夫そう?
・Trigger Mode = Semi Auto、ボタンを押すたびに一発発射
・Trigger Mode = Auto, Time Between Used = 0.05の設定、押しっぱなし
Magazine
マガジン設定を行うと、一定の発射ごとに弾の詰め直しが必要になります。
MagazineBased
この武器がマガジンタイプの武器であるか。falseの場合、弾薬はグローバルプールで管理されます。
MagazineSize
マガジン容量です。
AutoReload
自動でリロードが行われるかどうか。デフォルトのリロードキーは「R」です。
ReloadTime
リロードにかかる時間です。
AmmoConsumedPerShot
1発射ごとに消費される弾数です。
AutoDestroyWhenEmpty
trueの場合、弾薬が空になった場合武器が自動で破壊されます。
装備インベントリ内含め、弾薬0の状態で破棄されます。弾薬が無限設定の場合は破棄されることはありません。
AutoDestroyWhenEmptyDelay
AutoDestroyWhenEmptyで破棄されるまでの遅延時間です。
CurrentAmmoLoaded
現在、装填されている弾数です。
Magazine Based = true, Magazine Size = 2, Auto Reload = true,
Reload Time = 1, Ammo Cuonsumed Per Shot = 1、発射ボタン連打
Position
WeaponAttachmentOffset
モデル表示位置を修正する値です。
FlipWeaponOnCharacterFlip
キャラクターの判定に合わせて、武器のモデルも反転するかどうか。
FlipValue
反転時にモデルのtransformのローカルスケールに乗算するため値。通常は -1,1,1,1 ですが、モデルの仕様に合わせて自由に変更できます。
WeaponAttachmentOffset のyの値を上げて、弾を発射
FlipWeaponOnCharacterFlip = false
Hands Positions
LeftHandHandle
左手を付ける場所
RightHandHandle
右手を付ける場所
Movement
ModifyMovementWhileEquipped
これがtrueの場合、武器が装備されている間の移動力に倍率が適用されます。
PermanentMovementMultiplier
ModifyMovementWhileEquippedをtrueにすると表示される。
装備している間の移動力に適用される乗数。
例として0:装備中は移動ができない。
0.5:装備中は移動力が半分
2:装備中は移動力が倍
ModifyMovementWhileAttacking
これがtrueの場合、武器で攻撃中の移動力に倍率が適用されます。
MovementMultiplier
ModifyMovementWhileAttackingをtrueにすると表示される。
攻撃中の移動力に適用される乗数。
PreventHorizontalMovementWhileInUse
trueの場合、武器で攻撃中の間、横方向の移動が全て無効化されます。
SetForceWhileInUse
これがtrueの場合、武器で攻撃中の設定された力を受けます。
ForceWhileInUse
SetForceWhileUseをtrueにすると表示される。
武器で攻撃中の間受ける力を設定する。
ModifyMovementWhileAttacking = true, MovementMultiplier = 0.2、右入れっぱなし
PreventHorizontalMovementWhileInUse = true、右左右と攻撃
設定変更無のジャンプ攻撃
SetForceWhileInUse = true, ForceWhileInUse x = 0/y = 0、ジャンプ攻撃
SetForceWhileInUse = true, ForceWhileInUse x = 0/y = 2、ジャンプ攻撃
SetForceWhileInUse = true, ForceWhileInUse x = 0/y = 5、攻撃
Animation
Animators
この武器が使用されるたびに更新したい他のアニメーター(キャラクター以外の)を設定します。武器の発射タイミングで武器がアニメーションさせる場合など設定を行います。
Animation Parameters Names
EquippedAnimationParameter
アニメーションパラメータの名前。この武器が装備されている限り、設定したアニメーターのパラメータをtrueにします。これパラメータ以外はWeaponクラスで更新されますが、このパラメータのみCharacterHandleWeaponで更新が行われます。
IdleAnimationParameter
アニメーションパラメータの名前。武器を使用していない時true。
StartAnimationParameter
アニメーションパラメータの名前。武器の使用開始フレームでtrue。
DelayBeforeUseAnimationParameter
アニメーションパラメータの名前:武器が発射態勢から発射されるまでの間true。
SingleUseAnimationParameter
アニメーションパラメータの名前: 武器が有効になる(撃つ)各フレームでtrue。
UseAnimationParameter
アニメーションパラメータの名前:弾を発射してから待機に戻るまでtrue。
DelayBetweenUsesAnimationParameter
アニメーションパラメータの名前:弾を発射してから待機に戻る際に、武器が使用中の場合true。
StopAnimationParameter
アニメーションパラメータの名前:弾を発射後、次の発射までの間と、武器使用停止時にtrue。
ReloadStartAnimationParameter
アニメーションパラメータの名前:武器リロード開始時にtrue。
ReloadAnimationParameter
アニメーションパラメータの名前:武器リロード中にtrue。
ReloadStopAnimationParameter
アニメーションパラメータの名前:武器のリロード終了時にtrue。
WeaponAngleAnimationParameter
アニメーションパラメータの名前:武器の角度。
WeaponAngleRelativeAnimationParameter
アニメーションパラメータの名前:キャラクターの向きに補正された武器の角度。
Feedbacks
弾発射時のエフェクトやSE
WeaponStartMMFeedback
プレイフィードバック:武器の使用開始時
WeaponUsedMMFeedback
プレイフィードバック:武器使用中
WeaponStopMMFeedback
プレイフィードバック:武器の使用停止時
WeaponReloadMMFeedback
プレイフィードバック:武器がリロードされた時
WeaponReloadNeededMMFeedback
プレイフィードバック:武器がリロードが必要になった時
WeaponOnHitFeedback
プレイフィードバック:武器が何かに当たった時
WeaponOnMissFeedback
プレイフィードバック:武器がミスした時(ミスをする武器か、サブクラスごとに設定されている)
WeaponOnHitDamageableFeedback
プレイフィードバック:ダメージを与えられる武器が当たった時
WeaponOnHitNonDamageableFeedback
プレイフィードバック:武器がダメージを与えられないものに当たった時
WeaponOnKillFeedback
プレイフィードバック:武器で誰かを倒した時
Recoil
ApplyRecoilOnUse
武器発射時の反動を使用するか。
RecoilOnUseProperties
ApplyRecoilOnUseをtrueにすると表示される。
この武器が使われるたびに適用される反動の設定。
・Recoil Force Grounded ... 陸にいるときの反動値
・Recoil Force Airbome ... 空にいるときの反動値
・Recoil Style ... 力のかけ方、加算か代入か
・Delay ... 反動の力を受けるまでの待ち時間
・Recoil Feedback ... 反動時のフィードバック
ApplyRecoilOnMiss
武器がミスした時の反動を使用するか。
RecoilOnMissProperties
ApplyRecoilOnMissをtrueにすると表示される。
RecoilOnUsePropertiesと同じ。
ApplyRecoilOnUse = true、攻撃
Projectile Spawn
ProjectileSpawnTransform
弾発射位置の基準点として使用するオブジェクト。設定がない場合は武器のトップノードになる。
ProjectileSpawnOffset
弾を出すオフセット位置。
ProjectilesPerShot
発射する弾の数。
Spread
発射する際にばらける角度。
RotateWeaponOnSpread
発射する角度に合わせて武器を回転させるかどうか。
RandomSpread
Spreadの拡散をランダムにおこなうかどうか。
SpawnPosition
確認用。弾を発射するローカル位置。
ProjectilesPerShot = 3, RandomSpread = false、Spread z = 45、攻撃
ProjectilesPerShot = 9, RandomSpread = false、Spread z = 180、攻撃
ProjectilesPerShot = 5, RandomSpread = true、Spread z = 30、上攻撃
Weapon Aim
AimControl
エイムの操作方法
・Off:制御なし
・Primary Movement:一次動作(通常は左スティック)
・Secondary Movement:二次動作(右スティック)
・Mouse:マウス
・スクリプト:スクリプトで制御。自作操作システムを作る場合、AIの場合。
RotationMode
スティック入力でのエイム角度の制限(Mouseモードでは無効)
・Free:制限無し
・Strict4Directions:4方向限定
・Strict8Directions:8方向限定
WeaponRotationSpeed
武器が新しい入力角度に到達するまでの速度を指定。入力に直接追従した動きをしたい場合は0を設定します。
MinimumAngle
制限角の下限。これより下の角度はエイムできない。
MaximumAngle
制限角の上限。これより上の角度はエイムできない。
Reticle
狙いのレチクル/十字線として表示するゲームオブジェクトを指定します。レチクルを表示したくない場合は空のままにする。
DisplayReticle
falseに設定されている場合、レチクルは追加されず表示しない。
ReticleDistance
レクチルの表示距離。
ReticleAtMousePosition
trueの場合、レチクルはマウスの位置に配置する。AimControlがMouseの時有効。
RotateReticle
trueの場合、レチクルは武器の回転に合わせて回転します。
ReplaceMousePointer
trueの場合、Gameビュー上のマウスカーソルの表示はレチクルに置き換わります。
DisableReticleOnDeath
破棄時にレチクルを隠すか。
AimControl = Mouse、マウスで一回転攻撃
WeaponRotationSpeed = 1、上攻撃
Aim Control = Mouse, MinimumAngle = -30, MaximumAngle = 30、マウスで一周攻撃
AimControl = Mouse, ReticleAtMousePostion = true、マウスを動かして攻撃
WeaponAimスクリプトを無効化
WeaponLaser Sight
RaycastOriginOffset
障害物検知用レイキャストの起点位置。この値は良く分からず。
LaserOriginOffset
レーザーの起点修正位置。
LaserMaxDistance
レーザーを描画する最大距離。
LaserCollisionMask
レーザーを停止判断させる衝突レイヤー。
LaserWidth
レーザーの幅。
LaserMaterial
レーザーのレンダリングに使用される材料。
WeaponLaser Sight 上が無効、下が有効
LaserWidth x = 0.2/y = 0.2
LaserMaterialの色を変更
MMSimpleObjectPooler
プールとは予め弾のオブジェクトを複数用意し発射の際にプールから取り出すことで、生成にかかる時間を短縮する仕組みです。弾は消滅するとプールに戻ります。
MutualizeWaitingPools
これが真の場合、同じ名前のプールが見つかった場合、新規待機プールを作成しないようにします。
NestWaitingPool
全ての管理オブジェクトをは、空のゲームオブジェクトの下に再グループ化されます。そうでなければ、それらは階層の最上位に配置する。
GameObjectToPool
管理するオブジェクト。発射する弾のオブジェクトです。
PoolSize
プールに管理するオブジェクト数。
PoolCanExpand
true の場合、プールは必要に応じて自動的にオブジェクトを追加します。PoolSize以上の弾が必要となった場合実行中に用意するかどうかの指定です。
起動時に追加されているこのオブジェクトがプールです。
おわりに
最近記事見ましたよ。ってコメントを頂けるようになって嬉しいです!
今後もアウトプット続けていきたいと思います。次回は別の記事を挟んだのち「オリジナル武器の作成②弾の設定調査」を予定しています。