一、前言
我与另外两个组员制作了项目的其中一个单机游戏,类型是2D横屏跑酷游戏。游戏中的角色可以在跳跃与奔跑的过程中收集金币,能够很好地考验和锻炼玩家的反应能力和观察能力。玩家坚持得越久、收集到的金币越多,那么玩家的得分就越高。
我在这个游戏中负责的工作是金币制作和拾取脚本的设计和编写以及金币的添加等部分。
二、金币的制作和相关设置
在脚本coin5当中对金币的属性等逻辑进行了编写。
using UnityEngine;
public class Coin5 : MonoBehaviour
{
private Transform coinRootTranform;
/// <summary>
/// 金币的结束位置
/// </summary>
private Transform end;
/// <summary>
/// 金币的移动速度
/// </summary>
private float moveSpeed = 0.05f;
void Awake()
{
coinRootTranform = transform;
end = GameObject.Find("GroundEndPos").transform;
}
public void SetPos(Vector3 startPos)
{
float yPosOffset = 5 + Random.Range(3, 20) * 0.1f; //随机高度偏移
coinRootTranform.position = startPos + new Vector3(0, yPosOffset, 0);
}
void Update()
{
if (GameState.Playing != GameMgr.instance.state) return;
if (coinRootTranform.position.x > end.position.x)
{
coinRootTranform.position -= new Vector3(moveSpeed, 0, 0);//往左移动
}
else
{
// 金币超过End坐标点,销毁
Destroy(gameObject);
}
}
}
三、金币的创建
在CoinCreater脚本中实现了金币在游戏中的创建和排列。
using UnityEngine;
public class Coin5 : MonoBehaviour
{
private Transform coinRootTranform;
/// <summary>
/// 金币的结束位置
/// </summary>
private Transform end;
/// <summary>
/// 金币的移动速度
/// </summary>
private float moveSpeed = 0.05f;
void Awake()
{
coinRootTranform = transform;
end = GameObject.Find("GroundEndPos").transform;
}
public void SetPos(Vector3 startPos)
{
float yPosOffset = 5 + Random.Range(3, 20) * 0.1f; //随机高度偏移
coinRootTranform.position = startPos + new Vector3(0, yPosOffset, 0);
}
void Update()
{
if (GameState.Playing != GameMgr.instance.state) return;
if (coinRootTranform.position.x > end.position.x)
{
coinRootTranform.position -= new Vector3(moveSpeed, 0, 0);//往左移动
}
else
{
// 金币超过End坐标点,销毁
Destroy(gameObject);
}
}
}
四、金币UI
同时,我在游戏中添加了显示金币数的UI。
主要是通过脚本GameMainPanel进行管理和实现。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameMainPanel : MonoBehaviour
{
/// <summary>
/// 跳跃按钮
/// </summary>
public Button jumpBtn;
/// <summary>
/// 金币文本
/// </summary>
public Text coinLbl;
private void Awake()
{
EventDispatcher.instance.Regist(EventNameDef.EVENT_ADD_COIN, OnEventAddCoin);
jumpBtn.onClick.AddListener(() =>
{
// 抛出事件
EventDispatcher.instance.DispatchEvent(EventNameDef.EVENT_JUMP);
});
}
private void OnDestroy()
{
EventDispatcher.instance.UnRegist(EventNameDef.EVENT_ADD_COIN, OnEventAddCoin);
}
/// <summary>
/// 加金币事件,同步数值到UI
/// </summary>
/// <param name="args"></param>
private void OnEventAddCoin(params object[] args)
{
coinLbl.text = ((int)args[0]).ToString();
}
}