MySuperMario----2D复刻之旅,缅怀童年时光
超级玛丽/超级马里奥
你好!欢迎浏览我的博客!超级玛丽是一款非常经典的2D游戏,今天我将代领大家学习如何从小白开始,用unity一步一步复刻这一经典。
一、开发工具准备
- unity2017以上版本 ,我制作的时候用的unity2018.1.0版本;
下载链接: unity发行版本. - 任何支持c#编程语言的集成开发环境 ,我使用的是visual studio2015;
- 搭建游戏的素材 ,这里我直接将做好的素材分享给大家,其中包括 游戏背景地图,相关人物设置,背景音乐 等。不过有兴趣的同学可以去爱给网上下载自己喜欢的素材,然后搭建自己喜欢的游戏素材;
素材链接:https://pan.baidu.com/s/16Kj96XLQ77gEtH1-r8KsHw 提取码: 2333
二、项目进展
1、场景布置:
- 游戏界面地图初始化
- 第一关卡最终场景布置
- 游戏音效
- [x]素材图片
- 动态效果
超级玛丽
2、基本角色及相关功能介绍:
马里奥:
*能够左右行走、跑步、跳跃;
*能够通过吃金币得分;
*马里奥吃到蘑菇会变大,拥有二次生命;
*顶碎砖块开辟道路;
*与敌人正面碰撞或者掉入深渊会死亡;
敌人:
*能够左右行走
*能够和马里奥大叔交互
*死亡消失
3、登录注册界面
4、开始结束界面
5、场景之间的跳转
可以把现阶段所以的场景合起来,实现每个不同场景之间的切换。
6、隐形关卡(增加难度)
马里奥从第一关卡某个管道进入这个挑战关卡,关卡隐形。
7、第二关卡基本地图设计完成
8、第三阶段基本地图设计完成
三、项目基本功能架构和功能流程图示
1、基本功能架构
2、相关类介绍及关联
designed by Modelio Open Source 4.0
下一步计划
-
这一周把第所有关卡设计好
-
第十五周综合测试所有关卡、维护项目
-
第十五完善所有的设计文档,并细化制作细节
-
第十六周报告展示
点击下方链接,访问我们的github
链接: https://github.com/CAdom/MySuperMario.
目前项目提交情况:
##关键代码展示
音频控制器
.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioManager : MonoBehaviour
{
GameObject obj;
AudioSource bgmPlayer;
AudioSource sePlayer;
//单例模式
public static AudioManager Instance;//声明当前类静态实例
private void Awake()
{
Instance = this;//this就代表当前这个类
}
void Start ()
{
obj = GameObject.Find("AudioPlayer");
bgmPlayer = obj.GetComponent<AudioSource>();
sePlayer = obj.GetComponent<AudioSource>();
}
public void PlayMusic(string name)
{
AudioClip clip = Resources.Load<AudioClip>("Audios/" + name);//加载音乐片段
bgmPlayer.clip = clip;//切换音乐
bgmPlayer.Play();//播放新的音乐
}
public void StopMusic()
{
bgmPlayer.Stop();
}
public void PlaySound(string name)
{
AudioClip clip = Resources.Load<AudioClip>("Audios/" + name);//加载特效片段
sePlayer.PlayOneShot(clip);//播放加载的音频
}
}
相机控制器
.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraControl : MonoBehaviour
{
float minX;
float maxX;
public static Transform mario;
void Start()
{
minX = -16;
maxX = 16;
mario = GameObject.Find(PlayerControl.wanjia).transform;
}
void Update()
{
//mario = GameObject.Find(PlayerControl.wanjia).transform;
Vector3 pos = transform.position;//获取相机当前的位置
pos.x = mario.position.x;//更改位置的X轴的位置
if (pos.x > maxX)
{
pos.x = maxX;
}
if (pos.x < minX)
{
pos.x = minX;
}
transform.position = pos;//将更改后的值重新附给相机,实现相机位置更新
}
}
马里奥大叔控制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerControl</