经典游戏案例:unity官方推荐3d跑酷

2024-06-19 15:52

本文主要是介绍经典游戏案例: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 startprotected 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();
}

下载链接:https://gitee.com/unity_demo/carzy-dash

这篇关于经典游戏案例:unity官方推荐3d跑酷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075468

相关文章

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员