using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class character_controll : MonoBehaviour
{
Rigidbody2D rb;
[SerializeField] private LayerMask groundLayer;
const float maxJumpCountLimit = 3;//初期値
float max_jump_count = maxJumpCountLimit;
//ui用フィールド
public GameObject countUi;
void Start()
{
rb = this.GetComponent<Rigidbody2D>();
//初期値のジャンプカウントセット
countUi.GetComponent<Text>().text = max_jump_count.ToString();
}
void Update()
{
moveFunction();
if(Input.GetKeyDown(KeyCode.Space))
{
jumpingFunction();
Debug.Log(max_jump_count);
}
jumpingCountReset();
sendJumpCountToUi(max_jump_count);
/*デバッグ用記述*/
Debug.DrawRay(transform.position, Vector2.down * 1f,Color.white, 1f/*drawTime*/);
}
bool isHitToGround()
{
//接地判定用のレイキャスト
RaycastHit2D raycastHit = Physics2D.Raycast(transform.position , Vector2.down, 1f/*1fを第二引数に乗算する。第二引数は(0,-1)*/, groundLayer);
return raycastHit.collider != null;
}
void moveFunction()
{
//操作方向
float x = Input.GetAxis("Horizontal");
float y = Input.GetAxis("Vertical");
//左右移動
rb.velocity = new Vector2(x * 10 ,rb.velocity.y);
}
void jumpingFunction()
{
switch(max_jump_count)
{
case 3:
if(isHitToGround())
{
rb.AddForce(new Vector2(0,10),ForceMode2D.Impulse);
max_jump_count -= 1;
}
break;
case 2:
//空中にいたら
if(!isHitToGround())
{
rb.velocity = new Vector2(0,0);
rb.AddForce(new Vector2(0,10),ForceMode2D.Impulse);
max_jump_count -= 1;
}
break;
case 1:
//空中にいたら
if(!isHitToGround())
{
rb.velocity = new Vector2(0,0);
rb.AddForce(new Vector2(0,10),ForceMode2D.Impulse);
max_jump_count -= 1;
}
break;
}
}
void jumpingCountReset()
{
if(isHitToGround())
{
max_jump_count = maxJumpCountLimit;
//print(max_jump_count+"reset");
//uiにリセット値をセット
countUi.GetComponent<Text>().text = max_jump_count.ToString();
}
}
void sendJumpCountToUi(float count)
{
var ui_value = countUi.GetComponent<Text>().text;
//もしtextvalueとcountに差があった場合、現在のcountをtextvalueにセットする
if(count != float.Parse(ui_value))
{
countUi.GetComponent<Text>().text = count.ToString();
}
}
}