160 lines
3.9 KiB
C#
Raw Normal View History

2022-03-12 15:56:25 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using Sirenix.OdinInspector;
using DG.Tweening;
2022-03-12 15:56:25 +08:00
public class Player : PlayerControl
{
/// <summary>
/// <20><><EFBFBD>Ҹ<EFBFBD><D2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
2022-03-12 15:56:25 +08:00
Rigidbody2D m_rigidbody;
/// <summary>
/// <20>ŵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
[Header("<22>ŵ<EFBFBD>λ<EFBFBD><CEBB>")] [FoldoutGroup("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")]
public Transform GroundCheck;
/// <summary>
/// <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1<CEAA><31>
/// </summary>
[ReadOnly] [Header("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")]
public int isRight = 1;
/// <summary>
/// <20><>ɫ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
[ReadOnly]
[Header("<22><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>")]
public bool isGround = false;
[Header("<22><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>")][FoldoutGroup("<22><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")]
public float speed;
[Header("<22><>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD>")][FoldoutGroup("<22><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")]
public float jumpForce;
/// <summary>
/// <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
/// </summary>
[Header("<22><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>")]
public float flipDuration = 0.1f;
2022-03-12 15:56:25 +08:00
/// <summary>
/// <20><><EFBFBD>ҳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
/// </summary>
override protected void Start()
{
base.Start();
m_rigidbody = gameObject.GetComponent<Rigidbody2D>();
2022-03-12 15:56:25 +08:00
}
//UPDATE
2022-03-12 15:56:25 +08:00
void Update()
{
OnInputDetect();
Flip();
2022-03-12 15:56:25 +08:00
}
void FixedUpdate() {
Moving();
}
2022-03-12 15:56:25 +08:00
/// <summary>
/// <20><><EFBFBD><EFBFBD><E6BAAF>
2022-03-12 15:56:25 +08:00
/// </summary>
void Flip()
{
int lastFrameDir = isRight;
if (inputDir * lastFrameDir < 0)
{ isRight *= -1;
//transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
//transform.DOScale(new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z),0.1f);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ת <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ʱ<EFBFBD>ٴη<D9B4>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>ʼ<EFBFBD>ǶȲ<C7B6>ͬ<EFBFBD>Ӷ<EFBFBD>Ӱ<EFBFBD><D3B0>Ŀ<EFBFBD><C4BF><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch (isRight) {
case 1:
transform.DORotate(new Vector3(0, 0, 0), flipDuration);
break;
case -1:
transform.DORotate(new Vector3(0,180,0), flipDuration);
break;
}
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ֹͣҡ<D6B9><D2A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
void OnInputDetect() {
if (inputDir == 0)
Freeze();
}
/// <summary>
/// ǿ<>ƾ<EFBFBD>ֹ
/// </summary>
void Freeze() {
m_rigidbody.velocity = new Vector2(0,m_rigidbody.velocity.y);
}
2022-03-12 15:56:25 +08:00
/// <param name="ctx"></param>
override protected void OnMove(InputAction.CallbackContext ctx)
{
base.OnMove(ctx);
2022-03-12 15:56:25 +08:00
}
2022-03-13 23:27:31 +08:00
override protected void OnAtk() {
base.OnAtk();
2022-03-12 15:56:25 +08:00
}
override protected void OnJump() {
2022-03-13 23:27:31 +08:00
base.OnJump();
if (isGround == true) {
isGround = false;
m_rigidbody.velocity = new Vector2(m_rigidbody.velocity.x, jumpForce);
}
2022-03-12 15:56:25 +08:00
}
override protected void OnInteract() {
2022-03-13 23:27:31 +08:00
base.OnInteract();
}
void Moving() {
m_rigidbody.velocity = new Vector2(inputDir * speed, m_rigidbody.velocity.y);
2022-03-12 15:56:25 +08:00
}
private void OnCollisionEnter2D(Collision2D collision)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
if (collision.transform.CompareTag("Ground"))
{
//<2F><><EFBFBD>ŵ׷<C5B5><D7B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ray2D ray = new Ray2D(
GroundCheck.position,
Vector2.down
);
Debug.DrawRay(ray.origin, ray.direction, Color.red, 10f);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD>
RaycastHit2D hit2D;
hit2D = Physics2D.Raycast(ray.origin, ray.direction, 0.001f);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>,<2C>ű<EFBFBD>ʾ<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>
if (hit2D && hit2D.collider.transform.CompareTag("Ground"))
{
isGround = true;
}
else Debug.Log("Not Ground");
}
}
}