Unity官方推荐3D跑酷游戏案例解析
创作时间:
作者:
@小白创作中心
Unity官方推荐3D跑酷游戏案例解析
引用
CSDN
1.
https://blog.csdn.net/rexuefengye/article/details/139785920
本文介绍了一个Unity官方推荐的3D跑酷游戏案例,通过展示游戏画面、项目结构和核心代码,帮助开发者理解游戏开发流程和实现细节。
游戏画面
项目结构目录
核心代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 游戏管理器是一个状态机,根据当前的游戏状态,它将在状态之间切换。
/// </summary>
public class GameManager : MonoBehaviour
{
/// <summary>
/// 单例模式
/// </summary>
public static GameManager instance { get { return s_Instance; } }
protected static GameManager s_Instance;
public AState[] states;
//返回栈顶的游戏状态
public AState topState { get { if (m_StateStack.Count == 0) return null; return m_StateStack[m_StateStack.Count - 1]; } }
//消耗品数据库
public ConsumableDatabase m_consumableDatabase;
//游戏状态栈
protected List<AState> m_StateStack = new List<AState>();
//游戏状态字典
protected Dictionary<string, AState> m_StateDict = new Dictionary<string, AState>();
//函数执行顺序:awake onenable start
protected void OnEnable()
{
PlayerData.Create();
s_Instance = this;
m_consumableDatabase.Load();
m_StateDict.Clear();
if (states.Length == 0)
{
return;
}
//初始化游戏状态字典
for (int i = 0; i < states.Length; ++i)
{
states[i].manager = this;
m_StateDict.Add(states[i].GetName(), states[i]);
}
m_StateStack.Clear();
PushState(states[0].GetName());
}
protected void Update()
{
if (m_StateStack.Count > 0)
{
m_StateStack[m_StateStack.Count - 1].Tick();
}
}
#region 游戏状态管理
/// <summary>
/// 游戏状态间的切换
/// </summary>
/// <param name="newState"></param>
public void SwitchState(string newState)
{
AState state = FindState(newState);
if(state == null)
{
Debug.LogError("Can't find the state named " + newState);
return;
}
m_StateStack[m_StateStack.Count - 1].Exit(state);
state.Enter(m_StateStack[m_StateStack.Count - 1]);
m_StateStack.RemoveAt(m_StateStack.Count - 1);
m_StateStack.Add(state);
}
/// <summary>
/// 返回上一步游戏状态,并移除栈顶游戏状态
/// </summary>
public void PopState()
{
if (m_StateStack.Count < 2)
{
Debug.LogError("Can't pop states, only one in stack.");
return;
}
m_StateStack[m_StateStack.Count - 1].Exit(m_StateStack[m_StateStack.Count - 2]);
m_StateStack[m_StateStack.Count - 2].Enter(m_StateStack[m_StateStack.Count - 2]);
m_StateStack.RemoveAt(m_StateStack.Count - 1);
}
/// <summary>
/// 进入新的游戏状态,并将其入栈
/// </summary>
/// <param name="name"></param>
public void PushState(string name)
{
AState state;
if(!m_StateDict.TryGetValue(name,out state))
{
Debug.LogError("Can't find the state named " + name);
return;
}
if (m_StateStack.Count > 0)
{
m_StateStack[m_StateStack.Count - 1].Exit(state);
state.Enter(m_StateStack[m_StateStack.Count - 1]);
}
else
{
state.Enter(null);
}
m_StateStack.Add(state);
}
/// <summary>
/// 在字典中查找游戏状态
/// </summary>
/// <param name="statename"></param>
/// <returns></returns>
public AState FindState(string statename)
{
AState state;
if (!m_StateDict.TryGetValue(statename, out state)){
return null;
}
else
{
return state;
}
}
#endregion
}
/// <summary>
/// 游戏状态,用栈结构来存放
/// </summary>
public abstract class AState:MonoBehaviour
{
[HideInInspector]
public GameManager manager;
/// <summary>
/// 进入目标游戏状态前要执行的操作
/// </summary>
/// <param name="from">从哪个状态进入</param>
public abstract void Enter(AState from);
/// <summary>
/// 离开目标游戏状态后要执行的操作
/// </summary>
/// <param name="to"></param>
public abstract void Exit(AState to);
/// <summary>
/// 在目标游戏状态中要执行的操作
/// </summary>
public abstract void Tick();
/// <summary>
/// 获取游戏状态名(返回字符串)
/// </summary>
/// <returns></returns>
public abstract string GetName();
}
下载链接
热门推荐
竞合战略:企业博弈新姿势
烤瓷牙口臭像臭水沟味?原因及有效处理方法大揭秘!
从华佗到现代医学:金钱草治疗结石的古今传承
秋冬养生神器:金钱草茶清热解毒
金钱草:中医里的“小神药”
春日赏花攻略:扬州、昆明、武汉三大城市最佳打卡地
春季旅游摄影打卡攻略:拍出朋友圈大片!
无锡经济大突破!能否超越南京,成为长三角新引擎?
掉发严重怎么办?饮食、按摩等5大方法!成功找回丰盈秀发
南越国木构水闸遗址:千年文物与闹市商场如何从“共生”到“共赢”?
如何在冷暴力下保持心理健康?
当爱变成冷暴力:如何应对夫妻间的隐形伤害?
女朋友冷暴力?这招让她瞬间融化!
当爱变成“冷暴力”:如何拯救你的感情?
冷暴力:最隐蔽的情感伤害
靠着"抠门"日常,黑马情侣掘金互联网
甜蜜回忆!手把手教你制作麦芽糖,重温童年时光的美好味道!
甜蜜回忆!手把手教你制作麦芽糖,重温童年时光的美好味道!
春季养肝正当时:4道家常菜助力肝脏健康
职场人必修课:从“完璧归赵”中学蔺相如的智慧与勇气
完璧归赵:蔺相如的智勇传奇
隔膜压力表拆卸:适用于所有型号的详细步骤
雪地自驾|遇到暴风雪怎么办?那些雪驾攻略没教你的事
诺贝尔奖得主揭秘:博弈论如何改变经济学?
双十一囤货清单:金钱草粉的养生新宠
成都数据公园:数字经济新高地
成渝经济圈:数字经济驱动西部崛起新引擎
蜜蜂为仙人掌授粉的秘密武器
冬季养生茶饮和食材推荐
沙漠中的生命绿洲:仙人掌的生态智慧