Unity 2D塔防
来源:互联网 发布:软件体验报告模板 编辑:程序博客网 时间:2024/06/04 17:57
1 .怪物的生成
首先需要一个脚本定义怪物类型和变量 :代码如下
public class Wave //敌人属性
{
public GameObject Enemy; //敌人种类
public int wave; //敌人一泼几个
public float speed; //出怪间隔
}
然后有一个实例化怪物的脚本
public Transform place; //出怪点
public Wave[] waves; //怪物属性脚本
void Awake()
{
StartCoroutine("Enemy");
}
IEnumerator Enemy()
{
foreach (Wave wave in waves)
{
for (int i = 0; i < wave.wave; ++i)
{
GameObject a = Instantiate(wave.Enemy, place.position, Quaternion.identity, GameObject.Find("LevelMap_1").transform) as GameObject; //实例化怪物
yield return new WaitForSeconds(wave.speed);
}
}
2.2D怪物寻路
使用空物体,摆出一条道路.然后代码便利所有空物体,判断怪物和第一个空物体的距离,当接近相等,就让怪物去找别一个空物体,以此类推,怪物移动就完成了.大概代码如下:
public Transform[] Waydot; //敌人移动点(空物体)
int Dot=0; //移动点索引
void Update()
{
if (Dot > Waydot.Length - 1) //当怪物移动到最后一个空物体时,
{
return; //下面代码就不执行;
}
transform.Translate((Waydot[Dot].position - transform.position).normalized * Time.deltaTime * Speed); //敌人移动
if (Vector2.Distance(Waydot[Dot].position, transform.position) <= 0.1F)
{
Dot++;
}
3. 2D怪物转向切换动画
遍历所有空物体,计算相邻两个空物体的X相减,Y相减,判断相减后的X和Y的大小;大概代码如下:
if (Mathf.Abs(Waydot[Dot].position.x - Waydot[Dot - 1].position.x) > Mathf.Abs(Waydot[Dot].position.y - Waydot[Dot - 1].position.y) && Waydot[Dot].position.x - Waydot[Dot - 1].position.x >= 0)
{
//向 右动画
}
if (Mathf.Abs(Waydot[Dot].position.x - Waydot[Dot - 1].position.x) < Mathf.Abs(Waydot[Dot].position.y - Waydot[Dot - 1].position.y) && Waydot[Dot].position.y - Waydot[Dot - 1].position.y >= 0)
{
//向 上动画
}
if (Mathf.Abs(Waydot[Dot].position.x - Waydot[Dot - 1].position.x) > Mathf.Abs(Waydot[Dot].position.y - Waydot[Dot - 1].position.y) && Waydot[Dot].position.x - Waydot[Dot - 1].position.x <= 0)
{
//向左动画
}
if (Mathf.Abs(Waydot[Dot].position.x - Waydot[Dot - 1].position.x) < Mathf.Abs(Waydot[Dot].position.y - Waydot[Dot - 1].position.y) && Waydot[Dot].position.y - Waydot[Dot - 1].position.y <= 0)
{
//向下动画
}
4. 防御塔的建造
首先在地图上摆上你要建塔的位置,建塔点,并加上Circle Collider2D ,给建塔点加一个Tag或Layer,当点击鼠标左键时,从相机发出一条射线,判断是否点击到了建塔点,如果点到了就实例化出一个塔; 代码如下:
int BuildPagodac; // 建塔层层
void Start()
{
BuildPagodac = LayerMask.GetMask("BuildPagoda"); //建塔点 标签
}
void Update()
{
if (Input.GetMouseButtonDown(0)) //如果你点了鼠标左键
{
Vector2 pos = (Camera.main.ScreenToWorldPoint(Input.mousePosition)); //从相机发一条射线到鼠标点的位置
Collider2D BuildPagodacHit = Physics2D.OverlapPoint(pos, BuildPagodac); //与建塔点 //检查对撞机是否与空间中的点重叠。
if (BuildPagodacHit) //与建塔点
{
//建塔的方法
//也可以在这里实例化塔
}
}
- Unity 2D塔防
- unity 2d贴图
- Unity 2D 入门
- Unity 2D 动画
- Unity 2D Sprite
- Unity-2D物理
- #Unity自建塔防游戏知识点
- 3D塔防游戏实现 1.3 2D小地图控制3D地图视角(Feekood语言)
- [unity]unity 2d draw call优化
- unity做2d必备
- 2D Blending-Unity Animator
- unity 2D行走动画
- unity 3D 复习2
- Unity 2D入门基础教程
- unity 制作2d动画
- Unity 2D入门基础教程
- Unity 5.0 2D (1)
- Unity 2d动画实现
- HTML和XHTML的区别
- 微信分享朋友,朋友圈,qq
- 自学OPENCV+PYTHON+MACOS-X(1)
- 关于ajax跨域问题
- LeetCode||56. Merge Intervals
- Unity 2D塔防
- sql limit offset 区别
- android 硬解码 是否支持
- 软件工程中的常见耦合
- [转载]Chris Richardson微服务翻译:微服务介绍
- [Desigh Pattern]2.Strategy Pattern (策略模式)
- POJ 2437 Muddy Roads(贪心 最少固长线段覆盖区间)
- Spark性能相关参数配置-大全
- js获取url的多个参数