Unityでジャンクゲームを作っているっぽい

会社帰りにGPD PocketにUnity入れてゲーム作ってます

PC2D01 ダッシュ中に落下したい

きっかけ

この資料を購入して
zenn.dev
Unity 2D Platformer Controller(PC2D)を触り始めてみた
github.com

ダッシュ中に落下したい

PC2Dのダッシュは、基本的に重力の影響を受けないダッシュっぽくて、足場の端からダッシュすると、チョット変な感じになってしまっていた
f:id:mekatamatama:20210814002017g:plain:h300
マニュアルを翻訳して読んでみると

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();
		}
	}
}

PlatformerMotor2D.csがアタッチされたオブジェクトにスクリプトアサイ

f:id:mekatamatama:20210814003335p:plain
おおー、ダッシュがキャンセルされて落下できましたー
f:id:mekatamatama:20210814003543g:plain:h300
楽しくなってきたー