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;

}

}

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

相关推荐
天水幼麟1 小时前
动手学深度学习-学习笔记【二】(基础知识)
笔记·深度学习·学习
绿皮的猪猪侠1 小时前
算法笔记上机训练实战指南刷题
笔记·算法·pta·上机·浙大
沧海一笑-dj1 小时前
【51单片机】51单片机学习笔记-课程简介
笔记·学习·51单片机·江科大·江科大学习笔记·江科大单片机·江科大51单片机
老虎06272 小时前
JavaWeb(苍穹外卖)--学习笔记04(前端:HTML,CSS,JavaScript)
前端·javascript·css·笔记·学习·html
TESmart碲视2 小时前
HKS201-M24 大师版 8K60Hz USB 3.0 适用于 2 台 PC 1台显示器 无缝切换 KVM 切换器
单片机·嵌入式硬件·物联网·游戏·计算机外设·电脑·智能硬件
大苏打seven3 小时前
Docker学习笔记:Docker网络
笔记·学习·docker
Green1Leaves4 小时前
pytorch学习-9.多分类问题
人工智能·pytorch·学习
慕y2744 小时前
Java学习第十五部分——MyBatis
java·学习·mybatis
翻滚吧键盘5 小时前
查看linux中steam游戏的兼容性
linux·运维·游戏
碣石潇湘无限路5 小时前
【AI篇】当Transformer模型开始学习《孙子兵法》
人工智能·学习