using System.Collections;
using UnityEditor.Search;
using UnityEngine;
using UnityEngine.InputSystem;
public class Player_Controller : MonoBehaviour
{
// Rigidbody
[Header("Rigidbody")]
[SerializeField]
private Rigidbody2D RB;
private float Original_Gravity;
// 移动
[Header("Movement")]
[SerializeField]
private float Player_Speed;
private float PlayerCurrentPositionX;
private float PlayerPreviousPositionX;
private float horizontal;
private bool Walking;
// 地面检测
[Header("Groundcheckpoint")]
[SerializeField]
private LayerMask GroundLayer;
[SerializeField]
private Transform GroundCheck;
// 玩家碰撞盒
[Header("Player_HitBox")]
[SerializeField]
private LayerMask Hit_Box_Layer;
[SerializeField]
private Transform Hit_Box_Transform;
// 跳跃
[Header("Jump")]
[SerializeField]
private float Air_Jump = 0;
[SerializeField]
private float Air_Jump_Remain;
[SerializeField]
private float Jump_Power;
// 迅速移动
[Header("Dash")]
[SerializeField]
private bool Can_Dash = true;
[SerializeField]
private bool Dashing = false;
[SerializeField]
private float Dash_Power = 10f;
private float Dash_Time = 0.3f;
private float Dash_Cooldown = 0.2f;
// 健康和耐力
[Header("Health and Stamina")]
[SerializeField]
private float Max_Health_Point = 7f;
[SerializeField]
private float Max_Stamina_Point = 30f;
[SerializeField]
private float Health_Point;
[SerializeField]
private float Stamina_Point;
// 技能
[Header("Skill")]
[SerializeField]
private float Skill_Animation_Cooldown = 0.1f;
[SerializeField]
private bool Can_Skill = true;
// 点击技能
[Header("Tap Skill")]
[SerializeField]
private Transform Tap_Skill_Spawn_Transform;
// 闪电技能集
[Header("Ligthning Skill Set")]
[SerializeField]
private GameObject Ligthning_Dash;
[SerializeField]
private Transform Lightning_Dash_Transform;
// 火球技能集
[Header("Fire Skill Set")]
[SerializeField]
private GameObject Fire_Ball;
[SerializeField]
private Transform Fire_Ball_Transform;
[SerializeField]
private Rigidbody2D Fire_Ball_RigidBody;
private float Fire_Ball_Speed = 20f;
// 水技能集
[Header("Water Skill Set")]
[SerializeField]
private GameObject Water_healing;
[SerializeField]
private Transform Water_healing_Transform;
// 风技能集
[Header("Wind Skill Set")]
[SerializeField]
private GameObject Wind_Swirl;
[SerializeField]
private Transform Wind_Swirl_Transform;
// 岩石技能集
[Header("Rock Skill Set")]
[SerializeField]
private GameObject Rock_Pillar;
[SerializeField]
private Transform Rock_Pillar_Transform;
[SerializeField]
private GameObject Rock_Shard_Vertical;
[SerializeField]
private Transform Rock_Shard_Vertical_Transform;
// void Start()
void Start()
{
RB = GetComponent<Rigidbody2D>();
}
void Update()
{
Debug.Log(".Can_Skill" + Can_Skill);
if (Hazard() == true)
{
transform.localPosition = new Vector2(0, 0);
}
if (IsGround() == true)
{
Air_Jump_Remain = Air_Jump;
}
PlayerPreviousPositionX = transform.localPosition.x;
if (PlayerCurrentPositionX < PlayerPreviousPositionX)
{
transform.localScale = new Vector2(1, 1);
Tap_Skill_Spawn_Transform.localRotation = Quaternion.Euler(0, 0, 0);
}
else if (PlayerCurrentPositionX > PlayerPreviousPositionX)
{
transform.localScale = new Vector2(-1, 1);
Tap_Skill_Spawn_Transform.localRotation = Quaternion.Euler(0, 0, 180);
}
PlayerCurrentPositionX = transform.localPosition.x;
}
private void FixedUpdate()
{
if (Dashing == false)
{
RB.linearVelocity = new Vector2(horizontal * Player_Speed, RB.linearVelocity.y);
}
if (Dashing)
{
return;
}
}
// 移动
public void Move(InputAction.CallbackContext context)
{
horizontal = context.ReadValue<Vector2>().x;
}
public void Jump(InputAction.CallbackContext context)
{
if (context.performed && (Air_Jump_Remain >= 1 || IsGround() == true))
{
RB.linearVelocity = new Vector2(RB.linearVelocity.x, Jump_Power);
Air_Jump_Remain -= 1;
}
}
public void Dash(InputAction.CallbackContext context)
{
if (context.performed && Can_Dash == true)
{
StartCoroutine(Dash_Coroutine());
}
}
private bool IsGround()
{
return Physics2D.OverlapBox(Hit_Box_Transform.position, new Vector2(0.6f, 0.8f), 0, GroundLayer);
}
private bool Hazard()
{
return Physics2D.OverlapBox(Hit_Box_Transform.position, new Vector2(0.6f, 0.8f), 0, Hit_Box_Layer);
}
IEnumerator Dash_Coroutine()
{
Can_Dash = false;
Dashing = true;
Walking = false;
Original_Gravity = RB.gravityScale;
RB.gravityScale = 0f;
RB.linearVelocity = new Vector2(transform.localScale.x * Dash_Power, 0f);
yield return new WaitForSeconds(Dash_Time);
Dashing = false;
RB.gravityScale = Original_Gravity;
Walking = true;
yield return new WaitForSeconds(Dash_Cooldown);
Can_Dash = true;
}
// 玩家技能
public void Dash_Skill(InputAction.CallbackContext context)
{
if (Can_Skill == true && Dashing == true)
{
Debug.Log("Dash_skill in");
StopAllCoroutines();
RB.gravityScale = 1;
Can_Dash = true;
StartCoroutine(Dash_Skill_Coroutine());
}
}
public void Tap_Skill(InputAction.CallbackContext context)
{
if (Can_Skill == true && Dashing == false)
{
Debug.Log("Can_Skill in tap" + Can_Skill);
Debug.Log("fire");
StartCoroutine(Tap_Skill_Coroutine());
}
}
public void Hold_Skill(InputAction.CallbackContext context)
{
if (Can_Skill == true)
{
}
}
public void Up_Skill(InputAction.CallbackContext context)
{
if (Can_Skill == true)
{
}
}
public void Down_Skill(InputAction.CallbackContext context)
{
if (Can_Skill == true)
{
StartCoroutine(Down_Skill_Coroutine());
}
}
// 技能协程
IEnumerator Dash_Skill_Coroutine()
{
Instantiate(Ligthning_Dash, transform.localPosition, Lightning_Dash_Transform.localRotation, Tap_Skill_Spawn_Transform);
RB.linearVelocity = new Vector2(transform.localScale.x * Dash_Power * 2f, 0f);
Dashing = false;
Can_Skill = false;
Walking = false;
yield return new WaitForSeconds(Skill_Animation_Cooldown);
Can_Skill = true;
Walking = true;
}
IEnumerator Tap_Skill_Coroutine()
{
RB.gravityScale = 0f;
Instantiate(Fire_Ball, transform.localPosition, Tap_Skill_Spawn_Transform.localRotation);
Can_Skill = false;
RB.gravityScale = 1f;
yield return new WaitForSeconds(Skill_Animation_Cooldown);
Can_Skill = true;
}
IEnumerator Down_Skill_Coroutine()
{
Instantiate(Rock_Shard_Vertical, transform.localPosition, Rock_Shard_Vertical_Transform.localRotation);
yield return new WaitForSeconds(Skill_Animation_Cooldown);
}
}
评论 (0)