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动画。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Grafana loki配置, 无脑版

使用docker部署Grafana loki 1.创建 docker-compose.yml 文件 touch docker-compose.yml写入以下内容 vim touch docker-compose.yml version: "3"networks:loki:services:loki:image: grafana/loki:latestrestart: unless-stoppedports:- "3100:3100"vo…

vue 本地中导入 maptalks

1、进入 github 中 maptalks 文件下载页面&#xff08;https://github.com/maptalks/maptalks.js/releases&#xff09; 这里可能会有朋友应为网络问题打不开 github &#xff0c;可以查看作者另一篇关于解决该问题的文章&#x1f449;GitHub 打不开问题解决 2、将下载好的文件…

【郑益慧】模拟电子技术:5.双极晶体管的结构与方法原理

双极晶体管的结构与方法原理 空穴和自由电子都参与导电称之为双极晶体管&#xff08;半导体三极管&#xff09; 1.结构及类型 一块半导体材料上&#xff0c;做出三个不同的掺杂区域。 发射极 —— emitter 基极 —— basic 集电极 —— collector’ 为什么叫不同的名字&…

静态web服务器实战

准备html页面&#xff0c;包含两个页面(index.html, index2.html)和一个404(404html)页面&#xff0c;目录示意&#xff1a; 1.返回固定页面 with open("website/index.html","r") as file: import socket# # 返回固定的页面 website/index.html if __na…

Redis 面试题 | 10.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

android 图片添加水印

android 图片添加水印 本文主要讲下android 中如何给图片添加水印. 在Android中给图片添加水印可以使用Bitmap、Matrix和Canvas类的方法来实现. private Bitmap addWater() {// 加载原始图片Bitmap sourceBitmap BitmapFactory.decodeResource(getResources(), R.mipmap.sou…

云原生安全:风险挑战与安全架构设计策略

概述 数字化转型已经成为当今最流行的话题之一&#xff0c;大部分企业已经开启自身的数字化转型之旅&#xff0c;在未来企业只有数字化企业和非数字化企业之分。通过数字经济的加速发展&#xff0c;可以有效推动企业数字化转型的步伐。云计算作为数字化转型的底座和重要的载体…

『OpenCV-Python鼠标画笔』

OpenCV-Python教程链接&#xff1a; https://opencv-python-tutorials.readthedocs.io/ 示例一&#xff1a;图片上双击的位置绘制一个圆圈 首先创建一个鼠标事件回调函数&#xff0c;鼠标事件发生时就会被执行。鼠标事件可以是鼠标上的任何动作&#xff0c;比如左键按下&#x…

HarmonyOS关于deps、external_deps的使用

在添加一个模块的时候&#xff0c;需要在BUILD.gn中声明它的依赖&#xff0c;为了便于后续处理部件间依赖关系&#xff0c;我们将依赖分为两种——部件内依赖deps和部件间依赖external_deps。 依赖分类 如上图所示&#xff0c;主要分为部件内依赖&#xff08;图左&#xff09;…

如何降低微服务复杂度丨云栖大会微服务主题分享实录

作者&#xff1a;谢吉宝 本文整理自阿里云资深技术专家、中间件负责人谢吉宝在2023云栖大会《极简微服务模式&#xff0c;降低微服务复杂度的最佳实践》的分享 2023 云栖大会现场 当面临复杂的挑战时&#xff0c;"分而治之"的方法往往能取得显著的效果。微服务架构…

Qt编写linux系统onvif工具(支持预览/云台/预置位/录像等)

一、功能特点 广播搜索设备&#xff0c;支持IPC和NVR&#xff0c;依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址&#xff0c;比如主码流地址、子码流地址。可对每个设备设…

mmpose 2d姿态预测值转json文件

目录 效果图: 参考 模板文件下载地址: python预测代码: 效果图: <

Mall4j电商系统 java电商系统 后台界面-mall4v

一个基于vue、element ui 的轻量级、前后端分离、拥有完整sku和下单流程的完全开源商城后台所属前端界面 前言 mall4j商城项目致力于为中小企业打造一个完整、易于维护的开源的电商系统&#xff0c;采用现阶段流行技术实现。后台管理系统包含商品管理、订单管理、运费模板、规…

《动手学深度学习(PyTorch版)》笔记3

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;本书源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode测试通过。 Chapter3 Linear …

【模拟通信】AM、FM等的调制解调

调制相关的概念 调制&#xff1a;控制载波的参数&#xff0c;使载波参数随调制信号的规律变化 已调信号&#xff1a;受调载波&#xff0c;含有调制信号的全部特征 调制的作用: 提高发射效率多路复用&#xff0c;提高信道利用率提高系统抗干扰能力 两种调制方式 线性调制&a…

主播产品对比话术

—、价格对比 主播产品A︰这款产品定价相对较高&#xff0c;但是其品质和功能都是一流的&#xff0c;对于追求高端体验的消费者来说&#xff0c;物有所值。 主播产品B∶这款产品的价格相对较低&#xff0c;性价比很高&#xff0c;对于预算有限的消费者来说&#xff0c;是个不…

链表OJ---排序链表

https://leetcode.cn/problems/7WHec2/description/ //合并 struct ListNode* merge_link(struct ListNode* head1, struct ListNode* head2) {struct ListNode* temhead malloc(sizeof(struct ListNode));temhead->val 0;struct ListNode *tmp temhead, *cur1 head1, *…

Leetcode—2696. 删除子串后的字符串最小长度【简单】

2023每日刷题&#xff08;八十八&#xff09; Leetcode—2696. 删除子串后的字符串最小长度 实现代码 class Solution { public:int minLength(string s) {string sub " ";for(auto c: s) {if((c B && sub.back() A) || (c D && sub.back() C…

【推荐100个unity插件】3D物品描边效果——Quick Outline免费插件

文章目录 前言地址介绍使用例子完结 前言 关于3D描边&#xff0c;其实之前有用shader弄过一个&#xff1a;【实现100个unity特效】shader实现3D物品闪光和描边效果 但是很遗憾的是他不支持URP项目&#xff0c;所以现在推荐这款插件&#xff0c;他能很好的支持URP&#xff0c;…

SAP EXCEL上传行数限制问题(ALSM_EXCEL_TO_INTERNAL_TABLE)

标准函数ALSM_EXCEL_TO_INTERNAL_TABLE上传EXCEL函数限制上限是9999行&#xff0c;如果上传数据记录数超过9999行的情况&#xff0c;需要拷贝标准的函数封装一个自定义的函数进行处理 标准的函数ROW的长度为4位&#xff0c;如下图所示 因此&#xff0c;如果想行数的位数超过4位…