Unity开发2D游戏入门教程:贪吃蛇游戏实战
创作时间:
作者:
@小白创作中心
Unity开发2D游戏入门教程:贪吃蛇游戏实战
引用
CSDN
1.
https://blog.csdn.net/weixin_45565886/article/details/144940822
Unity是一款强大的游戏开发引擎,可以用来开发2D和3D游戏。本文将带你从零开始,使用Unity开发一个简单的2D游戏——贪吃蛇。
环境准备
下载Unity
进入Unity官网,选择对应操作系统和版本进行下载。这里推荐下载最新长期支持版(LTS)。
下载.net环境
游戏开发语言使用C#,所以需要准备.net环境。下载地址:https://dotnet.microsoft.com/zh-cn/download
创建项目
我们开发的是2D游戏,这里选择2D游戏模板。
实战开发
场景搭建+实现小蛇跳跃
- 在Assets中导入角色与背景图片
- 创建Snake物品,create empty
- 给这个Snake物品添加一个sprite renderer,将小蛇图片拖入其中,按住shit键可以等比例缩放小蛇
- 调整渲染图颜色及物体大小
- 点击播放,查看效果
- 给Snake这个物品添加Rigidbody 2D重力,让其实现自然坠落
- 添加C#脚本代码,实现Snake跳跃操作
using UnityEngine;
public class SnakeController : MonoBehaviour
{
//每次跳动的高度
public float jumpForce = 5f;
private Rigidbody2D rb;
public GameObject gameOverPanel;
private bool isGameOver = false;
public float upperLimit = 1000000000f; // Set this to the top of your screen
public float lowerLimit = -1000000000f; // Set this to the bottom of your screen
private void Start()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
if (isGameOver) return;
if (Input.GetKeyDown(KeyCode.Space))
{
Jump();
}
}
private void Jump()
{
rb.linearVelocity = Vector2.up * jumpForce;
}
}
创建障碍物+实现物体碰撞
- 创建空物品Barrier,在下面分别创建topBarrier、bottomBarrier
- 分别给topBarrier、bottomBarrier添加Sprite Renderer,并调整物品页面布局
- 添加C#脚本,让障碍物实现向左移动(从视觉上实现小蛇向右移动)
using UnityEngine;
public class BarrierController : MonoBehaviour
{
public float speed = 2f;
public float lifetime = 10f;
private void Start()
{
//实现超出范围后,销毁多余的障碍物
Destroy(gameObject, lifetime);
}
private void Update()
{
MoveLeft();
}
private void MoveLeft()
{
//向左移动障碍物
// Debug.Log("move left....");
transform.Translate(Vector2.left * speed * Time.deltaTime);
}
}
- 给小蛇、障碍物都添加collider,实现碰撞效果
- 解决碰撞后,翻滚问题
脚本实现障碍物自动随机生成
- 在Assets目录下新建Prefab文件夹,用于存储我们的复制品
- 将Barrier拖到Prefab文件夹中,这样Barrier就成了复制品,然后我们就可以删除场景里的Barrier了
- 新建BarrierSpawner物品,并添加BarrierSpawner脚本实现自动生成障碍物
using UnityEngine;
public class BarrierSpawner : MonoBehaviour
{
public GameObject barrierPrefab;
public float spawnDelay = 2f;
public float minSpawnHeight = -2f;
public float maxSpawnHeight = 2f;
private void Start()
{
//重复调用函数,实现物品复制重复创建
InvokeRepeating("SpawnBarrier", 0f, spawnDelay);
}
private void SpawnBarrier()
{
float randomHeight = Random.Range(minSpawnHeight, maxSpawnHeight);
Vector2 spawnPosition = new Vector2(transform.position.x, randomHeight);
Instantiate(barrierPrefab, spawnPosition, Quaternion.identity);
}
}
实现加分机制
- Barrier下添加scoreCheck,scoreCheck添加box collider 2d,并勾选Is Trigger
- 添加ScoreManager物品,同时添加ScoreManager代码
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public static int score = 0;
public Text scoreText;
private void Update()
{
// Update the text field with the current score
scoreText.text = "Score:" + score.ToString();
}
//游戏重新开始,分数清零,重新加载游戏场景
public void OnRestartButtonClick() // Connect this function to your button's onClick event in the inspector
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
score = 0;
}
}
实现游戏结束逻辑
- Canvas下添加Panel,并调整页面展示位置与大小
- GameOverPanel下添加Text与Button,提示游戏结束与重新开始按钮
- 隐藏游戏结束页面,当触发碰撞条件时,游戏才结束
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Barrier"))
{
// Game over
GameOver();
}
}
private void GameOver()
{
isGameOver = true; // Add this line
// Freeze the Snake's motion
rb.linearVelocity = Vector2.zero;
if (gameOverPanel != null)
{
//展示游戏结束页面
gameOverPanel.SetActive(true);
}
}
实现重玩逻辑
给游戏结束页面的[重新开始]按钮绑定事件,点击时,触发游戏重新开始
游戏打包
- File - Build Profile
- 选择打包参数
- 修改压缩参数,改为gzip或不压缩
- 点击Build打包游戏,然后选择打包后文件存放位置
游戏上线(itch.io)
itch.io可以算是全球最大的独立游戏平台。它和steam一样,你可以把你的游戏上架到itch上,可以是免费的,也可以让大家捐赠,也可以让大家付费购买。
- 注册账号之后,创建项目
- 填写游戏基本信息
- 保存完后点击项目,改为public,表明游戏公开,然后就可以把体验链接发给其他人体验了
本地运行游玩
打包后的游戏,有两个文件夹(Build、TemplateData),一个文件(index.html)
# 本地运行项目:可以通过python直接起http服务,也可以下载nginx或Tomcat等
# 9999指定运行端口
# --directory 指定unity打包后的路径
python3 -m http.server 9999 --directory /Users/ziyi/Desktop/ZiyiSnakeRun
浏览器访问localhost:9999
全部代码地址(资源文件地址)
Github(欢迎star~):
https://github.com/ziyifast/ziyifast-code_instruction/tree/main/unity-demo/SnakeRun
热门推荐
补气血食疗方:黄芪当归红枣煮鸡蛋
齐鲁医院完成山东省首例晚期巨大肝癌转化手术
孕期2个月出现头晕恶心如何处理
孕期孕吐指南
大连美早樱桃和车厘子的区别是什么?
车厘子浑身是宝!但注意,这7类人要少吃!
如何感知自身的新陈代谢速度
全身麻醉,相当于死了一次?医生揭秘,麻醉时身体都在经历什么
你可能想不到,主食还能这样吃!帮助宝宝增强体质、促进消化
丝绸之路的文艺互鉴融合助力中国文艺繁荣发展
手撕包菜详细制作教程:从食材准备到成品出锅,让你轻松掌握这道家常美味
GRR(测试重复性再现性)全面解析与实战
新盘定价凸显性价比 入市热情激发
有产权车位与没产权车位的区别
车辆补漆价格详解,从成本到费用,你需要知道的一切
E光治疗太田痣的步骤及注意事项
影响发泡聚苯乙烯成本的因素分析
校园安全教育日的法律框架与实施策略
【回归预测】GAM广义加性模型-MATLAB
电动蝶阀电机过热预防全攻略:从选型到智能监测的五大维度
电机发热的四个原因及检测方法
眼镜度数不断提高怎么处理
火龙果糖分高不高
人工合成淀粉,技术造物新突破(硬核科技背后的创新故事)
被电信诈骗后的心理和生理变化:影响及应对策略
绘画疗法:打开抑郁症心理治疗的新大门!
王凤英离职传闻被辟谣,但小鹏汽车仍要寻找突围出路
全年龄段该如何补钙,一次说清
通信Modbus是如何工作的?
买卖合同法律风险防控指南