ダンカグライク FORUM
ロングの線のZ座標ってゲームではどのように決まっていますか?
ロングの各Z座標の位置は次の3段階に分けて計算しています
①ロングの開始位置
②Speedギミックと減速補正なしの各中継点・終端点のロング開始位置からの各相対位置
③Speedギミックと減速補正を加えた位置
各定数値はこちらです
TIME_DISTANCE 1拍当たりの基準時間 3
BEAT_DISTANCE 1拍当たりの基準距離 1.5
OFFSET_Z 判定のワールド座標位置 0
FIXED_BPM 曲のBaseBPMによって速度を変えないための固定BPM値 120
_normalizedSpeed = FIXED_BPM / BaseBpm;
「①ロングの開始位置」
CMod有りの場合
ロングの開始位置 = (押されるべき時間 - 現在の再生時間) * TIME_DISTANCE * プレイヤーのSPEEDオプションの値 * 現在のスピードギミックの値 - (VisualOffsetの値 + OFFSET_Z + LuaのGAMESTATE:SetOffsetZでずらした値)
CMod無しの場合
ロングの開始位置 = (押されるべき拍位置 - 現在の拍位置) * BEAT_DISTANCE * _normalizedSpeed * プレイヤーのSPEEDオプションの値 * 現在のスピードギミックの値 - (VisualOffsetの値 + OFFSET_Z + LuaのGAMESTATE:SetOffsetZでずらした値)
ロングの開始位置がMeshの原点座標になります。
「②Speedギミックと減速補正なしの各中継点・終端点のロング開始位置からの各相対位置」
ロング開始位置からの各相対位置 = (各時間 - ロング開始の時間) * TIME_DISTANCE * プレイヤーのノーツスピードオプションの値
ロング開始位置からの各相対位置 = (各拍位置 - ロング開始の拍位置) * BEAT_DISTANCE * _normalizedSpeed * ノーツスピードオプションの値
「③Speedギミックと減速補正を加えた位置」
posZ ロング開始位置
AnimationCurve.Evaluate関数 ダンカグの仕様によるもの、減速用の補完関数
Speedギミックと減速補正を加えた位置 = AnimationCurve.Evaluate(Speedギミックなしの相対位置 * 現在のスピードギミックの値 + posZ) - posZ;
これをMeshのローカル座標系に設定します。
また、ロングホールドの位置は手前の判定ラインに沿わせるのですが、
AnimationCurve.Evaluateを掛けてしまうと横の移動速度が一定にならないので
AnimationCurve.Evaluateを掛けずにposZをそのまま使用した位置になるようにしています。
使用しているAnimationCurveはLuaからも CS.GameManager.Instance.NoteScrollAnimationCurveで取得可能です。
ロングの各Z座標の位置は次の3段階に分けて計算しています
①ロングの開始位置
②Speedギミックと減速補正なしの各中継点・終端点のロング開始位置からの各相対位置
③Speedギミックと減速補正を加えた位置
各定数値はこちらです
TIME_DISTANCE 1拍当たりの基準時間 3
BEAT_DISTANCE 1拍当たりの基準距離 1.5
OFFSET_Z 判定のワールド座標位置 0
FIXED_BPM 曲のBaseBPMによって速度を変えないための固定BPM値 120
_normalizedSpeed = FIXED_BPM / BaseBpm;
「①ロングの開始位置」
CMod有りの場合
ロングの開始位置 = (押されるべき時間 - 現在の再生時間) * TIME_DISTANCE * プレイヤーのSPEEDオプションの値 * 現在のスピードギミックの値 - (VisualOffsetの値 + OFFSET_Z + LuaのGAMESTATE:SetOffsetZでずらした値)
CMod無しの場合
ロングの開始位置 = (押されるべき拍位置 - 現在の拍位置) * BEAT_DISTANCE * _normalizedSpeed * プレイヤーのSPEEDオプションの値 * 現在のスピードギミックの値 - (VisualOffsetの値 + OFFSET_Z + LuaのGAMESTATE:SetOffsetZでずらした値)
ロングの開始位置がMeshの原点座標になります。
「②Speedギミックと減速補正なしの各中継点・終端点のロング開始位置からの各相対位置」
CMod有りの場合
ロング開始位置からの各相対位置 = (各時間 - ロング開始の時間) * TIME_DISTANCE * プレイヤーのノーツスピードオプションの値
CMod無しの場合
ロング開始位置からの各相対位置 = (各拍位置 - ロング開始の拍位置) * BEAT_DISTANCE * _normalizedSpeed * ノーツスピードオプションの値
「③Speedギミックと減速補正を加えた位置」
posZ ロング開始位置
AnimationCurve.Evaluate関数 ダンカグの仕様によるもの、減速用の補完関数
Speedギミックと減速補正を加えた位置 = AnimationCurve.Evaluate(Speedギミックなしの相対位置 * 現在のスピードギミックの値 + posZ) - posZ;
これをMeshのローカル座標系に設定します。
また、ロングホールドの位置は手前の判定ラインに沿わせるのですが、
AnimationCurve.Evaluateを掛けてしまうと横の移動速度が一定にならないので
AnimationCurve.Evaluateを掛けずにposZをそのまま使用した位置になるようにしています。
使用しているAnimationCurveはLuaからも CS.GameManager.Instance.NoteScrollAnimationCurveで取得可能です。