【UnityRPG游戏制作】Unity_RPG项目_玩法相关

2024-05-05 22:44

本文主要是介绍【UnityRPG游戏制作】Unity_RPG项目_玩法相关,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创
👨‍💻 收录于专栏:就业宝典

🅰️推荐专栏

⭐-软件设计师高频考点大全



文章目录

    • 前言
    • 🎶(==四==) 玩法相关
    • (==1==) 面板显隐命令
    • (==2==) 玩家升级命令
    • (==3==) 玩家受伤命令
    • (==4==) 经验升级命令
    • (==5==) 武器和伤害命令
    • 🅰️


前言

请添加图片描述


🎶( 玩法相关


在这里插入图片描述


1 面板显隐命令


using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能:  面板隐藏命令
//-------创建者:         
//------------------------------public class HidePanelCommand : SimpleCommand
{public override void Execute(INotification notification){base.Execute(notification);Debug.Log("隐藏面板的命令开始执行");string panelName = notification.Body.ToString();//Debug.Log(panelName);SelectPanel(panelName);}/// <summary>/// 封装选择需要执行的面板/// </summary>/// <param name="panelName"></param>private void SelectPanel(string panelName){//面板命令的选择switch (panelName){case "BackpackPanel":Debug.Log("命令为BackpackPanel");if (!Facade.HasMediator(BackpackViewMediator.NAME))  //首先判断是否有该中介,没有就new一个{Facade.RegisterMediator(new BackpackViewMediator()); //注册该视图中介}//获取视图对应的中介BackpackViewMediator bm = Facade.RetrieveMediator(BackpackViewMediator.NAME) as BackpackViewMediator;if (bm.ViewComponent != null) //当对应的视图中介有关联界面面板时 {//通过UI管理器隐藏面板UIManager.GetInstance().HidePanel("BackpackPanel");}break;case "DefeatPanel":Debug.Log("命令为DefeatPanel");if (!Facade.HasMediator(DefeatViewMediator.NAME))  //首先判断是否有该中介,没有就new一个{Facade.RegisterMediator(new DefeatViewMediator()); //注册该视图中介}//获取视图对应的中介DefeatViewMediator dm = Facade.RetrieveMediator(DefeatViewMediator.NAME) as DefeatViewMediator;if (dm.ViewComponent != null) //当对应的视图中介有关联界面面板时 {          //通过UI管理器隐藏面板UIManager.GetInstance().HidePanel("DefeatPanel");          }break;case "GamePanel":Debug.Log("GamePanel");if (!Facade.HasMediator(GameViewMediator.NAME))  //首先判断是否有该中介,没有就new一个{Facade.RegisterMediator(new GameViewMediator()); //注册该视图中介}//获取视图对应的中介GameViewMediator gm = Facade.RetrieveMediator(GameViewMediator.NAME) as GameViewMediator;if (gm.ViewComponent != null) //当对应的视图中介有关联界面面板时 {//通过UI管理器隐藏面板UIManager.GetInstance().HidePanel("GamePanel");}break;case "NPCTipPanel":Debug.Log("NPCTipPanel");if (!Facade.HasMediator(NPCTipViewMediator.NAME))  //首先判断是否有该中介,没有就new一个{Facade.RegisterMediator(new NPCTipViewMediator()); //注册该视图中介}//获取视图对应的中介NPCTipViewMediator nm = Facade.RetrieveMediator(NPCTipViewMediator.NAME) as NPCTipViewMediator;if (nm.ViewComponent != null) //当对应的视图中介有关联界面面板时 {//通过UI管理器隐藏面板UIManager.GetInstance().HidePanel("NPCTipPanel");}break;case "RolePanel":Debug.Log("命令为RolePanel");if (!Facade.HasMediator(RoleViewMediator.NAME))  //首先判断是否有该中介,没有就new一个{Facade.RegisterMediator(new RoleViewMediator()); //注册该视图中介}//获取视图对应的中介RoleViewMediator rm = Facade.RetrieveMediator(RoleViewMediator.NAME) as RoleViewMediator;if (rm.ViewComponent != null) //当对应的视图中介有关联界面面板时 {//通过UI管理器隐藏面板UIManager.GetInstance().HidePanel("RolePanel");}break;case "StartPanel":Debug.Log("StartPanel");if (!Facade.HasMediator(StartViewMediator.NAME))  //首先判断是否有该中介,没有就new一个{Facade.RegisterMediator(new StartViewMediator()); //注册该视图中介}//获取视图对应的中介StartViewMediator sm = Facade.RetrieveMediator(StartViewMediator.NAME) as StartViewMediator;if (sm.ViewComponent != null) //当对应的视图中介有关联界面面板时 {//通过UI管理器隐藏面板UIManager.GetInstance().HidePanel("StartPanel");}break;case "StartTipPanel":Debug.Log("StartTipPanel");if (!Facade.HasMediator(StartTipViewMediator.NAME))  //首先判断是否有该中介,没有就new一个{Facade.RegisterMediator(new StartTipViewMediator()); //注册该视图中介}//获取视图对应的中介StartTipViewMediator stm = Facade.RetrieveMediator(StartTipViewMediator.NAME) as StartTipViewMediator;if (stm.ViewComponent != null) //当对应的视图中介有关联界面面板时 {//通过UI管理器隐藏面板UIManager.GetInstance().HidePanel("StartTipPanel");}break;case "StatePanel":Debug.Log("命令为StatePanel");if (!Facade.HasMediator(StateViewMediator.NAME))  //首先判断是否有该中介,没有就new一个{Facade.RegisterMediator(new StateViewMediator()); //注册该视图中介}//获取视图对应的中介StateViewMediator mm = Facade.RetrieveMediator(StateViewMediator.NAME) as StateViewMediator;if (mm.ViewComponent != null) //当对应的视图中介有关联界面面板时 {//通过UI管理器隐藏面板UIManager.GetInstance().HidePanel("StatePanel");}break;}}
}

2 玩家升级命令


请添加图片描述

using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能:  玩家升级通知
//-------创建者:         
//------------------------------public class LevelUpCommand : SimpleCommand
{public override void Execute(INotification notification){base.Execute(notification);PlayerProxy playerProxy =  Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy ;if (playerProxy != null){playerProxy.LevUp (); //自己将数据升级playerProxy.SavaUp(); //数据保存SendNotification(PureNotification.UPDATA_ROLE_INFO, playerProxy.Data as PlayerDataObj) ; //发送角色信息更新通知}}
}

3 玩家受伤命令


  • 血条减少,玩家数据更新
  • 观察者模式
    请添加图片描述

请添加图片描述

using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能: 受伤命令
//-------创建者:         -------
//------------------------------public class HurtCommand : SimpleCommand
{public override void Execute(INotification notification){base.Execute(notification);Debug.Log("玩家受伤的命令开始执行");PlayerProxy playerProxy = Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy;if (playerProxy != null){playerProxy.LevUp(); //自己将数据升级playerProxy.SavaUp(); //数据保存SendNotification(PureNotification.UPDATA_ROLE_INFO, playerProxy.Data as PlayerDataObj); //发送角色信息更新通知SendNotification(PureNotification.PLAYER_INJURY, notification.Body);}}
}
using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能:  角色面板视图中介
//-------创建者:         -------
//------------------------------/// <summary>
/// 角色面板视图中介
/// 固定:
/// 1.继承PureMVC的Mediator脚本
/// 2.写构造函数
/// 3.重写监听通知的方法
/// 4.重写处理通知的方法
/// 5.可选:重写注册时的方法
/// </summary>
public class RoleViewMediator : Mediator
{//铭牌名public static string NAME = "RoleViewMediator";/// <summary>/// 构造函数/// </summary>public RoleViewMediator( ) : base(NAME){//可以去写创捷面板预设体的逻辑等}/// <summary>/// 重写监听通知的方法,返回需要的监听(通知)/// </summary>/// <returns>返回你需要监听的通知的名字数组</returns>public  override string[] ListNotificationInterests(){return new string[] { PureNotification.UPDATA_ROLE_INFO};}public void SetView(RoleView roleView){Debug.Log(roleView + "执行SetView");ViewComponent = roleView;//开始按钮逻辑监听roleView.back.onClick.AddListener(() =>{SendNotification(PureNotification.HIDE_PANEL, "RolePanel");});}/// <summary>/// 重写处理通知的方法,处理通知/// </summary>/// <param name="notification">通知</param>public override void HandleNotification(INotification notification){switch (notification.Name){case  PureNotification.UPDATA_ROLE_INFO:if (ViewComponent != null)          (ViewComponent as RoleView).UpdateView(notification.Body as PlayerDataObj);else   {Debug.Log("为空");  }break;}}/// <summary>/// 可选:重写注册方法(他们需要到Facde中注册)/// </summary>public override void OnRegister(){base.OnRegister();}}

4 经验升级命令


using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能:  經驗更新命令-------
//-------创建者:         -------
//------------------------------public class EXPUpCommand : SimpleCommand
{public override void Execute(INotification notification){base.Execute(notification);SendNotification(PureNotification.UPDATA_EXP ,notification .Body);  //发送更新经验血条的通知}
}
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能:玩家升级通知
//-------创建者:         
//------------------------------public class LevelUpCommand : SimpleCommand
{public override void Execute(INotification notification){base.Execute(notification);PlayerProxy playerProxy =  Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy ;if (playerProxy != null){playerProxy.LevUp (); //自己将数据升级playerProxy.SavaUp(); //数据保存SendNotification(PureNotification.UPDATA_ROLE_INFO, playerProxy.Data as PlayerDataObj) ; //发送角色信息更新通知}     }
}

5 武器和伤害命令


using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能:更换武器图标的命令
//-------创建者:         -------
//------------------------------public class WeaponUpCommand : SimpleCommand
{public override void Execute(INotification notification){base.Execute(notification);//先将玩家数据中更新武器信息PlayerDataObj playerProxy = Facade.RetrieveProxy(PlayerProxy.NAME).Data  as PlayerDataObj ;playerProxy.nowItem = notification.Body as Sprite;//playerProxy.item[playerProxy.index] = notification.Body as Sprite;//到时打开role面板时会自动更新数据//  (playerProxy.Data as PlayerDataObj).nowItem = notification.Body as Sprite;//而后发送武器更新的通知——目的是更新State面板中的武器信息SendNotification(PureNotification.UPDATA_WEAPON_INFO2, notification.Body );}
}
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------
//-------功能: 受伤命令
//-------创建者:         -------
//------------------------------public class HurtCommand : SimpleCommand
{public override void Execute(INotification notification){base.Execute(notification);Debug.Log("玩家受伤的命令开始执行");PlayerProxy playerProxy = Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy;if (playerProxy != null){//playerProxy.LevUp(); //自己将数据升级// playerProxy.SavaUp(); //数据保存SendNotification(PureNotification.UPDATA_ROLE_INFO, playerProxy.Data as PlayerDataObj); //发送角色信息更新通知SendNotification(PureNotification.PLAYER_INJURY, notification.Body);}}
}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


这篇关于【UnityRPG游戏制作】Unity_RPG项目_玩法相关的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

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

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

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

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

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

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal