#ジャンプスクリプト
前回のキャラクター操作スクリプト作成の引き続きっぽいやつ
##とりあえずスペース押したらジャンプ
public float flap = 1000f;
void Update () {
if (Input.GetKeyDown("space"))
{
rb2d.AddForce(Vector2.up * flap);
}
}
これを追加すればスペースを押したらジャンプ
→このコードだと何段階でもジャンプできちゃいます
飛ぶ量を変えたいときはflap変更
速さを変えたいときはInspentorタブのRigidbody2DのGravityScaleの数値を上げればok
##1段ジャンプ制限
bool jump = false;
void Update () {
if (Input.GetKeyDown("space") && !jump)
{
rb2d.AddForce(Vector2.up * flap);
jump = true
}
}
void OnCollisionEnter2D(Collision2D other)
{
jump = false;
}
OnCollisionEnter2Dはオブジェクトに衝突した時に呼び出される
2Dの場合は2Dまでの名前指定が必要です
注:衝突するオブジェクトにはどちらもcolliderとrigidbodyが付いている必要があります
地面には物理法則はいらないので、Bodytypeをstaticにでもしておきましょう。
##地面にぶつかったときのみジャンプ
オブジェクトそれぞれにタグを付けることで、衝突時の判定に使えます
地面のオブジェクトのInspertorのTagをGroundに変更
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Ground"))
{
jump = false;
}
}
こんな感じ
#まとめ
大体こんな感じで横スクロールアクションの超基本は出来たかな
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour {
//変数定義
public float flap = 1000f;
public float scroll = 5f;
float direction = 0f;
Rigidbody2D rb2d;
bool jump = false;
// Use this for initialization
void Start () {
//コンポーネント読み込み
rb2d = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
//キーボード操作
if (Input.GetKey(KeyCode.RightArrow))
{
direction = 1f;
}else if (Input.GetKey(KeyCode.LeftArrow))
{
direction = -1f;
}else
{
direction = 0f;
}
//キャラのy軸のdirection方向にscrollの力をかける
rb2d.velocity = new Vector2(scroll * direction, rb2d.velocity.y);
//ジャンプ判定
if (Input.GetKeyDown("space") && !jump)
{
rb2d.AddForce(Vector2.up * flap);
jump = true;
}
}
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Ground"))
{
jump = false;
}
}
}