きっかけ
この資料を購入して
zenn.dev
Unity 2D Platformer Controller(PC2D)を触り始めてみた
github.com
ダッシュ中に落下したい
PC2Dのダッシュは、基本的に重力の影響を受けないダッシュっぽくて、足場の端からダッシュすると、チョット変な感じになってしまっていた
マニュアルを翻訳して読んでみると
void EndDash()
Call to end dash immediately.
という、ダッシュ強制終了の仕組みを発見
方針
ダッシュ中に接地判定がoffになったら↑を呼び出せば、やりたいことが実現できそう
更に調べてみると
ダッシュかどうかは↓で取得できそう
MotorState motorState // Readonly enum MotorState { OnGround, Jumping, Falling, FallingFast, WallSliding, OnCorner, WallSticking, Dashing, Frozen, Slipping }
接地の状態は↓で判定できそう
CollidedSurface collidingAgainst // Readonly [Flags] public enum CollidedSurface { None = 0x0, Ground = 0x1, LeftWall = 0x2, RightWall = 0x4, Ceiling = 0x8, SlopeLeft = 0x10, SlopeRight = 0x20 }
DashCancel.csを新規作成
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DashCancel : MonoBehaviour{ public GameObject objBPC; //PlatformerMotor2D.csをアッタチしているオブジェクト用 private PlatformerMotor2D scrPlatformerMotor2D; //PlatformerMotor2D.csスクリプト入れる用 void Start(){ scrPlatformerMotor2D = objBPC.GetComponent<PlatformerMotor2D>(); } void Update(){ //dash中に接地判定がoffになったらdash cancel if((int)scrPlatformerMotor2D.collidingAgainst == 0 && (int)scrPlatformerMotor2D.motorState == 7){ Debug.Log("dash off"); scrPlatformerMotor2D.EndDash(); } } }