###前提・実現したいこと
自作のランゲームを作っているのですが
1回だけクリック(タップ)した際はキャラクターがジャンプし地面に着地するまで
問題ないのですが、ひたすら連続でクリック(タップ)を行うと地面に着地前にジャンプ処理に
入っているみたいで「ジャンプ➔小ジャンプ」みたいな不自然な挙動になっております。
これはジャンプ処理にクールタイムみたいな処理を追加すべきなのでしょうか?
それともコールチン処理でタイミングを取った方がいいのでしょうか?
回答よろしくお願いします。
###該当のソースコード
private const float SPEED = 6.5f; //移動速度固定 private float moveSpeed; //移動速度 private float JumpPower = 450f; //ジャンプ力 private bool isGroud = false; //地面着地判定 private float lastMovingTime = 0; //移動前用の時間 public enum PLAYER_STATE //キャラの状態を定義 { STOP, //停止中 MOVE, //移動中 DOWN, //ヤラレタ }; public PLAYER_STATE playerState = PLAYER_STATE.STOP;//キャラの状態(停止) --------------省略-------------------- void FixedUpdate(){ switch (playerState) { case PLAYER_STATE.STOP://停止中 moveSpeed = 0; break; case PLAYER_STATE.MOVE://移動中 moveSpeed = SPEED; break; case PLAYER_STATE.DOWN://敵や壁にぶつかった moveSpeed = -3f; isAlive = false; break; } //キャラの移動 rd2D.velocity = new Vector2(moveSpeed, rd2D.velocity.y); //ジャンプアニメーション制御 float velY = rd2D.velocity.y; animator.SetFloat ("velY", velY); animator.SetBool ("isGround", isGroud); } void Update () { //待機モード処理(タップされるまで) if (gameController.gameMode == GameController.GAME_MODE.READY) { animator.SetBool("isDash", false); //ダッシュアニメフラグ停止 if (Input.GetMouseButtonDown(0)) { lastMovingTime = Time.realtimeSinceStartup;//ボタン押した時間を保存 gameController.GameStart(); //ゲームスタートへ playerState = PLAYER_STATE.MOVE; //キャラの状態(移動中へ) } } if(playerState == PLAYER_STATE.MOVE) { animator.SetBool("isDash", true);//ダッシュアニメフラグ開始 } //地面レイヤー判定 isGroud = Physics2D.Linecast ( transform.position + transform.up * 1, transform.position - transform.up * 0.1f, grundLayer); //ボタンをクリック(タップ)した時 if (isGroud && Input.GetMouseButtonDown(0)) { #if UNITY_EDITOR //ボタンを押した場合画面のタッチは無視する if (EventSystem.current.IsPointerOverGameObject()) { return; } #else //スマートフォン用 if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) { return; } #endif //開始直後にタップを一時無効化(タップでゲームを開始した直後にジャンプ処理させないため) if (Time.realtimeSinceStartup - lastMovingTime > 0.0f) { //ヤラレタ場合,ステージクリアエリアに入った場合ジャンプ不可 if ((playerState == PLAYER_STATE.DOWN)||(!isAlive)){ return; } animator.SetBool("isDash", false); //ダッシュアニメフラグ animator.SetTrigger("Jump"); //ジャンプトリガー rd2D.AddForce(Vector2.up * JumpPower); //ジャンプ力分上に加速 isGroud = false; //地面レイヤー判定を戻す } } } ``` ###補足情報(言語/FW/ツール等のバージョンなど) Unity 2018.3.11f1 言語:C# ゲーム開始後は設置している(一時停止等の)ボタン以外のどの画面を クリック(タップ)しても、ジャンプ処理に入るようにしています。 主なゲームの流れ REDY(待機)➔クリック(タップ)➔GameStart(ゲーム開始) ➔GameOver ➔GameClear になります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/14 18:27 編集
2019/05/15 10:51 編集
2019/05/16 00:05
2019/05/16 15:47