【UnityRPG游戏制作】RPG项目的背包系统商城系统和BOSS大界面

news2024/11/19 23:15:49

在这里插入图片描述


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

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

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity基础实战

🅰️



文章目录

    • 🅰️
    • 前言
    • (==1==)商城系统
    • (==2==)背包系统
    • (==3==)BOSS系统


前言


1商城系统


请添加图片描述

  • 商品逻辑
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using static UnityEditor.Progress;

//------------------------------
//-------功能:   商城物品按钮
//-------创建者:         
//------------------------------

public class ShopItem : MonoBehaviour
{
    public Button item;    //商品按钮
    public Text   price;
    public int    priceVaule; //商品价格
    public GridLayoutGroup backPack; //购买栏
    public int allDamon; 
    private Vector3 off =  new Vector3(1.8f,1,1); //设定物品框的大小
    Button btu;
    private void Start()
    {
        item = GetComponent<Button>();
        //将价格进行转换
        priceVaule = Convert.ToInt32(price.text);
        item.onClick.AddListener(()=> //按钮点击事件的添加
        {
            Debug.Log("现在的水晶为:"+PlayerContorller.GetInstance().damonNum);
            Debug.Log("当前的价格为:"+ priceVaule);

            //如果钱够了
            if ( priceVaule <= PlayerContorller.GetInstance().damonNum) 
            {
                btu = Instantiate(item); //实例化按钮
                //减少钻石的数量                  
                Destroy(btu.GetComponent<ShopItem>());   //移除该商品的脚本
                PlayerContorller.GetInstance().ReduceDamon(priceVaule, Instantiate(btu));
                btu.transform.SetParent(backPack.transform); //移动到购买栏下方
                btu.transform.localScale = off;//初始化大小
            }
            else
            {
                GameFacade.Instance.SendNotification(PureNotification.SHOW_PANEL,"TipPanel");
            }
        });


    }

    private void Update()
    {
        if (backPack != null)
        { 
        }
    }
}

  • 面板逻辑
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能: 商城系统
//-------创建者:         -------
//------------------------------

public class StoreView : BasePanel
{
    public GridLayoutGroup StoreGrid;
    public GridLayoutGroup BackGrid;
    public Button backBtu;
    public Button bugPack;//放入背包

}

  • 面板视图中介(PureMVC)
using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能:          -------
//-------创建者:         -------
//------------------------------

public class StoreViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "StoreViewMediator";
    /// <summary>
    /// 构造函数
    /// </summary>
    public StoreViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听感兴趣的通知的方法
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {

        };
    }

    /// <summary>
    /// 面板中组件设置(监听相关)
    /// </summary>
    /// <param name="stateView"></param>
    public void setView(StoreView storeView)
    {
        ViewComponent = storeView;
        if(ViewComponent == null) { Debug.Log("面板是空的"); }
        storeView.backBtu .onClick.AddListener(()=>
        {
            SendNotification(PureNotification.HIDE_PANEL, "StorePanel");
        });

        storeView.bugPack.onClick.AddListener(() =>
        {
          
        });
        
    }

    /// <summary>
    /// 玩家受伤逻辑
    /// </summary>
    public void Hurt()
    {

    }

    /// <summary>
    /// 重写处理通知的方法,处理通知,前提是完成通知的监听
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {

        }
    }
}


2背包系统


请添加图片描述

  • 背包系统视图
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能: 背包系统视图
//-------创建者:         
//------------------------------

public class BackpackView : BasePanel
{
    public Button back; //退出按钮
    public GridLayoutGroup grid; 
                                 

    /// <summary>
    /// 更新背包中的内容
    /// </summary>
    /// <param name="itemBtu"></param>
    public void AddItem(Button itemBtu)
    {
        //将传入的按钮设置为布局下面的子物体
        itemBtu.transform.SetParent (grid.gameObject.transform );
        itemBtu.transform.localScale = Vector3.one ;//初始化商品道具大小

    }

}

+ 背包系统视图中介

```csharp
using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能:  背包面板视图中介
//-------创建者:      
//------------------------------


/// <summary>
/// 状态面板视图中介
/// 固定:
/// 1.继承PureMVC的Mediator脚本
/// 2.写构造函数
/// 3.重写监听通知的方法
/// 4.重写处理通知的方法
/// 5.可选:重写注册时的方法
/// </summary>
public class BackpackViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "BackpackViewMediator";

    /// <summary>
    /// 构造函数
    /// </summary>
    public BackpackViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听通知的方法,返回需要的监听(通知)
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {
         PureNotification.UPDATA_BACKPACK
         //PureNotification.UPDATA_STATE_INFO
        };
    }

    public void SetView(BackpackView backpackView)
    {
        Debug.Log(backpackView + "执行SetView");
        ViewComponent = backpackView;
        //开始按钮逻辑监听
        backpackView.back.onClick.AddListener(() =>
        {
            SendNotification(PureNotification.HIDE_PANEL, "BackpackPanel");
        });

    }

    /// <summary>
    /// 重写处理通知的方法,处理通知
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {
               case PureNotification.UPDATA_BACKPACK:
                Debug.Log("/执行视图中的放入背包的方法");
                //执行视图中的放入背包的方法
                (ViewComponent as BackpackView).AddItem(notification.Body as Button);
               break;
        }
    }
}

  • 购买后的商品逻辑
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using static UnityEditor.Progress;

//------------------------------
//-------功能:   商城物品按钮
//-------创建者:         
//------------------------------

public class ShopItem : MonoBehaviour
{
    public Button item;    //商品按钮
    public Text   price;
    public int    priceVaule; //商品价格
    public GridLayoutGroup backPack; //购买栏
    public int allDamon; 
    private Vector3 off =  new Vector3(1.8f,1,1); //设定物品框的大小
    Button btu;
    private void Start()
    {
        item = GetComponent<Button>();
        //将价格进行转换
        priceVaule = Convert.ToInt32(price.text);
        item.onClick.AddListener(()=> //按钮点击事件的添加
        {
            Debug.Log("现在的水晶为:"+PlayerContorller.GetInstance().damonNum);
            Debug.Log("当前的价格为:"+ priceVaule);

            //如果钱够了
            if ( priceVaule <= PlayerContorller.GetInstance().damonNum) 
            {
                btu = Instantiate(item); //实例化按钮
                //减少钻石的数量                  
                Destroy(btu.GetComponent<ShopItem>());   //移除该商品的脚本
                PlayerContorller.GetInstance().ReduceDamon(priceVaule, Instantiate(btu));
                btu.transform.SetParent(backPack.transform); //移动到购买栏下方
                btu.transform.localScale = off;//初始化大小
            }
            else
            {
                GameFacade.Instance.SendNotification(PureNotification.SHOW_PANEL,"TipPanel");
            }
        });

    }

    private void Update()
    {
        if (backPack != null)
        { 
        }
    }
}


3BOSS系统


请添加图片描述

请添加图片描述

  • 场景加载
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

//-------------------------------
//-------功能: Boss房间钥匙逻辑
//-------创建者:         -------
//------------------------------

public class Key : MonoBehaviour
{
    private void OnTriggerStay(Collider other)
    {
        if (other.gameObject .tag == "Player"&& Input.GetKeyDown(KeyCode.F))
        {
            SceneManager.LoadScene(1);
        }
    }
}


  • boss攻击
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SocialPlatforms;
using UnityEngine.UI;

//-------------------------------
//-------功能: boss控制器
//-------创建者:         -------
//------------------------------

public class BossController : MonoBehaviour
{
    public GameObject player;   //对标玩家
    public Animator animator;   //对标动画机
    public float hp = 300f;     //血量
    public Image hpSlider;      //血条
    private int attack = 30;    //敌人的攻击力
    public float CD_skill;      //技能冷却时间

    private void Start()
    {    
        animator = GetComponent<Animator>();
        hpSlider = transform.GetChild(0).GetChild(0).GetComponent<Image>();
    }

    private void Update()
    {
        CD_skill += Time.deltaTime; //CD一直在累加
    }

    //碰撞检测
    private void OnCollisionStay(Collision collision)
    {
        if (collision.gameObject.tag == "Player") //检测到如果是玩家的标签
        {
       
            Debug.Log("接触到玩家");
            if (CD_skill > 3.5f)  //攻击动画的冷却时间
            {
                //触发攻击事件
                animator.SetBool("attack", true); //攻击动画激活 
                EventCenter.GetInstance().EventTrigger(PureNotification.PLAYER_INJURY); //激活玩家受伤事件                    
                                                                                        //延迟播放动画s
                GameFacade.Instance.SendNotification(PureNotification.HURT_UP, attack);  //发送玩家受伤扣血的通知
                StartCoroutine("delay", collision.gameObject.transform );
                CD_skill = 0; //冷却时间归0    
            }
          
        }
    }

    IEnumerator delay(Transform  transform)  //协程迭代器的定义
    {
        //暂停几秒(协程挂起)
        yield return new WaitForSeconds(0.5f);
        //暂停两秒后再显示文字   
        //DOtween
        transform.DOMoveZ(transform.localPosition.z - 3, 1); //被撞击Z轴后移
       
     
    }

    //退出 碰撞检测
    private void OnCollisionExit(Collision collision)
    {
        //
        if (collision.gameObject.tag == "Player") //检测到如果是玩家的标签
        {
            Debug.Log("玩家退出");
            animator.SetBool("attack", false);
            PlayerContorller.GetInstance().animator.SetBool("hurt", false);

        }
    }



    //范围触发检测
    private void OnTriggerStay(Collider other)
    {
        if (other.tag == "Player")  //检测到如果是玩家的标签
        {
           
            //让怪物看向玩家
            transform.LookAt(other.gameObject.transform.position);
            animator.SetBool("walk", true);
            //并且向其移动
            transform.Translate(Vector3.forward * 1 * Time.deltaTime);

        }
    }

}







 ⭐<font color=red >🅰️</font>⭐
-

---


⭐[【Unityc#专题篇】之c#进阶篇】](http://t.csdn.cn/wCAYg)

⭐[【Unityc#专题篇】之c#核心篇】](http://t.csdn.cn/wCAYg)

⭐[【Unityc#专题篇】之c#基础篇】](http://t.csdn.cn/4NW3P)


⭐[【Unity-c#专题篇】之c#入门篇】](http://t.csdn.cn/5sJaB)

**⭐**[【Unityc#专题篇】—进阶章题单实践练习](http://t.csdn.cn/ue4Oh)

⭐[【Unityc#专题篇】—基础章题单实践练习](http://t.csdn.cn/czWon)

**⭐**[【Unityc#专题篇】—核心章题单实践练习](http://t.csdn.cn/wCAYg)


   ---

<font color= red face="仿宋" size=3>**你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!**、

---
![在这里插入图片描述](https://img-blog.csdnimg.cn/430fd5b6362d48c281827ddc6a56789d.gif)


---


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1629232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【06】JAVASE-数组讲解【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture&#xff1a;波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。…

华为MRS服务使用记录

背景&#xff1a;公司的业务需求是使用华为的这一套成品来进行开发&#xff0c;使用中发现&#xff0c;这个产品跟原生的Hadoop的那一套的使用&#xff0c;还是有很大的区别的&#xff0c;现记录一下&#xff0c;避免以后忘了 一、原始代码的下载 下载地址&#xff1a;MRS样例…

使用Umbrello学习工厂模式

工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口&#xff0c; 或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时&#xff0c;仅仅需要添加一个具体对象以及一个具体工厂对 象&#xff0c;原有工厂对象不需要进行任何修改&#xff0c;也不…

Go语言中有哪些常见的编码规范和最佳实践?

文章目录 一、命名规范1. 包名2. 变量名3. 函数名原因 二、代码格式1. 花括号位置2. 缩进3. 空格示例代码原因 三、错误处理1. 检查错误2. 错误值3. 多重错误处理示例代码原因 四、注释1. 注释内容2. 注释位置3. 避免冗余注释示例代码原因 五、总结 在Go语言编程中&#xff0c;…

数据结构––复杂度

目录 一.时间复杂度 1.1定义 1.2时间复杂度的分类 1.3时间复杂度基本计算规则 1.4例子 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.4.10 1.4.11 1.4.12 1.4.13 二.空间复杂度 2.1定义 2.2推导大O阶方法 一.时间复杂度 1.1定义 算法的时间…

面试算法题精讲:最长公共子序列

面试算法题精讲&#xff1a;最长公共子序列 题面 题目来源&#xff1a;1143. 最长公共子序列 题目描述&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列&#xff08;LCS&#xff09;的长度。如果不存在公共子序列 &#xff0c;返回…

浅谈大数据时代下的电商风控||电商数据API接口

抢抢抢&#xff01;最后1天&#xff0c;双十一直播活动来啦&#xff01;抢直播专属优惠…… 视频号 随着大数据时代的兴起&#xff0c;互联网电商风控已经从无风控、人工抽取规则为主的简易规则模型发展到当前基于大数据的风控。与金融风控不同&#xff0c;互联网电商风控呈现出…

vue3 ——笔记 (条件渲染,列表渲染,事件处理)

条件渲染 v-if v-if 指令用于条件性地渲染一块内容&#xff0c;只有v-if的表达式返回值为真才会渲染 v-else v-else 为 v-if 添加一个 else 区块 v-else 必须在v-if或v-else-if后 v-else-if v-else-if 是v-if 的区块 可以连续多次重复使用 v-show 按条件显示元素 v-sh…

[Java]线程生命周期与线程通信

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/138101131 出自【进步*于辰的博客】 线程生命周期与进程有诸多相似&#xff0c;所以我们很容易将…

【Vue】可拖拽排序表格组件的实现与数据保存

1、描述 使用el-table-draggable组件来创建一个可拖拽的表格。 表格中的数据存储在tableData数组中&#xff0c;每个对象都有sortOrder、id、name和age属性。 当用户拖拽表格行并释放时&#xff0c;handleRowOnEnd方法会被调用&#xff0c; 更新tableData中每个对象的sortO…

super与this

目录 原型链与继承继承中的原型链 classsuper与this 我们可能会对一个问题感到好奇&#xff1a;为什么在派生类中&#xff0c;我们需要在调用this之前调用super。我们通常将其视为一种规范&#xff0c;却很少深入探究这个规范的真正意义。许多人认为super不过是ES6之前继承方式…

vercel.app 部署的服务国内无法最优解决方案

今天在部署 waline 评论系统时&#xff0c;发现国内 IP 无法访问&#xff0c;这将导致评论系统无法使用&#xff0c;由于我的站点是技术站点需要和用户评论沟通&#xff0c;但是如果评论无法使用的话就会导致流失更多的用户&#xff0c;通过自己实际测试后发现一个最优的解决方…

【IR 论文】DPR — 最早提出使用嵌入向量来检索文档的模型

论文&#xff1a;Dense Passage Retrieval for Open-Domain Question Answering ⭐⭐⭐⭐⭐ EMNLP 2020, Facebook Research Code: github.com/facebookresearch/DPR 文章目录 一、论文速读二、DPR 的训练2.1 正样本和负样本的选取2.2 In-batch negatives 技巧 三、实验3.1 数据…

编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 编写…

长度最小的子数组 ---- 滑动窗口

题目链接 题目: 分析: 解法一:暴力解法, 找到所有连续子数组, 保留满足条件的解法二: 利用滑动窗口 找子数组 因为数组中都是正整数, 通过进窗口的操作, 我们找到一组, 如示例一中的2,3,1,2, 判断满足和>7, 那么根据单调性, 我们就不再需要判断加上后面两个数的两个子数组…

在 GitHub 中掌握键盘快捷键的简短指南

你是否知道 GitHub 几乎每页都有键盘快捷键&#xff1f;这篇文章将带你探索 GitHub 的键盘快捷键世界&#xff0c;以及它们如何帮助你快速导航和执行操作。 读完这篇&#xff0c;你将能够&#xff1a; 掌握快捷键&#xff1a;想知道如何访问这些快捷键&#xff1f;在任何 Git…

记录浏览器打开网站拦截提示不安全解决方法

浏览器可能会因为多种原因显示“不安全”的警告,这通常是由于安全设置不当或配置错误造成的。以下是一些常见的原因和解决方法: 1. HTTPS未启用 原因:如果网站使用HTTP而不是HTTPS,浏览器可能会显示不安全的警告。 解决方法:配置SSL/TLS证书并使用HTTPS来加密数据传输…

64、二分-搜索二维矩阵

思路&#xff1a; 通过使用二分方式&#xff0c;对于每行进行二分&#xff0c;因为每行的最后一个数小于下一行的第一个数&#xff0c;我们就可以依次二分。首先取出行数N&#xff0c;然后从0-N进行二分&#xff0c;如果mid最后一个数小于目标值说明0-mid中没有&#xff0c;舍弃…

开源博客项目Blog .NET Core源码学习(19:App.Hosting项目结构分析-7)

本文学习并分析App.Hosting项目中后台管理页面的主页面。如下图所示&#xff0c;开源博客项目的后台主页面采用layui预设类layui-icon-shrink-right设置样式&#xff0c;点击主页面中的菜单&#xff0c;其它页面采用弹框或者子页面形式显示在主页面的内容区域。   后台主页面…

Qt设置可执行程序图标,并打包发布

一、设置图标 图标png转ico: https://www.toolhelper.cn/Image/ImageToIco设置可执行程序图标 修改可执行程序图标 添加一个rc文件,操作如下,记得后缀改为rc 打开logo.rc文件添加代码IDI_ICON1 ICON DISCARDABLE "logo.ico"在项目pro后缀名的文件中添加代码 RC_…