
commit c9c9ab412170ffd32a12b0660858625856aa3244 Author: lspdC <961907320@qq.com> Date: Thu Mar 24 22:11:29 2022 +0800 3.24 完成除boss战以外交互,逐步整合美术素材 commit 2a2a11e8514ab67008c85b25b6703888f1ed8824 Author: lspdC <961907320@qq.com> Date: Tue Mar 22 22:15:12 2022 +0800 3.22 完成了跟踪雷击与玩家的碰撞判定,玩家的受击反馈 击碎石头那边还有bug,明天再改 commit db3134349aaabb0ba0aaa64e43851ee0d6812fa0 Author: lspdC <961907320@qq.com> Date: Mon Mar 21 19:51:46 2022 +0800 3.21(和霄酱搅在一起了喵) commit d5836fec13668bd6a00ab8e9377f3959d86ab037 Author: lspdC <961907320@qq.com> Date: Mon Mar 21 19:49:15 2022 +0800 3.21(未合并) 完成火焰,碎石交互,武器升级替换。 设置好打雷演出框架,自动追击的雷击框架,尚未加入碰撞判定。 commit 698339a63c5ad608945a2e5702b7b216c97245c3 Author: lspdC <961907320@qq.com> Date: Sun Mar 20 23:28:11 2022 +0800 3.20 和京力交融之后的版本 commit 44c4946a717cd915dae1c92cb536031abf2f9343 Author: lspdC <961907320@qq.com> Date: Sun Mar 20 23:24:29 2022 +0800 3.20 整理了树木交互,写了个具体互动物品的基类。 创建了火类,实现火焰交互示意(拿上木棍才能成功交互)。 commit 1b5d15c2d2c98a71d12a79c9443d9cf4c89c7f40 Author: lspdC <961907320@qq.com> Date: Sun Mar 20 14:43:08 2022 +0800 sb coding
240 lines
6.3 KiB
C#
240 lines
6.3 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.InputSystem;
|
||
using Sirenix.OdinInspector;
|
||
using DG.Tweening;
|
||
|
||
public class Player : PlayerControl
|
||
{
|
||
/// <summary>
|
||
/// 玩家刚体组件喵
|
||
/// </summary>
|
||
Rigidbody2D m_rigidbody;
|
||
|
||
/// <summary>
|
||
/// 脚底位置子物体
|
||
/// </summary>
|
||
[Header("脚底位置")] [FoldoutGroup("子物体")]
|
||
public Transform groundCheck;
|
||
|
||
/// <summary>
|
||
/// 手持武器
|
||
/// </summary>
|
||
[Header("手持武器")] [FoldoutGroup("子物体")]
|
||
public Item weapon;
|
||
|
||
/// <summary>
|
||
/// 武器生成位置(需要绑在骨骼上)
|
||
/// </summary>
|
||
[Header("武器生成位置(需要绑在骨骼上)")][FoldoutGroup("子物体")]
|
||
public Vector3 weaponPos;
|
||
|
||
/// <summary>
|
||
/// 角色朝向(向右为1)
|
||
/// </summary>
|
||
[ReadOnly] [Header("朝向监测")]
|
||
public int isRight = 1;
|
||
|
||
/// <summary>
|
||
/// 角色是否落地
|
||
/// </summary>
|
||
[ReadOnly]
|
||
[Header("落地监测")]
|
||
public bool isGround = false;
|
||
|
||
|
||
|
||
[Header("行走速度")][FoldoutGroup("角色操作数据")]
|
||
public float speed;
|
||
|
||
[Header("跳跃力量")][FoldoutGroup("角色操作数据")]
|
||
public float jumpForce;
|
||
|
||
|
||
/// <summary>
|
||
/// 角色翻面时长
|
||
/// </summary>
|
||
[Header("角色翻面所需时长")]
|
||
public float flipDuration = 0.1f;
|
||
|
||
|
||
|
||
//布尔-------------------------
|
||
bool forceFlip = false;
|
||
bool isHurting = false;
|
||
|
||
|
||
/// <summary>
|
||
/// 玩家初始化喵
|
||
/// </summary>
|
||
override protected void Start()
|
||
{
|
||
base.Start();
|
||
m_rigidbody = gameObject.GetComponent<Rigidbody2D>();
|
||
WeaponInit();
|
||
}
|
||
|
||
//UPDATE
|
||
void Update()
|
||
{
|
||
OnInputDetect();
|
||
Flip();
|
||
}
|
||
|
||
void FixedUpdate() {
|
||
Moving();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 翻面函数
|
||
/// </summary>
|
||
void Flip()
|
||
{
|
||
int lastFrameDir = isRight;
|
||
if (inputDir * lastFrameDir < 0 || forceFlip == true)
|
||
{ 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);
|
||
|
||
//分情况定值翻转 可以规避在旋转动画未结束时再次翻转的造成的起始角度不同从而影响目标角度误差的问题
|
||
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>
|
||
/// 检测是否停止摇杆输入
|
||
/// </summary>
|
||
void OnInputDetect() {
|
||
if (inputDir == 0&&isHurting==false)
|
||
Freeze();
|
||
}
|
||
/// <summary>
|
||
/// 强制静止
|
||
/// </summary>
|
||
void Freeze() {
|
||
m_rigidbody.velocity = new Vector2(0,m_rigidbody.velocity.y);
|
||
}
|
||
|
||
void Moving() {
|
||
if (isHurting == false)
|
||
{ m_rigidbody.velocity = new Vector2(inputDir * speed, m_rigidbody.velocity.y); }
|
||
|
||
}
|
||
|
||
|
||
|
||
/// <param name="ctx"></param>
|
||
override protected void OnMove(InputAction.CallbackContext ctx)
|
||
{
|
||
base.OnMove(ctx);
|
||
|
||
}
|
||
override protected void OnAtk() {
|
||
base.OnAtk();
|
||
|
||
}
|
||
override protected void OnJump() {
|
||
base.OnJump();
|
||
if (isGround == true) {
|
||
isGround = false;
|
||
m_rigidbody.velocity = new Vector2(m_rigidbody.velocity.x, jumpForce);
|
||
}
|
||
|
||
}
|
||
override protected void OnInteract() {
|
||
base.OnInteract();
|
||
|
||
}
|
||
|
||
protected override void OnLeftChange()
|
||
{
|
||
ItemController.Instance.LeftChangeItem();
|
||
}
|
||
|
||
protected override void OnRightChange()
|
||
{
|
||
//WeaponReturn();
|
||
ItemController.Instance.RightChangeItem();
|
||
//WeaponInPosition();
|
||
}
|
||
|
||
//武器更换相关函数--------------------------------------------------
|
||
public void WeaponInPosition() {
|
||
GameObject chosenOne;
|
||
chosenOne = GameObject.Find(weapon.name);
|
||
if (chosenOne.TryGetComponent<Item>(out Item chosenWeapen))
|
||
chosenWeapen.InPosition(transform,weaponPos);
|
||
}
|
||
|
||
public void WeaponReturn()
|
||
{
|
||
GameObject chosenOne;
|
||
chosenOne = GameObject.Find(weapon.name);
|
||
if (chosenOne.TryGetComponent<Item>(out Item chosenWeapon))
|
||
{
|
||
//Debug.Log(chosenOne.name + chosenWeapon.GetOriposition());
|
||
chosenWeapon.ReturnToOri(); }
|
||
|
||
}
|
||
//武器生成---------------------------------------------------------
|
||
void WeaponInit() {
|
||
WeaponInPosition();
|
||
}
|
||
|
||
//受到攻击
|
||
public void GetHurt(int count,float time,float hitter_x) {
|
||
isHurting = true;
|
||
StopInput(time);
|
||
if ((hitter_x - transform.position.x)*isRight< 0) {
|
||
forceFlip = true;
|
||
Flip();
|
||
forceFlip = false;
|
||
}
|
||
m_rigidbody.velocity = new Vector2(-isRight * 3, 3);
|
||
|
||
}
|
||
|
||
public void StopInput(float time) {
|
||
ToMap("Null");
|
||
Invoke(nameof(ResetInput), time);
|
||
}
|
||
|
||
void ResetInput() {
|
||
ToMap("Normal");
|
||
isHurting = false;
|
||
}
|
||
|
||
//跳跃判定(有点怪 后面可能会改)
|
||
|
||
private void OnCollisionEnter2D(Collision2D collision)//当有物体碰上
|
||
{
|
||
//创到地面时触发一次
|
||
if (collision.transform.CompareTag("Ground"))
|
||
{
|
||
//向脚底发射一条短射线
|
||
Ray2D ray = new Ray2D(
|
||
groundCheck.position,
|
||
Vector2.down
|
||
);
|
||
Debug.DrawRay(ray.origin, ray.direction, Color.red, 10f);
|
||
//获取射线的碰撞结果
|
||
RaycastHit2D hit2D;
|
||
hit2D = Physics2D.Raycast(ray.origin, ray.direction, 0.001f);
|
||
//如果射线有结果并且射线创到的是地面,才表示着地了
|
||
if (hit2D && hit2D.collider.transform.CompareTag("Ground"))
|
||
{
|
||
isGround = true;
|
||
}
|
||
else Debug.Log("Not Ground");
|
||
}
|
||
}
|
||
}
|