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、等等
空调维修
- 温岭冰箱全国统一服务热线-全国统一人工【7X2
- 荆州速热热水器维修(荆州热水器维修)
- 昆山热水器故障码5ER-昆山热水器故障码26
- 温岭洗衣机24小时服务电话—(7X24小时)登记报
- 统帅热水器售后维修服务电话—— (7X24小时)登
- 阳江中央空调统一电话热线-阳江空调官方售后电
- 乌鲁木齐阳春燃气灶厂家服务热线
- 珠海许昌集成灶售后服务电话-全国统一人工【
- 乌鲁木齐中央空调维修服务专线-乌鲁木齐中央空
- 新沂热水器故障电话码维修-新沂热水器常见故障
- 诸城壁挂炉24小时服务热线电话
- 靖江空调24小时服务电话-——售后维修中心电话
- 空调室外滴水管维修(空调室外排水管维修)
- 九江壁挂炉400全国服务电话-(7X24小时)登记报修
- 热水器故障码f.22怎么解决-热水器f0故障解决方法
- 营口热水器售后维修服务电话—— 全国统一人工