unity学习笔记----游戏练习06

一、豌豆射手的子弹控制

创建脚本单独控制子弹的运动

用transform来控制移动

    void Update()
    {
        transform.Translate(Vector3.right * speed * Time.deltaTime);
    }

创建一个控制子弹速度的方法,方便速度的控制

private void SetSpeed(float speet)
    {
        this.speed = speet;
    }

回到控制豌豆射手的脚本中,当调用他的射击方法时去实例化子弹这样就能实现豌豆射手的攻击了。

    private void shoot()
    {
        BulletControl go = GameObject.Instantiate(PeaBulletPrefab, shootPointTransform.position, Quaternion.identity);
        go.SetSpeed(BulletSpeet);
    }

效果如下:

二、僵尸动画的开发

普通的僵尸有五个动画状态Eat 、Move、LostHeadMove、LostHandMove,Die他们之间的相互转换关系如下:

在制作动画时,帧动画可以直接拖拽到游戏物体上,相当于给游戏物体上的动画状态机添加新的动画。

添加动画后,效果如下:

在Zombie_Move和Zombie_Eat通过一个布尔变量来控,当控制到敌人时就开Eat,没有碰到植物就Move。

当IsAttacking为true时,就会播放Eat动画,然后将退出时间取消表示随时都可以切换。

Move动画和LostHeadMove的切换时当血量达到某个值的时候进行切换,添加一个float类型的参数,

Eat动画和LostHeadEat的切换条件也是一样的

其他动画状态的切换也是类似设置。

设置好了之后,当参数达到对应的值之后就会进行不同状态的切换。

测试效果如下:

三、僵尸功能开发

1.行走功能

僵尸需要和植物之间进行检测,因此要在僵尸上添加刚体组件,既然僵尸身上有刚体组件,那么就可以使用刚体组件来控制他的移动。

因此就要为其添加刚体和碰撞器

Rigldbody 2D 、Box Collider 2D。

在僵尸的脚本上拿到刚体的引用

private Rigidbody2D rgd;

在start函数中获取这个刚体组件

rgd = GetComponent<Rigidbody2D>();

然后通过MovePosition方法来进行移动

rgd.MovePosition(rgd.position + Vector2.left * moveSpeed * Time.deltaTime);

当前的位置加上移动的方向乘以移动的速度和时间

2.攻击功能

这个攻击功能通过触发检测来进行控制,将僵尸物体的Collider组件设置为触发器,

然后再为每个植物添加一个触发器。这样僵尸和植物之间就能进行触发检测了。

这里会出现一个问题:植物无法被正常种植在地面上。

这是由于地面上也有触发器,植物上的刚体会将地面上的覆盖掉。

解决办法是:在植物处于禁用状态时将Box Collider 2D组件禁用掉,只有当植物处于启用状态时,再将Box Collider 2D组件启用。

要确保僵尸植物进行触发检测,为所有植物添加一个标签plant。

在脚本中调用出发检测的方法,当与其碰撞的物体的标签为plant时,就会执行Eat动画

要执行Eat动画,就要获取animation组件,

private Animator animator;

animator = GetComponent<Animator>();

然后通过OnTriggerEnter2D方法设置Isattacking参数为true,通过OnTriggerExit2D方法设置Isattacking参数为false。

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "plant")
        {
            animator.SetBool("IsAttacking", true);
        }
    }
    private void OnTriggerExit2D(Collider2D collision)
    {
        if(collision.tag == "plant")
        {
            animator.SetBool("IsAttacking", false);
        }
    }

当触发器与植物碰撞时开启攻击动画,当触发器与植物分离时停止攻击动画的功能。

效果如下:

此时会发现僵尸是在一边移动一边吃植物,因此还要为僵尸设置三个状态,在对应的状态播放对应的动画

enum ZombieState
{
    Move,
    Eat,
    Die
}

ZombieState zombieState = ZombieState.Move;//设置默认状态

通过switch方法来对不同的状态进行判断,进而执行对应的方法。

  void Update()
    {
        switch (zombieState)
        {
            case ZombieState.Move:
                MoveUpdate();
                break;
            case ZombieState.Eat:
                break;
            case ZombieState.Die:
                break;
            default:
                break;
        }
        
    }

最后效果如下:

当接触到植物时只会进行eat动画,当植物被移除时只会进行move动画。

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

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

相关文章

Qt顶部圆角窗体

Qt&#xff1a;实现顶层窗体圆角_qt 圆角窗口弹窗-CSDN博客 setWindowFlags(Qt::FramelessWindowHint);QBitmap bmp(this->size());bmp.fill();QPainter p(&bmp);p.setPen(Qt::NoPen);p.setBrush(Qt::black);p.setRenderHint(QPainter::Antialiasing);p.drawRoundedRec…

如何设计性能测试用例!一文1000字详解(建议收藏)

性能测试是确保软件应用在各种负载和条件下都能保持良好性能的关键活动&#xff0c;涉及到系统的响应时间&#xff0c;还包括吞吐量、资源利用率、可靠性和系统的可伸缩性。 性能测试用例设计需要对业务需求和系统行为有深刻理解&#xff0c;设计过程涉及确定测试目标、选择相…

Docker应用-自定义网络连接

Docker网络 文章目录 Docker网络网络的基础配置自定义网络网络连通 网络的基础配置 大量的互联网应用服务包括多个服务组件&#xff0c;这往往需要多个容器之间通过网络通信进行互相配合。 目前Docker提供了映射容器端口到宿主机主机和容器互联机制来为容器提供网络服务&…

软件功能测试如何确定测试需求?CMA、CNAS软件测试报告获取

软件功能测试是为了验证软件的功能是否按照设计要求正常工作的过程&#xff0c;可以确保软件的质量&#xff0c;提高用户体验&#xff0c;也是保证软件安全和可靠性的重要一环。我们需要从多个角度对软件的各个功能模块进行测试&#xff0c;确保每个功能都能正常运行&#xff0…

抖捧AI实景自动直播怎么玩

​在如今的全民直播时代&#xff0c;直播已经成为了众多实体店、品牌方所刚需的技能&#xff0c;但是大多数都不具备太多的直播能力 &#xff0c;这个时候实景自动直播就应运而生&#xff0c;但是很多人都没有想清楚&#xff0c;AI实景自动直播&#xff0c;到底适不适合自己用呢…

蓝桥杯(Python)每日练Day5

题目 OJ1229 题目分析 题目完全符合栈的特征&#xff0c;后进先出。如果能够熟练使用列表的9种方法那么这道题很容易解出。 题解 a[]#存衣服 nint(input()) for i in range(n):llist(input().split())#判断每一步的操作if len(l[0])2:a.append(l[1])else:while a.pop()!l…

本地部署Tomcat开源服务器并结合内网穿透远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器&#xff0c;不仅名字很有趣&#xff0…

Obsidian笔记软件结合cpolar实现安卓移动端远程本地群晖WebDAV数据同步

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【Kubernetes】深入了解Kubernetes(K8s):现代容器编排的引领者

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xf…

JavaEE之多线程编程:4. 线程安全(重点!!!)

文章目录 一、观察线程不安全二、线程安全的概念三、线程不安全的原因1. 关于线程不安全的解释1. 抢占式执行2. 修改共享数据3. 原子性4. 可见性5. 指令重排序问题 四、解决之前的线程不安全的问题五、synchronized 关键字&#xff08;两个线程同时修改一个变量&#xff09;1. …

python基础教程:属性查询顺序,数据描述符

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 数据描述符&#xff0c;属性查找优先级 如果在一个类中定义了 __get__() , __set__(), __delete__() 这三种方法之一&#xff0c;那么这个类是一个描述符。 描述符分成两种&#xff1a; 如果这种类只定义了 __get__ 方法&…

核桃的数量---蓝桥杯

思路&#xff1a; 题目所代表的意思就是a,b,c这三个必须是核桃数量的因子&#xff0c;即a,b,c三个的最小公倍数 #include <iostream> #include <algorithm> using namespace std; // int main() { int a,b,c;cin>>a>>b>>c;int da*b/__gcd(a,b…

基于Django的计算机编程技术学习与服务平台

临近毕业&#xff0c;又到了赶毕设的时候了&#xff0c;本次介绍分享一下自己的毕业设计项目吧。 项目主题&#xff1a;基于Django的计算机技术编程技术学习与服务平台 实现功能&#xff1a; 1.登入&#xff1a;用户的登陆注册 2.Python教程&#xff1a;实现用户的Python技…

MacOS 无法ping 通 github.com 解决方案

ping github.com 会显示请求超时&#xff1a; PING github.com (192.30.253.112): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2 Request timeout for icmp_seq 3 Request timeout for icmp_seq 4 Request …

无刷电机篇(一)直流无刷电机(BLDC)介绍

目录 01 直流无刷电机介绍 直流无刷电机内部结构 转子描述 定子描述 02 直流无刷电机分类 直流无刷电机分类描述 内、外转子电机描述 内、外转子电机区别 03 直流无刷电机参数 无刷电机参数 04 文章总结 大家好&#xff0c;这里是程序员杰克。一名平平无奇的嵌入式软…

PCL 高斯投影正算:大地坐标转高斯投影坐标(C++详细过程版)

目录 一、算法原理二、代码实现三、结果展示四、测试数据PCL 高斯投影正算:大地坐标转高斯投影坐标(C++详细过程版)由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 二、代码实现 头文件及读取保存函数见:

深度学习基础之数据操作

深度学习中最常用的数据是张量&#xff0c;对张量进行操作是进行深度学习的基础。以下是对张量进行的一些操作&#xff1a; 首先我们需要先导入相关的张量库torch。 元素构造&#xff08;初始化&#xff09; 使用arange创造一个行向量&#xff0c;也就是0轴&#xff08;0维&a…

arco design table遇到的一些问题

问题1:不知情就成了树形table table中不知道为啥就多了个树形加号在前面,查找问题后发现,是后端返回的数据中有children,框架中默认对这个参数做了树形结构。 解决办法: 当时没找到取消或者修改字段的属性或方法,就将此字段去掉,并将内容clone到childData。 问题2:c…

Java如何对OSS存储引擎的Bucket进行删除【OSS学习】

在前面学会了如何对OSS里面的Bucket进行创建&#xff1a;Java如何对OSS存储引擎的Bucket进行创建-CSDN博客 接下来&#xff0c;记录一下如何删除Bucket存储空间 目录 1、看看OSS&#xff1a; 2、代码&#xff1a; 3、运行效果&#xff1a; 1、看看OSS&#xff1a; 我准备将…

opencv009 滤波器01(卷积)

图像卷积操作&#xff08;convolution&#xff09;&#xff0c;或称为核操作&#xff08;kernel&#xff09;&#xff0c;是进行图像处理的一种常用手段&#xff0c; 图像卷积操作的目的是利用像素点和其邻域像素之前的空间关系&#xff0c;通过加权求和的操作&#xff0c;实现…