MYMYゲーム制作室

アラ古希姉妹のゲーム制作日記

Unity:ジャンプの続き 

ジャンプはできるようになったが、れいさんのお手本のようにやらなくても、ジャンプできるんじゃないかな、、、と考えたので、試してみた。

 

れいさんは、GroundCheckをしている。

プレーヤーが地面にくっついているかどうかをチェック。

地面に立っているときは、ジャンプできる。

そのフラグだけを立てると、空中ではジャンプできないことになり、結果地面から離れることはなくなる。

そこでisJumpといういフラグも作っている。isJumpの状態でもジャンプはできる。

というわけで、キーを押し続ければ大きなジャンプ、一瞬押すだけなら小さいジャンプになるという寸法。

でも、それなら、結局常にジャンプできるわけなので、上キーを押したら上に向かって移動するとスクリプトを書くだけでいのでは?

 

インスペクターのフィールドにspeed, jumpSpeed などのフィールドに数値を入力。

再生すると、ジャンプできる!

2段ジャンプも3段ジャンプもできる。特に問題はない。

 

しかし、どこまでも飛べてしまうのもおかしいので、れいさんも飛べる高さを制限するコードを追加している。真似して飛べる高さの制限を設けてみた。そのスクリプトがこれ。

スクリプト👇

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Jump : MonoBehaviour
{
    public float speed; //横移動のスピード
    public float jumpSpeed; //縦移動のスピード
    public float gravity; //重力 
    //public bool jump = false;
    public float jumpHeight;


    //プライベート変数
    //private Animator anim = null;
    private Rigidbody2D rb = null;
    private float xSpeed;
    private float ySpeed;
    private float jumpPos = 0.0f;//ジャンプを始めた位置

    void Start()
    {
        //コンポーネントインスタンスを捕まえる
        // anim = GetComponent<Animator>();
        rb = GetComponent<Rigidbody2D>();

    }


    /* void OnCollisionEnter2D(Collision2D other)
     {
         if (other.gameObject.CompareTag("Ground"))
         {
             //jump = false;

         }
     }
    */

    void FixedUpdate()
    {

        //キー入力されたら行動する
        float horizontalKey = Input.GetAxis("Horizontal");
        float VerticalKey = Input.GetAxis("Vertical");
        float ySpeed = -gravity;
        rb.velocity = new Vector2(xSpeed, ySpeed);


        if (horizontalKey > 0)
        {
            jumpPos = transform.position.y; //ジャンプした位置を記録する
            // anim.SetBool("run", true);
            xSpeed = speed;
        }
        else if (horizontalKey < 0)
        {
           
            xSpeed = -speed;
        }
        else
        {
            //anim.SetBool("run", false);
            xSpeed = 0.0f;
        }


        // if (!jump)
        // {

        if (VerticalKey > 0)
        {
            ySpeed = jumpSpeed;
            rb.velocity = new Vector2(xSpeed, ySpeed);
           
            // anim.SetBool("run", true);

            // jump = true;


             if (jumpPos + jumpHeight > transform.position.y)
            {
                ySpeed = jumpSpeed;
            }
            else
            {
                ySpeed = 0.0f;
            }
        }
 
        else
        {
            ySpeed = 0.0f;
        }

        //}

    }

}

 

でも、ジャンプスピードを5にすることで少し勢いよく飛びあがる感じにはなったが、降りてくるスピードがいまいち。ふわーっと上品に降りてくる。飛びあがるスピードに比べて、あまりにゆっくり過ぎる。インスペクターのGravityを1から、5,10,などと大きい数字に変更してみたが、降りてくるスピードに変化が感じられない。

これはどういう事なんだ????重力と落ちるスピードは関係ないのか・・

なんだか、ニュートンみたい。。。。

いずれにせよ、なんかジャンプとは違う。(こん)