【unity】学习制作2D横板冒险游戏-4-

news/2025/4/1 16:08:11/文章来源:https://www.cnblogs.com/plusu/p/18690533

敌人的基本逻辑和动画

创建文件如图所示

c#文件继承父类Enemy

给boar挂载代码

在敌人脚本中定义基本的变量并实例化

面朝方向

在游戏中我们可以看到野猪的默认方向为左边
此时的transform.localscale的值为1

我们希望当野猪面向右边时facedir的值为1,以此来判断敌人的面朝方向

野猪的的移动代码

野猪的移动代码就是让他向面朝的方向移动,y的速度就是刚体的速度

放到fix update中执行

执行频率:FixedUpdate()以固定频率执行,而Update()的执行频率则取决于帧率。
适用场景:FixedUpdate()更适合用于物理模拟等需要稳定时间步长的场景;而Update()则更适合用于处理与帧率相关的逻辑和更新游戏状态。

给野猪适合的参数

野猪的动画

创建一个新的文件夹来保存动画

给野猪创建一个控制器Animator并安装给野猪

创建动画,分别为Idle Run Walk

状态树和条件如下

继承

在父类中重写函数方法为
public virtual void ****

在子类中通过override调用
public override void ****

在重写的base.Move();相当于执行其父类中的Move()
还可以在后面编写只属于子类的代码

组件(变量)的继承

在C#中,public、protected 和 private 是三个关键的访问修饰符,它们用于定义类成员(如字段、属性、方法等)的可访问性。

public:
当一个成员被声明为 public 时,它可以从任何地方被访问。

protected:
protected 成员只能在同一个类、派生类(子类)或同一个程序集中的其他类中被访问。

private:
private 成员只能被其所在的类访问。

我希望在野猪的脚本中获得敌人脚本中的组件(变量)且不会被其他的非子类脚本获得

野猪移动时动画转换

野猪的地面检查和墙面检查

在之前的脚本中编写了关于地面检测的代码,将代码挂载到野猪身上

地面检测完成,编写关于墙面检测的代码

返回unity我们需要手动去调整插值使碰撞器位于模型的左和右方向上
如何可以自动去匹配呢?
思路如下

我们希望碰撞检测器在我们人物模型碰撞体的左边和右边,因此先获得碰撞体组件

通过uinty面板可以得知碰撞体的坐标如下(🐖的)

我们希望检测器位于碰撞器的左边和右边
因此右边的坐标(人物中心点为0.0)应该为(1.8/2-0.02,1.3/2)
左边坐标x值相反,y值相等
代码如下

运行代码后可以看到,检测器处在了正确的x位置上
但是Y轴的位置与预期不同,y的坐标应该就是0+偏移量
修改代码如下

成功修改后检测器位于正确的位置上、

修改墙体的碰撞
Outlines轮廓,即仅触碰到轮廓检测
Polygons多边形,即触碰到轮廓组成的多边形检测(范围更大)

成功,现在猪猪可以检测到墙面了
编辑碰撞墙面返回的代码

现在可以成功反转了,但是反转后可能导致抽搐,原因是检测球一直和墙体重合导致多次反转
修改思路为加一个计时器,检测完成反转后一定时间内无法再进行检测
(思路二为只有面朝的检测器才可以检测)
代码如下

成功解决了野猪的抽搐问题✌
为了游戏的真实性,我希望野猪在碰到墙时可以站立一段时间再转身
代码如下先定义变量

修改撞墙的代码

运行,第一次撞墙没有等待,且野猪等待时动画并没有进行切换
修改waitTimeCounter的初始值,问题一解决

添加如下代码,动画问题解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907656.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断垃圾的方法

悲观者从机会中看到困难。乐观者从困难中看到机会。 ——温斯顿丘吉尔在Java中,判断对象是否为垃圾(即不再被使用,可以被垃圾回收器回收)主要依据两种主流的垃圾回收算法来实现:引用计数法和可达性分析算法。 引用计数法(Reference Counting)原理:为每个对象分配一个引用计数…

mRNA,IncRNA,miRNA

mRNA、lncRNA 和 miRNA 的核心区别 三者均为 RNA 分子,但在结构、功能和生物学作用上有显著差异: 1. mRNA(信使RNA)功能 :将 DNA 的遗传信息转录后传递至核糖体,指导蛋白质合成(基因表达的核心步骤)。结构 :单链线性结构,长度通常为数百至数千个核苷酸(nt)。 包含编码…

Training-WWW-Robots 攻防世界

进入网站看到根据提示可知:robots.txt 是关键点 进去看到:看到关键路径:进入看到flag

python第三章课后练习题

3.19 import time date_str = time.strftime("%Y年%m月%d日",time.localtime()) print("当前日期:",date_str)3.20 import time current_time = time.localtime() format1 = time.strftime("%Y年%m月%d日",current_time) print("格式1:&q…

[DevOps] 使用 Windows Sysprep(系统准备)重置计算机 SID

关于 Sysprep(系统准备) https://learn.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/sysprep--system-preparation--overview?view=windows-11 Sysprep 是 Windows 映像的一部分,在审核模式下运行。Sysprep(系统准备)可以准备 Windows 客户端或 Windows S…

堆区的介绍

悲观者从机会中看到困难。乐观者从困难中看到机会。 ——温斯顿丘吉尔我们先来说堆。堆是 OOM 故障最主要的发生区域。它是内存区域中最大的一块区域,被所有线程共享,存储着几乎所有的实例对象、数组。所有的对象实例以及数组都要在堆上分配,但是随着 JIT 编译器的发展与逃逸…

langchain0.3教程:从0到1打造一个智能聊天机器人

构建一个智能对话聊天机器人需要多少行代码?只需要不到30行。本篇文章结合gradio和langchain0.3从0到1创建一个智能聊天机器人并逐步优化流式输出、上下文记忆等功能在上一篇文章《大模型开发之langchain0.3(一):入门篇》 中已经介绍了langchain开发框架的搭建,最后使用la…

OpenGL渲染YUV实战:GPU加速转换与MipMap模糊效果实现

本文介绍了使用Qt和OpenGL渲染YUV420P数据的方法,包括YUV到RGB的转换以及通过OpenGL实现画质模糊的技术。文章详细讲解了YUV420P的结构、OpenGL纹理处理、MipMap技术及其在模糊效果中的应用,并探讨了在OpenGL ES 2.0环境下的兼容性问题及解决方案。最后,提出了进一步优化性能…

OpenGL绘制YUV、OpenGL 实现画质模糊以及 OpenGL ES 实现画质模糊

本文介绍了使用Qt和OpenGL渲染YUV420P数据的方法,包括YUV到RGB的转换以及通过OpenGL实现画质模糊的技术。文章详细讲解了YUV420P的结构、OpenGL纹理处理、MipMap技术及其在模糊效果中的应用,并探讨了在OpenGL ES 2.0环境下的兼容性问题及解决方案。最后,提出了进一步优化性能…

electron浏览器模式多标签方案

main.js let mainWindow function createWindow () {// Create the browser window.mainWindow = new BrowserWindow({}) }app.whenReady().then(() => {createWindow()const tabManager = new TabManager(mainWindow, baseUrl);//打开标签ipcMain.handle(open-tab, (event,…

EtherNet/IP转ProfiNet协议转换网关实现Alicat流量计数据批量接入西门子TIA Portal系统

一、案例背景 汽车涂装线的静电喷涂工艺对压缩空气流量稳定性要求极高。原系统中Alicat流量计与西门子PLC因协议差异无法联动,导致涂料浪费率高达8%。通过JM-EIPM-PN网关实现供气系统与PLC的深度集成。从而实现了EtherNet/IP转ProfiNet的通讯。二、设备连接与配置 设备配置: …