Unity制作《打地鼠》游戏思路详解
一、游戏效果
1. 地鼠在九个洞中随机出现
2. 用鼠标击打地鼠,被打中的地鼠闭上眼睛,0.5秒后消失
二、制作思路和步骤
1. 场景搭建和前期准备
(1) 新建文件夹存放所需素材
(2) 把ground和hole贴纸拖入场景组成map
(3) 调整main camera各项参数
2. 点击地鼠
目标:鼠标点击Gophers后,Gophers消失
(1) 将贴纸Gophers、Gophers_Beaten拖入场景并添加box collider 2D组件
(2) 编写程序S1加给Gophers
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class S1 : MonoBehaviour {
public GameObject m_Prefab2;
void Start () {
}
void OnMouseDown()
{
Instantiate(m_Prefab2, transform.position, Quaternion.identity);
Destroy(gameObject);
}
}
(3) 给Gophers、Gophers_Beaten添加Audio source组件,添加相对应音频
3. 地鼠被击中后的处理
目标:点击Gophers后Gophers_Beaten出现,出现0.5秒后自动消失
(1) 把Gophers_Beaten做成预制体
(2) 把Gophers_Beaten预制体拖入S1组件
(3) 编写代码S2,加给Gophers_Beaten
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class S2 : MonoBehaviour {
void Start () {
Destroy(gameObject, 0.5f);
}
void Update () {
}
}
4. 地鼠随机出现
(1) 将Gophers做成预制体
(2) 创建空物体并命名为GreateTarget
(3) 编写代码GreatTarget并加给GreatTarget
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreateTarget : MonoBehaviour {
public GameObject m_Target;
void Start () {
InvokeRepeating("Create", 0, 1);
}
void Create()
{
Vector3 pos = Vector3.zero;
int id = 0;
id = Random.Range(1, 10);
if (id == 1)
pos = new Vector3(0, 0, 0);
if (id == 2)
pos = new Vector3(2, 0, 0);
if (id == 3)
pos = new Vector3(4, 0, 0);
if (id == 4)
pos = new Vector3(0, 1, 0);
if (id == 5)
pos = new Vector3(2, 1, 0);
if (id == 6)
pos = new Vector3(4, 1, 0);
if (id == 7)
pos = new Vector3(0, 2, 0);
if (id == 8)
pos = new Vector3(2, 2, 0);
if (id == 9)
pos = new Vector3(4, 2, 0);
Instantiate(m_Target, pos, Quaternion.identity);
}
}
(4) 拖入Gophers预制体
(5)调整main camera和map参数,直到地鼠出现的位置合适
三、游戏BUG和总结
游戏BUG:
地鼠出现的位置是随机的,当一个位置出现地鼠后,相同位置还会再次出现地鼠,则会出现两个或多个地鼠重叠在一个位置的情况。正确游戏情境应该为某一位置出现地鼠后,此位置将不再调用CreateTarget函数,不再出现地鼠,直到玩家击打该处后,再正常调用CreateTarget函数。
总结:
通过制作此次游戏,我学会了box collider2D的应用场景和贴纸的层级关系,重温了预制体的制作和音频的添加,复习了onMouseDown、Destroy和随机出现等函数。
tips:
- 地鼠贴纸为2D,实现onMouseDown函数效果的前提是给贴纸添加box collider2D组件。
- 同一平面的贴纸有层级关系,为了避免ground遮住地鼠贴纸,将ground的Order in Layer参数改为0,两张地鼠贴纸改为1。
上一篇: c++代码轻松实现贪吃蛇小游戏