如何在unity中制作塔防游戏——学会转向

欢迎来到如何在unity中制作塔防游戏的第二部分。现在正在unity中创建一个塔防游戏,而且在第一部分可以放置并升级怪兽了。还有一个敌人来袭击曲奇。

然而,敌人不知道该面向哪个方向!还有,这是进行攻击的一个可怜的理由。在这部分,将添加一波波敌人并武装怪兽以便他们可以保护珍贵的曲奇。

开始吧

在unity中,打开前面教程完成的项目。

旋转敌人
在上一篇教程的最后,敌人追踪了路径,但是不知道该面向哪边。
在MonoDevelop中打开MoveEnemy.cs ,添加下边的方法来修复这个问题。

privatevoid RotateIntoMoveDirection(){
//1
  Vector3 newStartPosition = waypoints [currentWaypoint].transform.position;
  Vector3 newEndPosition = waypoints [currentWaypoint +1].transform.position;
  Vector3 newDirection =(newEndPosition - newStartPosition);
//2
float x = newDirection.x;
float y = newDirection.y;
float rotationAngle = Mathf.Atan2(y, x)*180/ Mathf.PI;
//3
  GameObject sprite =(GameObject)
      gameObject.transform.FindChild("Sprite").gameObject;
  sprite.transform.rotation=
      Quaternion.AngleAxis(rotationAngle, Vector3.forward);
}

RotateIntoMoveDirection 旋转了敌人以便它可以一直看向前方,像这样:

  1. 通过从下一个路径点减掉当前路径点的位置来计算虫子当前的移动方向。
  2. 用Mathf.Atan2来决定newDirection 点所朝方向的角度,在角度内,假设零点朝向右边。用结果乘以180 / Mathf.PI 将角度转换为度。
  3. 最后,检索命名为Sprite 的子集并沿Z轴方向旋转rotationAngle 。注意旋转的是子对象而不是父类,这样生命条——一会儿将要添加——保持水平。

在 Update()中,用下边的RotateIntoMoveDirection声明替换注释 // TODO:Rotate into move direction

RotateIntoMoveDirection();

保存文件并切换到unity。运行场景;现在怪兽知道他们的走向了。

现在虫子看向它移动的方向

只有一个敌人?太让人印象深刻了。让成群的敌人出现吧。就想每一个塔防游戏一样,成群的敌人会一波一波的来!

下一期我们会制作更多波数的敌人并且告知玩家。

标签: unity制作塔防游戏

?>