当前位置: 首页 > news >正文

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

相关文章:

  • ZigBee学习——浅析协议栈
  • 网络协议与攻击模拟_08DHCP协议
  • Object.prototype.toString.call个人理解
  • Docker数据管理
  • BTC交易模式 - UXTO - 工具整理
  • 鸿蒙开发案例002
  • 数据结构笔记1
  • php 文件上传
  • Docker部署
  • 书生·浦语大模型--第五节课笔记作业--LMDeploy 大模型量化部署实践
  • 美易官方:美国国债收益率扩大跌幅
  • 解决 Git:ssh: connect to host github.com port 22: Connection timed out 问题的三种方案
  • 探索设计模式的魅力:深入理解面向对象设计的深层原则与思维
  • java获取一段音频/mp3的时长
  • 【无标题】KADB使用DBLINK连接KES验证
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • dva中组件的懒加载
  • go语言学习初探(一)
  • React的组件模式
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spring security oauth2 password授权模式
  • Wamp集成环境 添加PHP的新版本
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 浮现式设计
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 配置 PM2 实现代码自动发布
  • 前端
  • 微信开源mars源码分析1—上层samples分析
  • 用element的upload组件实现多图片上传和压缩
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 怎么把视频里的音乐提取出来
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 如何正确理解,内页权重高于首页?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #Linux(Source Insight安装及工程建立)
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)visual stdio 书签功能介绍
  • (转)德国人的记事本
  • **PHP分步表单提交思路(分页表单提交)
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)