[unity learning] RPG Leaning(十)

2023-10-25 11:59
文章标签 unity learning rpg leaning

本文主要是介绍[unity learning] RPG Leaning(十),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[unity learning] RPG Leaning(十)

写这个文章的目的就是为了初学unity,然后更好的掌握unity中的内容【主要是代码】
学习unity的途径是Brackeys 的教程;
接上篇: unity learning RPG Leaning(九).
关于这个系列的最后一篇

目的

一、加入Player和Enemy的血条
二、把模型变成骷髅头
三、把骷髅动画导入
四、攻击时延
在这里插入图片描述

一、加入Player和Enemy的血条

1、创建Canvas ,设置RenderMode为World Space;
在这里插入图片描述
创建两个Image,设置两个Image的顺序如下图所示
在这里插入图片描述
设置两个Image的参数如下图所示。
在这里插入图片描述
设置底层的Image的ImageType为Fill来用FillAmount来控制绿色血条的进度。
在这里插入图片描述
设置红色的血条如下图所示
在这里插入图片描述
把这个变成prefab,然后删除这个Healthui。
2、需要为每一个角色创建血条,所以新建一个healthUI类;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class healthUI : MonoBehaviour
{public GameObject uiPrefab;public Transform target;Transform ui;Image healthSlider;Transform cam;// Start is called before the first frame updatevoid Start(){cam = Camera.main.transform;foreach (Canvas c in FindObjectsOfType<Canvas>()){if (c.renderMode == RenderMode.WorldSpace){ui = Instantiate(uiPrefab, c.transform).transform;healthSlider = ui.GetChild(0).GetComponent<Image>();break;}}}void LateUpdate(){ui.position = target.position;ui.forward = -cam.forward;}}

然后把这个组件导入到Player和Enemy中,设置Ui Prefab为我们创建的Prefab,
在Player下面创建一个Empty物体,名字为Health UI,把这个放入到target中。
在这里插入图片描述

在这里插入图片描述
3、设置血条变化
在CharacterStats中设置委托

public System.Action<int, int> OnHealthChanged;
public void TakeDamage(int damage){...if (OnHealthChanged != null) {OnHealthChanged(maxHealth, currentHealth);}}

在HealthUI中调用改委托。

...
[RequireComponent(typeof(CharacterStats))]
....void Start(){...GetComponent<CharacterStats>().OnHealthChanged += OnHealthChanged;}void OnHealthChanged(int max, int current) {if (ui != null) { //由于ui会被消灭,所以这里加上了ui!=null,同时在LateUpdate中也需如此。float healthPercent = (float)current / max;healthSlider.fillAmount = healthPercent;if (current <  0){Destroy(ui.gameObject);}}}

4、设置血条出现和消失

	...float visibleTime = 5f;float lastChangeTime;// Start is called before the first frame updatevoid Start(){	...	ui.gameObject.SetActive(false); //一开始设置血条为不可见      }void OnHealthChanged(int max, int current) {if (ui != null) {ui.gameObject.SetActive(true);lastChangeTime = Time.time;...}}void LateUpdate(){if (ui != null){...if (Time.time - lastChangeTime>visibleTime) {ui.gameObject.SetActive(false);}}}

二、把模型变成骷髅头

导入模型,设置骨架Rig
在这里插入图片描述
设置Idle、walk、combat_idle的LoopTime设置为开启。
在这里插入图片描述

三、把骷髅动画导入

create一个animator Override Controller,命名为Enemy Controll,把之前的animator Controller:PlayerController放入到animator Override Controller之中。然后把一些动画导入。设置模型的动画为PlayerController。
在这里插入图片描述
在这里插入图片描述
然后修改Player Animation。由于Player Animation中已经有了AnimatorOverrideController类,所以,我们只需要修改AnimatorOverrideController。
把它变成公开变量。

 public AnimatorOverrideController overrideController;
protected virtual void Start(){if (overrideController == null){overrideController = new AnimatorOverrideController(animator.runtimeAnimatorController);}

把他放到enemy中,配置Player Animation。
在这里插入图片描述
动画导入完成。

四、攻击时延

之前,我们设置攻击时延,使用的是

StartCoroutine(DoDamage(targetStats, attackDelay));

我们现在去掉这个时延,用动作设置的时间来造成伤害。
设置一个CharacterCombatReceiver,设置CharacterCombat为公开变量,
设置一个函数AttackEvent()来调用combat下面的AttackHit_AnimationEvent()函数

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CharacterCombatReceiver : MonoBehaviour
{public CharacterCombat combat;public void AttackEvent() {combat.AttackHit_AnimationEvent();}
}

设置 AttackHit_AnimationEvent()函数,把伤害放置在AttackHit_AnimationEvent函数中:

  CharacterStats oppentStats;public void Attack(CharacterStats targetStats){if (attackCoolDown <= 0f){oppentStats = targetStats;...}}public void AttackHit_AnimationEvent() {oppentStats.TakeDamage(myStats.damage.GetValue());if (oppentStats.currentHealth <= 0){Incombat = false;}}

在Attack类的攻击动作处设置Event:
在这里插入图片描述
就可以调用了这个AttackEvent

这篇关于[unity learning] RPG Leaning(十)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282425

相关文章

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

Unity Adressables 使用说明(六)加载(Load) Addressable Assets

【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给资源的地址的字符串。Label:包含分配给一个或多个资源的标签的字符串。AssetReference Obj

在Unity环境中使用UTF-8编码

为什么要讨论这个问题         为了避免乱码和更好的跨平台         我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本,默认是看不到在VS中的编码格式,下面我介绍一种简单快

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)-CSDN博客 做完了数据结构类,该做一个存储类了,也就是生成一个字典类(只是声明)  实现和上一节的数据结构类的方式大同小异,所