[Unity2D入门教程]简单制作仿植物大战僵尸游戏之④添加供敌人生成的路径行以及制作植物摆放的条形框

本文主要是介绍[Unity2D入门教程]简单制作仿植物大战僵尸游戏之④添加供敌人生成的路径行以及制作植物摆放的条形框,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

添加供敌人生成的路径行:

  众所周知植物大战僵尸中僵尸会在五条路(或六条)中生成对应的僵尸,而不会生成在路和路之间,因此我们也要实现这个功能

我们先创建一个Spanwers的空对象,然后创建名字为Spawner作为它的子对象,

它的Y坐标一定要为整数,看看你的Canvas和background是不是设置和我一样

 依次这样下去直至五行全部都创建都好,这里就不一一截图了

 这里创建的Attack Spawner如下,挂载好后把我们前面创建的预设体Lizard鳄鱼拖进来(预设体中必须要有Attacker脚本)        

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AttackSpawner : MonoBehaviour
{[SerializeField] Attacker attackPrefab;[SerializeField] float minSpawnDelay = 1f;[SerializeField] float maxSpawnDelay = 5f;bool spawn = true;IEnumerator Start(){while (true){yield return new WaitForSeconds(Random.Range(minSpawnDelay, maxSpawnDelay)); //延迟生成Attacker对象SpawnAttack();}}private void SpawnAttack(){Attacker newattacker = Instantiate(attackPrefab, transform.position, transform.rotation) as Attacker;newattacker.transform.SetParent(transform); //并把对象转化为我们Spawenr的子对象,简化hierarchy窗口}
}

创建好后,鳄鱼就会在我们制定的行数中生成(按你设置的随机最小值到最大值之间的时间)

制作植物摆放的条形框:

首先我们要创建一个植物能摆放的框叫Core Game Area

在这个区域我们要准确找到鼠标点击的位置对应的世界坐标的浮点型,并且当点击在这块区域时执行种植植物的代码 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class DefenderSpawner : MonoBehaviour
{Defender defender;private void OnMouseDown() //鼠标点击事件{AttempToPlaceDefenderAt(GetSquareClicked());}public void SetSelectDefender(Defender defenderSelect){defender = defenderSelect; //登记你生成的Defender}private void AttempToPlaceDefenderAt(Vector2 gridPos){var starDisplay = FindObjectOfType<StarsDisplay>();int defenderCost = defender.GetStarCost(); //获得植物需要花费的starsif (starDisplay.HaveEnoughStars(defenderCost)) //判断是否够stars{SpawnDefender(gridPos);//生成位置starDisplay.SpendStars(defenderCost);//扣除生成所需的stars}}private Vector2 GetSquareClicked(){Vector2 clickPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);//鼠标点击的坐标Vector2 worldPos = Camera.main.ScreenToWorldPoint(clickPos);//将鼠标坐标转化为世界坐标Vector2 gridPos = SnapToGrid(worldPos);//把世界坐标的X和Y值(浮点型)转化为最接近的int型整数(这就是为什么我前面要用整形的坐标)return gridPos;}private Vector2 SnapToGrid(Vector2 rawWorldPos){float newX = Mathf.RoundToInt(rawWorldPos.x);float newY = Mathf.RoundToInt(rawWorldPos.y);return new Vector2(newX, newY);}private void SpawnDefender(Vector2 roundedPos){Defender newDenfender = Instantiate(defender, roundedPos, Quaternion.identity) as Defender;}
}

接下来还需要制造一个条形框:

还记得我们之前创建的Quad的3d object吗?这里给它一个材质球,以及创建两个sprite renderer作为它的子集

之后我们要为这两个对象创建名字为Defender Button的脚本,内容如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class DefenderButton : MonoBehaviour
{[SerializeField] Defender defenderPrefab;private void OnMouseDown(){var buttons = FindObjectsOfType<DefenderButton>();foreach(var button in buttons){button.GetComponent<SpriteRenderer>().color = new Color(104, 104, 104,255);}GetComponent<SpriteRenderer>().color = Color.white;FindObjectOfType<DefenderSpawner>().SetSelectDefender(defenderPrefab);}
}

这里我们先用遍历的方式将其它按钮先全部设置成灰色,然后点击的部分就变成了白色


游戏效果:

虽然我已经设置好足够的间隔了,但每次只点一块地方的时候另一块也会亮起来,希望有懂哥能帮忙解决一下

 当我们费用不够的时候点击他是不会有反应的。

这篇关于[Unity2D入门教程]简单制作仿植物大战僵尸游戏之④添加供敌人生成的路径行以及制作植物摆放的条形框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376834

相关文章

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直