如何在unity中制作塔防游戏——放置怪兽

放置怪兽

为了便于放置,项目的Prefab 文件夹包含了一个Monster 预制件。

怪兽——已经准备好使用了

这时,它是一个由三个不同精灵和作为子集的射击动画组成的空游戏对象。每一个精灵代表怪兽在不同的能力等级。预制件还包含了一个Audio Source组件,每当怪兽发射激光时都可以触发它来播放一段音乐。

现在要创建可以在Openspot上放置Monster 的脚本了。在Project Browser中,从Prefabs 选择Openspot 。在Inspector中,点击Add Component,然后选择New Script 并命名为PlaceMonster。选择C Sharp语言并点击Create and Add。由于给Openspot预制件添加了脚本,场景中所有的Openspots都有了附加的脚本。多么整齐!

双击脚本以便在MonoDevelop中打开。然后填入下边两个变量:

public GameObject monsterPrefab;
private GameObject monster;

要实例化存储在monsterPrefab中的对象来创建一个怪兽,并将它存储在monster以便在游戏中可以控制它。

每个位置一个怪兽

添加下边的方法来允许每个位置只放置一个怪兽:

private bool canPlaceMonster(){
    return monster ==null;
}

在canPlaceMonster()中检查monster变量是否为空。如果是,意味着目前这里没有怪兽并且可以放置一个。
现在添加下边的代码以便玩家点击这个游戏对象时实际放置一个怪兽:

//1
void OnMouseUp(){
//2
if(canPlaceMonster()){
//3
    monster =(GameObject)Instantiate(monsterPrefab, transform.position, Quaternion.identity);
//4
AudioSource audioSource=gameObject.GetComponent<AudioSource>();
audioSource.PlayOneShot(audioSource.clip);

点击鼠标时这段代码会放置一个怪兽,这是怎么实现的?

  1. 当玩家点击游戏对象的物理碰撞器时unity会自动呼叫OnMouseUp。
  2. 呼叫时,如果canPlaceMonster() 返回值为true时这个方法放置一个新的怪兽。
  3. 用Instantiate来创建怪兽,一个创建有特殊位置和旋转的预制件实例的方法。这种情况下,复制monsterPrefab,给它现有游戏对象的位置并且不做旋转,将结果抛给GameObject 并在 monster里存储它。
  4. 最后,呼叫PlayOneShot来播放附加在对象的AudioSource组件上的声音效果。
    现在,PlaceMonster 脚本可以放置新的怪兽了,不过还是需要指定预制件。

使用正确的预制件

保存文件并切换到unity场景。
为了指定monsterPrefab 变量,首先在项目浏览视口的Prefabs 文件夹里选择Openspot 。
在Inspector中,点击PlaceMonster (Script) 组件的Monster Prefab 字段右边的圆圈,并从出现的对话框中选择Monster 。

就是那个。运行场景并且通过点击在不同的X点放置怪兽。

成功啦!现在可以创建怪兽了。然而它们看起来有些奇怪,因为怪兽所有的子精灵都是画出来的。以后会修复它。

下一期我们将会介绍到如何给这些怪兽升级。


转至:游戏蛮牛

标签: unity, unity2d, unity制作塔防游戏

?>