スーパー空箱

ノンプログラマーの開発日誌や雑記

【Unity】フリックでオブジェクトが向いている方向に飛ばす

こつこつとユニティちゃんアクションゲームを進めてます。

このゲームの攻撃方法としてフリック操作でキャラをスライディングをさせたいので、実装してみました。

SAMPLE

まずフリックの実装ですが、最初はEasyTouchを使おうと思ったんですが、よくわからなかったので自前でそれっぽいものをつくりました。

内容としては「画面をタッチしてから指を話すまでの時間がX秒以下」「タッチした位置から指を話した位置のmagnitudeがY以上」という実装です。

void Update () {
//画面をタップしたら
if (Input.GetMouseButton (0)) {
        //時間計測開始
	tapTimer += Time.deltaTime;
    
	Vector3 currentTapPoint = Input.mousePosition;
	mag = (currentTapPoint - tapPoint);
	if (mag.magnitude > 5.0f) {
		//ここにはフリックしないときの挙動をかく(割愛)
	 }
}
//指を離したら
if (Input.GetMouseButtonUp (0)) {
    //フリック条件。時間経過は0.5以下でmagnitudeが10以上なら
	if(tapTimer <= 0.5f && mag.magnitude >= 10f){
        //モーションをスライディングへ
		Anicon.SetTrigger("p_sliding");
        //フレイヤーの正面ベクトルを取得し、Z方向に10を掛ける
		Vector3 pv = player.transform.forward *10;
        //プレイヤーのrigidbodyに↑の数値分だけ力を加える。
		player.rigidbody.AddForce(pv,ForceMode.VelocityChange);
	}
    //アニメーションのステートの初期化(待機状態へ)
	Anicon.SetBool ("p_walk", false);
	Anicon.SetBool ("p_run", false);
    //最後にタイマーを初期化
	tapTimer = 0f;
}

すぐできるかなーと思ったんですが、意外と苦戦したのが「オブジェクトの正面方向ベクトルの取り方」なんですが、transform.forwardで取れると分かった後はすぐでした。
こちらの記事が参考になりましたojisan-puroguramu.seesaa.net

まだスラいディングモーションへの繊維に時間がかかってる感じがあるので、ここは要調整ですね。
次は敵をだして当たり判定をつけるとこをやる予定~