2D横版游戏Demo试做流程(Unity3D+Visual Studio C#)
目录
UI界面设置
通过各种途径获得相关UI元素,在Unity中左侧栏中利用2D Project中元素完成场景。设置好各个物体所需的Box Collider 2d (碰撞)和 rigidBody 2d(物理属性)。设置好不同物体的类型(tag)(例如角色、金币、怪物、子弹等)后续碰撞检测需要使用。
主场景
进入游戏界面
失败和成功界面
其中还包括设置游戏内怪物和角色动画。角色为UNITY社区中下载的包,已包含动画。怪物使用关键帧动画,创建动画后,在ctri+6呼出的时间轴中添加关键帧。
游戏规则制定
在项目下新建Scriipt(代码)文件夹,创建GameManager的C#文件。在该文件中制定游戏大体规则。
使用单例模式(饿汉子单例模式)创建各种变量。
public class GameManage : MonoBehaviour
{
//单例模式(饿汉子单例模式)
public static GameManage Index; //静态变量不能被实例化
GameManage()
{
Index = this;
}
//工厂模式(内部所有组成成员的变量全部都是静态变量)
[Header("金币值")]
public int gold = 0;
[Header("当前关卡")]
public int Level = 1;
/// <summary>
/// 所有的音频管理
/// </summary>
public AudioSource[] allAudio;
/// <summary>
/// 地面
/// </summary>
public GameObject Floor;
/// <summary>
/// 金币显示
/// </summary>
public Text Gold;
/// <summary>
/// 剩余时间显示
/// </summary>
public Text TimeShow;
float times = 300;
/// <summary>
/// 主角速度
/// </summary>
public float PlayerSpeed = 0.03f;
/// <summary>
/// 主角
/// </summary>
public GameObject KyaRa;
/// <summary>
/// 主角状态 0为无防护
/// </summary>
public int PlayerState = 0;
/// <summary>
/// 显示无敌图标
/// </summary>
public GameObject PlayerIsSuper;
/// <summary>
/// 显示主角武器
/// </summary>
public GameObject PlayerIsAttact;
// Start is called before the first frame update
void Start()
{
PlayerIsSuper.SetActive(false);
PlayerIsSuper.SetActive(false);
}
// Update is called once per frame
void Update()
{
times -= Time.deltaTime;
TimeShow.text = times.ToString();
}
}
Player角色(玩家可控制角色相关)(创建playerC#文件)
总体分为几种功能
1、角色的各种状态(创建各种变量标识主角状态)
//动画控制
public Animator anime;
//物理属性
public Rigidbody2D rigi;
//检测是否在地面上(false为不在地面上)
bool IsOnFloor = false;
//当前人物位置
float PlayerPrint;
//是否人物移动
bool isPlayerRun = true;
/// <summary>
/// 武器
/// </summary>
public GameObject Attact;
2、角色控制相关(通过键盘按键WASD移动,J攻击操控角色)移动主要使用transform方法改变主角位置。在主角行走至屏幕中间时,改为地图进行相对向后运动,主角位置不变。
void run()
{
//点击D键向右移动
if (Input.GetKey(KeyCode.D))
{
if (isPlayerRun)
{
//控制跑动速度和位置
transform.Translate(GameManage.Index.PlayerSpeed* - 1, 0, 0);
}
else
{
GameManage.Index.Floor.transform.Translate(GameManage.Index.PlayerSpeed * -1, 0, 0);
}
//控制人物面朝方向为向右
transform.eulerAngles = new Vector3(0, 180, 0);
if (IsOnFloor )