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

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

一、修复植物种植的问题

1.当手上存在植物时,再次点击卡片上的植物就会在手上添加新的植物,需要修改成只有手上没有植物时才能再次获取到植物。需要修改AddPlant方法。

public bool AddPlant(PlantType plantType)
    {
        //防止手上出现多个植物
        if (currentPant != null) return false;
        PlantManagr plantPrefab = GetPlantPrefab(plantType);
        if(plantPrefab != null)
        {
            //这里需要注意的是,上面拿到的是PlantManagr,当我们去是实例化这个组件就相当于去实例化这个组件所在的GammeObject。
            currentPant = GameObject.Instantiate(plantPrefab);
        }
        else
        {
            Debug.Log("游戏物体不存在");
            return false;
        }
        return true;
    }

只有当手上没有植物时点击卡片上的植物才会获取植物。

修改点击事件,增加一个条件只有AddPlant方法返回为true时才能执行后续代码。

 public void Onclick()
    {
        if (needSunPoint > SunManager.Instance.SunPoint) return;
        //TODO:并进行种植
        bool isSuccess = HandManager.Instance.AddPlant(plantType);
        //返回true说明手上还有植物不能再次执行点击事件。
        if (isSuccess)
        {
            SunManager.Instance.SubSun(needSunPoint);
            TransitionToCooling();
        }

    }

这样修改后当手上存在有植物时不会再次获取到植物在手上。

2.当植物在手上时得让植物存于禁用状态

添加一个用于转换的Disable状态的方法。

    private void TransitionToDisable()
    {
        plantState = PlantState.Disable;
    }

同时还需要将其的Animator,在植物拿在手上时不能播放动画。
GetComponent<Animator>().enabled = false;

二、植物种植在地面功能实现

当鼠标点击哪个格子就把植物种植在对应的植物上,如何判断鼠标点击到了哪个格子呢?因此就要给每个格子添加一个碰撞器,然后通过碰撞器其判断点击到哪个格子上了 。
创建一个物体用于判断点击到哪个格子,在其身上添加一个组件Box Collider 2D,这样才能判断鼠标是否点击到这个格子上。通过使用OnMouseDown()事件,可以检测鼠标是否点击到这个格子身上,再将其设置为预制体。

现在将碰撞器布满背景,最后效果如下:

然后为这写碰撞器添加一个公共的父类,然后为其预制体添加一个脚本CellControl用来控制自己是否被点击到并将其设置为触发器。

在CellControl中通过使用OnMouseDown()事件去检测自身点击,当被点击时就表示要被种植了,然后将这个点击事件传递给HandManager,因为HandManager是知道要种植的植物的。

为了避免同一个位置可以种植多个植物,再写一个方法来检测并种植当前位置是否存在之植物。

因此在HandManager中写一个方法来调用,代码如下:

    public void OnMouseDown()
    {
        HandManager.Instance.OnCellClicke(this);
    }

   //检测当前位置是否存在植物
       public  bool ChechPlant(PlantManagr plant)
    {
        if (currentPlant != null) return false;
        currentPlant = plant;
        currentPlant.transform.position = transform.position;
        return true;
    }

 public void OnCellClicke(CellControl cell)
    {
        Debug.Log("OnCellClicke执行了");
        if (currentPlant == null) return;
        bool isSuccess = cell.ChechPlant(currentPlant);
        Debug.Log(isSuccess);
        //将其设置为空不让其在跟随鼠标
        if (isSuccess)
        {
            currentPlant.GetComponent<Animator>().enabled = true;
            currentPlant = null;
        }
    }

效果如下:只有当前位置没有种植过植物才能种植

相关文章:

  • 2022-2023年度广东省职业院校学生专业技能大赛“软件测试”赛项自动化测试训练题目
  • 时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解
  • 编程笔记 html5cssjs 015 HTML列表
  • Node.js(三)-模块的加载机制
  • 微信小程序实现一个天气预报应用程序
  • mysql哪些情况下不走索引?
  • Scala安装
  • 序列化机制以及应用场景
  • 爬虫工作量由小到大的思维转变---<第二十六章 Scrapy通一通中间件的问题>
  • React项目打包流程
  • 微信小程序 手机号授权登录 偶尔后端解密失败
  • 新一代大语言模型在Amazon Bedrock引领人工智能潮流
  • 【华为OD题库-108】水果摊小买卖-java
  • 滤波器opencv
  • uni-app tabbar组件
  • 【译】理解JavaScript:new 关键字
  • gulp 教程
  • Python - 闭包Closure
  • Python 基础起步 (十) 什么叫函数?
  • Python语法速览与机器学习开发环境搭建
  • spring cloud gateway 源码解析(4)跨域问题处理
  • vue-router 实现分析
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • ​iOS安全加固方法及实现
  • (ibm)Java 语言的 XPath API
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (南京观海微电子)——I3C协议介绍
  • (转)关于pipe()的详细解析
  • (转)平衡树
  • (转)我也是一只IT小小鸟
  • ./configure,make,make install的作用(转)
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net framework profiles /.net framework 配置
  • .Net中ListT 泛型转成DataTable、DataSet
  • .project文件
  • [ solr入门 ] - 利用solrJ进行检索
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • []Telit UC864E 拨号上网
  • [20171113]修改表结构删除列相关问题4.txt
  • [20180129]bash显示path环境变量.txt
  • [Android Studio 权威教程]断点调试和高级调试
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
  • [Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
  • [JavaEE]线程的状态与安全
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • [MySQL光速入门]003 留点作业...
  • [SOC] MBIST (Memory Built-In Self Test) and Memory Built-in Self Repair (BISR)