Unity入门:简易版打地鼠小游戏
创作时间:
作者:
@小白创作中心
Unity入门:简易版打地鼠小游戏
引用
CSDN
1.
https://m.blog.csdn.net/wzy200430/article/details/142954173
本文通过制作一个简单的打地鼠游戏,详细介绍了MVC模式在Unity游戏开发中的应用。从模型、视图到控制器,每个部分的代码实现都经过精心设计,旨在帮助读者理解MVC模式的构成和作用,以及熟悉Unity的基本用法。
MVC模式
本次任务要求我们在实践中认识游戏设计中的MVC模式。所谓MVC模式,就是Model-View-Controller模式。
- Model即模型,模型代表一个存取数据的对象。
- View即视图,视图可以将模型包含的数据可视化。视图确保了呈现的数据具有一定的格式和结构。
- Controller即控制器,控制器控制模型的变化。是模型和视图之间的协调者。
MVC模式的优点:
- 关注点分离:MVC 模式将数据(模型)、用户界面(视图)和控制逻辑(控制器)分离,使得开发者可以专注于单个方面,而不需要担心其他部分的实现。
- 代码可维护:由于代码被组织得更加模块化,因此更容易理解和维护。当需要修改游戏的某个部分时,开发者可以更有针对性地进行修改,而不会影响到其他部分。
- 可重用性:模型和视图可以独立于控制器进行重用。如果游戏需要在不同的平台或设备上运行,可能只需要更改控制器部分,而模型和视图可以保持不变。
接下来我们就利用MVC模式的特点,用Unity制作一款简单的入门打地鼠小游戏。
打地鼠小游戏
游戏介绍:这是一款测试反应能力的小游戏。玩家需要在规定时间内尽可能多地点击屏幕上出现的笑脸。
演示视频:
unity制作的简易打地鼠小游戏
游戏制作:
首先新建一个Unity项目。在assets文件夹下新建一个C#项目。开始编辑脚本。这里我将其命名为test。
脚本可以分为三个部分:
Model:
private static int score;
private int x, y;
private int[,] board = new int[3, 3];
private bool gameActive;
private static float beginTime, usedTime;
private float moleDisplayTime = 1.0f; // 显示时间
private bool isFlashing = false; // 是否正在闪烁
private float countdownTime = 30f; // 倒计时时间,单位秒
// System Handlers
void Start()
{
Init();
}
View:
// View
void OnGUI()
{
Event e = Event.current; // 获取当前事件
GUI.Box(new Rect(210, 25, 300, 300), "");
if (GUI.Button(new Rect(310, 270, 100, 30), "Restart"))
Init();
if (gameActive)
{
GUI.Label(new Rect(210, 25, 300, 50), "Time Left: " + (countdownTime - (Time.time - beginTime)).ToString("0")); // 显示倒计时
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (board[i, j] == 1)
{
// 绘制笑脸
Rect faceRect = new Rect(255 + j * 70, 50 + i * 70, 70, 70);
DrawFace(faceRect);
if (e.type == EventType.MouseDown && faceRect.Contains(e.mousePosition))
{
HitMole(); // 点击笑脸时调用HitMole
}
}
}
}
}
else
{
GUI.Box(new Rect(260, 50, 200, 200), "\n\n\n\nYour Score is:\n" + score);
GUI.Label(new Rect(320, 150, 300, 50), "Game Over!");
}
}
Controller:
// Controller
void Init()
{
score = 0;
beginTime = Time.time;
usedTime = 0.0f;
gameActive = true;
isFlashing = false;
countdownTime = 30f; // 重置倒计时时间
StartCoroutine(MoleCycle());
}
IEnumerator MoleCycle()
{
while (gameActive)
{
if (!isFlashing) // 只有在没有正在进行的闪烁时才生成新的笑脸
{
GenerateMole();
yield return new WaitForSeconds(moleDisplayTime);
}
yield return null; // 等待下一帧
}
}
void GenerateMole()
{
x = Random.Range(0, 3);
y = Random.Range(0, 3);
boardInit();
board[x, y] = 1;
}
void HideMole()
{
boardInit();
}
void boardInit()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
board[i, j] = 0;
}
}
void HitMole()
{
score++;
isFlashing = true; // 标记开始闪烁
StartCoroutine(FlashAndHide()); // 启动闪烁协程
}
IEnumerator FlashAndHide()
{
for (int i = 0; i < 3; i++) // 闪烁3次
{
board[x, y] = 1;
yield return new WaitForSeconds(0.1f);
board[x, y] = 0;
yield return new WaitForSeconds(0.1f);
}
board[x, y] = 0;
isFlashing = false; // 闪烁结束
}
void Update()
{
if (gameActive && (Time.time - beginTime) >= countdownTime)
{
gameActive = false;
}
}
void MissMole()
{
usedTime = Time.time - beginTime;
gameActive = false;
}
// 绘制笑脸
void DrawFace(Rect faceRect)
{
GUI.color = Color.yellow;
GUI.DrawTexture(faceRect, Texture2D.whiteTexture);
GUI.color = Color.black;
GUI.DrawTexture(new Rect(faceRect.x + 15, faceRect.y + 15, 10, 10), Texture2D.whiteTexture);
GUI.DrawTexture(new Rect(faceRect.x + 45, faceRect.y + 15, 10, 10), Texture2D.whiteTexture);
GUI.color = Color.black;
GUI.DrawTexture(new Rect(faceRect.x + 25, faceRect.y + 40, 20, 10), Texture2D.whiteTexture);
}
编辑好脚本后将其添加到Main Camera上面:
点击运行游戏即可开始。
总结
这次实验尝试使用MVC模式编写了一款简单的打地鼠类小游戏,旨在理解MVC模式的构成和作用,以及熟悉Unity的用法。
热门推荐
宠物熊猫兔的喂食注意事项(了解熊猫兔的饮食需求,科学合理喂养)
探访宁波十大历史文化名人故居:感受名人的传奇人生
秋冬打卡浙江最美梯田:上虞出发,一路美景!
“鱼刺克星”非它莫属,做鱼时加1点,放心吃,鱼刺不卡喉!
纳米黄金:医疗领域的“隐形天使”
金价突破2800美元!黄金成2025年最佳避险资产
春节健康指南:吃好睡好玩出新高度!
广州有轨电车:城市地标与珠江江畔漫游攻略
贵阳最适合爸妈的养生游打卡点
贵阳“15分钟养老服务圈”:让老人安心游,乐享晚年
景宁隐藏的十大宝藏景点,每一处都藏着独特的故事!
古堰画乡自驾游攻略:最美浙江丽水路线
打卡仙都:浙江丽水的仙境秘境
自驾游必看!雾景拍摄完全攻略
病毒性、细菌性、真菌性,这3种肺炎傻傻分不清楚
国家疾控局部署春节就医保障:线上线下多渠道满足群众需求
中考英语听说考试健康攻略:从备考到防疫全指南
假日经济|小县城游增速"跑赢"大都市,中国游客遍及全球近200个国家
江南水乡最美的10大烟雨古镇,充满诗情画意,你去过几个?
中考英语高效备考:名师教你如何逆袭
中考倒计时!如何打造助力孩子英语复习的家庭环境?
跟着《黑神话:悟空》游忻州古城过大年
跨年科普:盘点10大跨年健康提示
南昌下周30度高温来袭!出行攻略出炉
南昌湾里:英雄城的后花园,藏着这些宝藏打卡地
南昌周边自驾游:最美自然景观打卡地
《大话西游2》鬼族实战攻略:技能搭配与装备选择详解
《大话西游》鬼族法术设计揭秘:从动漫角度看
平菇蛋花汤制作详解:清淡美味,营养丰富,简单易学
昌吉自驾游:美食、湿地与千年古迹的完美邂逅