CangJie/Assets/Scripts//角色/PlayerControl.cs
Roman e03afcd33c Squashed commit of the following:
commit 66545e8d88f6d1c6c341217722ed596fdc47615b
Author: lspdC <961907320@qq.com>
Date:   Wed Apr 6 12:54:54 2022 +0800

    4.6
    修改了切换场景BUG
    补上了老虎死亡时uI动画

commit 9dbb855441c5b777bca9808280c8600e78e2363a
Author: lspdC <961907320@qq.com>
Date:   Wed Apr 6 00:41:10 2022 +0800

    4.5
    简单UI动画
    完成老虎boss战
    场景切换会导致武器切换bug,排查中

commit f29c5c2a4cec3f062bdd6bbfd9bbb365188023d0
Author: lspdC <961907320@qq.com>
Date:   Sun Apr 3 01:45:27 2022 +0800

    4.2(已合并)
    合并分支

commit aed35a5f956c1f4cce30bd86cdb40bd0773d0322
Author: lspdC <961907320@qq.com>
Date:   Sun Apr 3 01:36:12 2022 +0800

    4.2(未合并)
    1、调整老虎动画,可以在简单的逻辑下连贯播放
    2、修正开局没有武器会报错的bug,第一关倒下的树的树叶可以遮挡玩家。

commit 4383c04279f5a4270a3abe3b9f4cf67b4d133965
Author: lspdC <961907320@qq.com>
Date:   Fri Apr 1 23:35:01 2022 +0800

    4.1(合并后)
    整合摄像机等

commit 48e7207d351cfdb9363db27c0f8c1aba91fc05d9
Author: lspdC <961907320@qq.com>
Date:   Fri Apr 1 23:19:50 2022 +0800

    4.1(未合并)

commit 6154ddfbb4db880c270f650d090b47263e388cfd
Author: lspdC <961907320@qq.com>
Date:   Thu Mar 31 00:17:09 2022 +0800

    3.30
    更新落雷动画,修复手持武器位置
    明天整合摄像头并最后校对第一关场景和元素的大小比例

commit 28b3246896099b84afc84a05e39b581facfacce2
Author: lspdC <961907320@qq.com>
Date:   Mon Mar 28 11:24:23 2022 +0800

    3.28(修改了京力酱场景内的player 不会报错)

commit 399d8d91d968ef2e4538fc22acf2e5c9089f95cf
Author: lspdC <961907320@qq.com>
Date:   Sun Mar 27 19:27:24 2022 +0800

    3.27
    整合了移动,受伤,与树、火交互的动画
    物体绑定位置和部分动画衔接还有待进一步调整。

commit 76c1cf529eee651619a9542b85a90bdfe8d0bed1
Author: lspdC <961907320@qq.com>
Date:   Sat Mar 26 19:18:13 2022 +0800

    3.26
    下载美术动画素材
    进一步整合中(预计还要整合一段时间,houdini还没做喵)

commit 3771f6a9c19e37e50f62e5e054f2aefd94af9965
Author: lspdC <961907320@qq.com>
Date:   Fri Mar 25 23:39:57 2022 +0800

    3.25 合并分支

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

# Conflicts:
#	Assets/Scenes/乐/Sample1.unity
#	Assets/Scenes/乐/Sample2.unity
#	Assets/Scripts/乐/Player.cs
#	Assets/Scripts/乐/Tiger.cs
#	Assets/Scripts/乐/TransSense.cs
#	Assets/Scripts/乐/UIWord.cs
#	Assets/Scripts/勍/角色/PlayerControl.cs
#	UserSettings/EditorUserSettings.asset
2022-04-06 16:37:06 +08:00

177 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using Sirenix.OdinInspector;
/// <summary>
/// 玩家的控制器部分,玩家主类必须继承这个类才能对控制做出反应
/// </summary>
public class PlayerControl : MonoBehaviour
{
private PlayerC playerC;
/// <summary>
/// 此帧输入方向,-1为左1为右0此帧不输入
/// </summary>
[SerializeField][ReadOnly][Header("此帧输入方向,-1为左1为右0表示此帧不输入")]
protected int inputDir;
protected PlayerInteract playerInteract;
protected Animator animator;
protected virtual void Start()
{
playerC = new PlayerC();
//playerC.Enable();
playerC.Normal.Enable();
//为事件订阅方法
//为移动操作订阅方法
playerC.Normal.Move.performed += ctx => OnMove(ctx);
playerC.Normal.Move.canceled += ctx => { inputDir = 0; };
//为攻击操作订阅方法
playerC.Normal.Atk.performed += ctx => OnAtk();
//为跳跃操作订阅方法
playerC.Normal.Jump.performed += ctx => OnJump();
//为交互操作订阅方法
playerC.Normal.Interact.performed += ctx => OnInteract();
//为左切换操作订阅方法
playerC.Normal.LeftChange.performed += ctx => OnLeftChange();
//为右切换操作订阅方法
playerC.Normal.RightChange.performed += ctx => OnRightChange();
//给玩家物体添加子物体:互动侦察器
GameObject checker = new GameObject("互动侦察器");//新建游戏物体:互动侦察器
checker.transform.SetParent(transform);//将其设置为玩家的子物体
playerInteract = checker.AddComponent<PlayerInteract>();//增加玩家互动侦察器组件
checker.AddComponent<BoxCollider2D>().isTrigger = true;//增加碰撞盒,并将其设置为触发器
checker.GetComponent<BoxCollider2D>().size = new Vector2(1f, 1f);//设置碰撞盒大小
checker.transform.localPosition = Vector3.zero;//设置碰撞盒位置
//找到动画机
animator = GetComponentInChildren<Animator>();
if (animator == null)
{
Debug.LogError("玩家动画机丢失!");
}
}
/// <summary>
/// 当有移动输入的时候触发,因为涉及读值重些的时候记得必须Base
/// </summary>
protected virtual void OnMove(InputAction.CallbackContext ctx){
//根据读值设置记录的输入方向
if(ctx.ReadValue<float>() > 0){
inputDir = 1;
}else if(ctx.ReadValue<float>() < 0){
inputDir = -1;
}
if(ctx.ReadValue<float>().Equals(0f)){
inputDir = 0;
}
}
/// <summary>
/// 按下攻击时触发
/// </summary>
protected virtual void OnAtk(){}
/// <summary>
/// 按下跳跃时触发
/// </summary>
protected virtual void OnJump(){}
/// <summary>
/// 按下交互时触发
/// </summary>
protected virtual void OnInteract(){
//如果有交互事件,则调用事件
playerInteract.OnCall();
}
/// <summary>
/// 按下十字键左或者Q触发
/// </summary>
protected virtual void OnLeftChange(){}
/// <summary>
/// 按下十字键右或者E触发
/// </summary>
protected virtual void OnRightChange(){}
/// <summary>
/// 改变玩家的操作地图至参数值
/// </summary>
/// <param name="mapName">要改到的操作地图的名称</param>
public void ToMap(string mapName)
{
//先关闭所有的
CloseAllMaps();
//再打开指定的
switch(mapName)
{
case "Normal":
playerC.Normal.Enable();
break;
case "Null" :
playerC.Null.Enable();
break;
default:
Debug.LogError("没有叫" + mapName + "的操作地图");
break;
}
}
protected void CloseAllMaps()
{
//关闭所有的操作地图
playerC.Normal.Disable();
playerC.Null.Disable();
}
/// <summary>
/// 触发玩家用触发器触发的动画
/// </summary>
/// <param name="behaviorName">触发器名</param>
public void Behavior(string behaviorName)
{
try{
//触发动画
animator.SetTrigger(behaviorName);
}
catch(System.Exception e)
{
e.ToString();
Debug.LogError("没有找到触发器" + behaviorName);
}
}
/// <summary>
/// 接下来的time后都无视输入事件
/// </summary>
public void StopInputTo(float time)
{
ToMap("Null");
StartCoroutine(RecoverInput(time));
}
private IEnumerator RecoverInput(float time)
{
yield return new WaitForSeconds(time);
ToMap("Normal");
}
public void DisPose() {
playerC.Dispose();
}
}