Unity简单塔防游戏的开发——敌人移动路径的创建及移动

软件工程综合实践专题第一次作业

Unity呢是目前一款比较火热的三维、二维动画以及游戏的开发引擎,我也由于一些原因开始接触并喜爱上了这款开发引擎,下面呢是我在学习该引擎开发小项目时编写的一些代码的脚本以及一些简单心得体会,供大家参考学习

这次项目是一款塔防游戏的模拟开发,塔防游戏大家肯定都很熟悉,那些敌人总是会一波接一波的从敌方基地出发并沿着指定道路移动到你的基地,那么这些敌人是怎样移动的呢?

//Wavepoints.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Waypoints : MonoBehaviour {

public static Transform[] positions;//路径点

void Awake()
{
positions = new Transform[transform.childCount];
for(int i = 0; i < positions.Length; i++)
{
positions[i] = transform.GetChild(i);
}
}

}

以上是用C#编写管理路径点的脚本,其中用unity中关于位置坐标的数组Transform[]来创建若干个路径点

//Wave.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Wave
{
public GameObject enemyPrefab;
public int count;
public float rate;
}

以上C#脚本用来保存每波敌人的属性(种类,数量,移动速度等)

//Enemy.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour {

private Transform[] positions;
private int index = 0;//确定到第几个路径点

public float speed = 1;

void Start () {
positions = Waypoints.positions;
}

void Update () {
Move();
}

void Move()
{
if (index > positions.Length - 1) return;
transform.Translate((positions[index].position - transform.position).normalized * Time.deltaTime * speed);
if (Vector3.Distance(positions[index].position, transform.position) < 0.2f)
{
index++;
}
}
}

}

以上是用C#编写的关于物体移动的脚本,这其中最重要的就是Transform.translate()函数,放入两个位置参数来获得一个方向向量,并以该方向以指定速度移动

Vector3.Distance()来获取两空间点之间的距离,当物体与某一路径点相距极近便认为它到达这一路径点,此时index自增使positions[index].position变更为下一个路径点的位置,以此是物体能够沿着指定路径移动

如有错误,欢迎纠正

转载于:https://www.cnblogs.com/spang/p/10477745.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值