Unity 游戏实例开发集合 之 打砖块 休闲小游戏快
Unity 游戏实例开发集合 之 打砖块 休闲小游戏快速实现
目录
Unity 游戏实例开发集合 之 打砖块 休闲小游戏快速实现
一、简单介绍
二、打砖块游戏内容与操作
三、游戏代码框架
四、知识点
五、游戏效果预览
六、实现步骤
七、工程源码地址
八、延伸扩展
一、简单介绍
Unity 游戏实例开发集合,使用简单易懂的方式,讲解常见游戏的开发实现过程,方便后期类似游戏开发的借鉴和复用。本节介绍,打砖块 休闲小游戏快速实现的方法,电脑维修网希望能帮到你,若有不对,请留言。
二、打砖块游戏内容与操作
1、游戏开,砖块自动堆积生成
2、鼠标位置即是射击方向
3、鼠标点击左键发射球体
4、点击 Space 空格键,重新开始游戏
三、游戏代码框架
四、知识点
1、MonoBehaviour 生命周期函数Aake,Start,Update,OnGUI
2、Input 按键的监控
3、GameObject.Instantiate 物体的生成,GameObject.Destroy 物体的销毁
4、Camera.WorldToScreenPoint 世界坐标转屏幕坐标,Camera.ScreenToWorldPoint 屏幕坐标转世界坐标
5、Rigidbody 、GetComponent
6、GUIStyle GUI样式,GUI.Label 添加文字的功能使用
7、等等
附录Unity API 中详细介绍了unity脚本默认函数的执行顺序,点这里访问。这里主要介绍下面这张图
五、游戏效果预览
六、实现步骤
1、打开 Unity,创建工程,导入相关资源 (相关资源获取可以从后面的工程源码获取)
2、构建场景,主要添加地面 Plane,砖块组 BrickGroup 作为生成的砖块的父物体管理和初始位置,BallGroup 作为生成球体的父物体管理
3、地面 Plane 添加材质 Stylize Tiles Diffuse
4、BrickStartPosition 的砖块初始生成位置设置为 (-5,0.5,0) ,可以根据你的实际视野自行调整
5、预制体 Brick 来源于 block_brick_bron_4_LOD2,添加 Rigidbody 刚体物理效果,和 BoxCollider 碰撞体效果
6、预制体 Brick 来源于 Soer Ball Mesh,添加 Rigidbody 刚体物理效果,和 SphereCollider 碰撞体效果
7、BrickManager 砖块管理类,主要两个函数控制砖块的生成和销毁
8、BrickManager 砖块管理类,SpanBricks 用来生成初始的砖块矩阵
参数说明
/// 砖块的起始位置
/// 砖块的列数
/// 砖块的行数
/// 砖块的间隔距离
////// 生成砖块矩阵 /// /// 砖块的起始位置 /// 砖块的列数 /// 砖块的行数 /// 砖块的间隔距离 public void SpanBricks(GameObject brick,Transform parentTra,Vector3 startPost, int col,int ro,float distance) { if (brick != null ) { GameObject go = null; // 根据行列生成 砖块 for (int i = 0; i < col; i++) { for (int j = 0; j < ro; j++) { // 生成砖块,并且设置位置 go = GameObject.Instantiate(brick, parentTra); go.transform.position = ne Vector3(startPost.x+ j distance, startPost.y+ i distance, startPost.z); m_BricksList.Add(go); } } } }
9、BrickManager 砖块管理类,DestoryBricks 负责砖块的销毁
////// 销毁砖块 /// public void DestoryBricks() { if (m_BricksList!=null) { // 依次销毁砖块 for (int i = m_BricksList.Count-1; i >= 0; i--) { GameObject.Destroy(m_BricksList[i]); } m_BricksList.Clear(); } }
10、BrickManager 砖块管理类,主要两个函数控制球体的生成发射和销毁
11、BrickManager 砖块管理类,ShootBall 负责球的生成和发射
参数说明
/// 球的预制体
/// 球生成的父物体
/// 球生成的初始位置
/// 球的运动方向
/// 球的运动速度
////// 生成并发射球体 /// /// 球的预制体 /// 球生成的父物体 /// 球生成的初始位置 /// 球的运动方向 /// 球的运动速度 public void ShootBall(GameObject ball, Transform parentTra, Vector3 startPost,Vector3 forardDir,float speed) { if (ball!=null) { // 生成球体,设置初始位置,并且添加运动速度 GameObject go = GameObject.Instantiate(ball, parentTra); go.transform.position = startPost; go.GetComponent().velocity = forardDir speed; m_BallsList.Add(go); } }
12、BrickManager 砖块管理类,ShootBall 负责球的销毁
////// 销毁球体 /// public void DestoryBalls() { if (m_BallsList != null) { // 依次销毁球体 for (int i = m_BallsList.Count - 1; i >= 0; i--) { GameObject.Destroy(m_BallsList[i]); } m_BallsList.Clear(); } }
13、Tools 工具类
14、Tools 工具类,函数 MousePosScreenToWorldPos 主要是把鼠标位置转为对应的世界坐标位置
参数说明
/// 对应参照对象
/// 对应参照相机
///
////// 把鼠标屏幕坐标转为世界坐标 /// /// 对应参照对象 /// 对应参照相机 ///鼠标的世界位置 public static Vector3 MousePosScreenToWorldPos(Transform refTran,Camera refCamera) { //将对象坐标换成屏幕坐标 Vector3 pos = refCamera.WorldToScreenPoint(refTran.position); //让鼠标的屏幕坐标与对象坐标一致 Vector3 mousePos = ne Vector3(Input.mousePosition.x, Input.mousePosition.y, pos.z); //将正确的鼠标屏幕坐标换成世界坐标交给物体 return refCamera.ScreenToWorldPoint(mousePos); }
15、GameStart 游戏开始类
16、GameStart 游戏开始类,Aake 和 Start 实例化一些参数,以及生产砖块矩阵
private void Aake()
{
// 实例化参数
m_Instance = this;
m_BrickManager = ne BrickManager();
m_BallManager = ne BallManager();
m_MainCamera = Camera.main;
}
// Start is called before the first frame update
void Start()
{
// 生成砖块
m_BrickManager.SpanBricks(Brick,BrickParent,BrickStartPosition.position,
BrickCol,BrickRo,BrickDistance);
}
17、GameStart 游戏开始类,Update 中监听鼠标按下发射球体,监听 Space 空格键按下重新开始游戏
// Update is called once per frame
void Update()
{
// 鼠标按下,发射球
if (Input.GetMouseButtonDon(0))
{
// 计算当前鼠标在屏幕的位置,得到球的发射目标方向
Vector3 forardDir = (Tools.MousePosScreenToWorldPos(BrickParent,m_MainCamera)-m_MainCamera.transform.position).normalized;
// 生成并发射球体
m_BallManager.ShootBall(Ball, BallParent,m_MainCamera.transform.position, forardDir, BallShootSpeed);
}
// 按下空格键,重新加载当前游戏
if (Input.GetKeyDon(KeyCode.Space))
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
18、GameStart 游戏开始类,OnDestroy 负责游戏结束后,自动销毁球体和砖块,OnGUI 添加对应的游戏操作说明
// Unity 周期函数 销毁的时候调用
private void OnDestroy()
{
m_BrickManager.DestoryBricks();
m_BallManager.DestoryBalls();
}
// Unity 周期函数 每帧调用
private void OnGUI()
{
// 游戏操作说明
GUIStyle fontStyle = ne GUIStyle();
fontStyle.normal.background = null; //设置背景填充
fontStyle.normal.textColor = ne Color(1, 0, 0); //设置字体颜色
fontStyle.fontSize = 40; //字体大小
GUI.Label(ne Rect(10, 10, 200, 200),
"操作说明n1、鼠标位置是球发射的目标方向;n2、点击鼠标左键发射球体;n3、点击空格键重新开始游戏;",
fontStyle);
}
19、把 GameStart 游戏开始类添加到场景中,并对应赋值
注意可以自定义设置砖块的 行列数,以及球的 发射速度
20、运行场景,状态自动生成
21、鼠标点击发射球体, Space 空格键重新开始游戏,即可开始玩了
七、工程源码地址
github 地址GitHub - XANkui/UnityMiniGameParadise: Unity 游戏开发集合代码集
八、延伸扩展
游戏的好不好玩,趣味性,视觉化等诸多因素影响,下面简单介绍几个方面拓展游戏的方向,仅做参考
1、可以根据自己需要动态生成不同的墙或者球体,动态墙生成的过程等
2、可以根据需要添加撞击特效,音效等
3、添加 UI 面板等,美化游戏
4、等等
空调维修
- 我的世界电脑版运行身份怎么弄出来(我的世界
- 空调抽湿是什么意思,设置抽湿的温度有什么意
- 方太燃气灶有一个打不着火 怎么修复与排查方法
- 夏季免费清洗汽车空调的宣传口号
- 清洗完空调后出现漏水现象
- iphone6能玩什么游戏(iphone6游戏)
- 如何设置电脑密码锁屏(如何设置电脑密码锁屏
- win10删除开机密码提示不符合密码策略要求
- 电脑w7显示不是正版(w7不是正版怎么解决)
- 万家乐z8热水器显示e7解决 怎么修复与排查方法
- 1匹空调多少瓦数(1匹空调多少瓦)
- 安卓手机连接电脑用什么软件好(关于安卓手机
- 电脑网页看视频卡是什么原因(爱拍看视频卡)
- 华帝燃气灶点火器一直响然后熄火怎么办:问题
- 电脑壁纸怎么换(关于电脑壁纸怎么换的介绍)
- 冬天空调的出风口应该朝什么方向(冬天空调风