
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
177 lines
5.0 KiB
C#
177 lines
5.0 KiB
C#
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();
|
||
}
|
||
}
|