《黑暗之光》RPG游戏案例学习(8)——第四章 游戏任务系统

游戏任务系统

  • 任务界面
  • 任务的接受与完成
    • (1)点击NPC时,出现任务描述
    • (2)接受任务后,出现任务提示
    • (3)完成任务后,提交获取奖励
  • 其他设计
    • 添加按钮音效
    • 鼠标指针管理系统

参考: RPG游戏《黑暗之光》流程介绍与代码分析之(四):任务系统的实现.

任务界面

任务NPC模型的导入、任务UI界面的设计

  1. 导入NPC模型,为NPC模型添加box collider.
  2. 设计任务对话框,主要使用UGUI来设计。
    将需要的图片改为图片精灵模式。添加图片,修改合适的图片大小(300*350)。
    在这里插入图片描述
  3. 设计任务的内容。
    添加任务内容文字,接受按钮和取消按钮。
    在这里插入图片描述
    解决点击UI是,角色模型移动的问题。(ugui 的防止射线穿透)
    修改ugui 的防止射线穿透代码,下面列出主要部分:
using UnityEngine.EventSystems;if (Input.GetMouseButtonDown(0)&& !EventSystem.current.IsPointerOverGameObject())

任务的接受与完成

(1)点击NPC时,出现任务描述

主要实现点击NPC时,出现任务描述;点击“x”按钮时,关闭任务描述2个功能。“x”按钮需要在on click内,添加代码的OnCloseButtonClick()。主要代码如下:

public class BarNPC : MonoBehaviour
{public GameObject quest;// Start is called before the first frame updatevoid Start(){quest.SetActive(false);}void OnMouseOver(){if (Input.GetMouseButton(0)){ShowQuest();}}void ShowQuest(){quest.SetActive(true);}void HideQuest(){quest.SetActive(false);}//x按钮public void OnCloseButtonClick(){HideQuest();}
}

(2)接受任务后,出现任务提示

分析功能:

  1. 点击accept按钮时,显示任务进度,并出现OK按钮用于在完成任务时提交任务。
  2. 点击cancel按钮时,关闭任务描述。
    实现功能:
    在任务界面添加OK按钮。在相应按钮添加相应的代码方法。
using UnityEngine;
using UnityEngine.UI;
public class BarNPC : MonoBehaviour
{public GameObject quest;public GameObject button_accept;public GameObject button_ok;public GameObject button_cancel;public GameObject text_des;//public bool isOnTask = false;    //是否处于任务状态的标志位public int killCount = 0;    //当前杀死的狼    public int wolfKilledAcquire = 10;    //需要杀死狼的个数void Start(){quest.SetActive(false);}void OnMouseOver(){if (Input.GetMouseButton(0)){if (isOnTask)//如果处在任务状态,即按下Accept,显示任务进度{ShowTaskProgress();}else{ShowTaskDes();}ShowQuest();}}void ShowQuest(){quest.SetActive(true);}void HideQuest(){quest.SetActive(false);}//任务描述void ShowTaskDes(){text_des.GetComponent<Text>().text = "任务:\n杀死" + wolfKilledAcquire + "只怪物\n\n奖励\n1000金币";button_ok.SetActive(false );button_accept.SetActive(true);button_cancel.SetActive(true);}//任务进度void ShowTaskProgress(){text_des.GetComponent<Text>().text = "任务:\n你已杀死了" + killCount + "/" + wolfKilledAcquire + "只怪物\n\n奖励\n1000金币";button_ok.SetActive(true);button_accept.SetActive(false);button_cancel.SetActive(false);}   //x按钮public void OnCloseButtonClick(){HideQuest();}//accept按钮public void OnAcceptButtonClick(){ShowTaskProgress();isOnTask = true;}//cancel按钮public void OnCancelButtonClick(){HideQuest();}//ok按钮public void OnOKButtonClick(){if (killCount >= 10) {//完成任务}else//没有完成任务{}}
}

(3)完成任务后,提交获取奖励

为角色添加layerStatus脚本。

public class PlayerStatus : MonoBehaviour
{public int grade = 1;public int hp = 100;public int mp = 100;public int coin = 200;//金币public void GetCoint(int count){coin += count;}
}

在BarNPC中调用这个函数

 private PlayerStatus status;void Start(){status= GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>();quest.SetActive(false);}

在OK的按钮功能中加入

public void OnOKButtonClick(){if (killCount >= wolfKilledAcquire) //完成任务{status.GetCoint(1000);killCount = 0;//进度归零ShowTaskDes();}else//没有完成任务{HideQuest();}}

其他设计

添加按钮音效

添加一个空物体,为空物体添加audio source。返回按钮,在on click内,添加该空物体,选择play()。

鼠标指针管理系统

创建一个空物体,添加CursorManager脚本。

public class CursorManager : MonoBehaviour
{public static CursorManager _instance;    public Texture2D cursor_normal;    //所有功能的鼠标指针外观public Texture2D cursor_npcTalk;public Texture2D cursor_attack;public Texture2D cursor_pick;public Texture2D cursor_lockTarget;public Vector2 hotspot = Vector2.zero;public CursorMode mode = CursorMode.Auto;void Start(){_instance = this;}public void SetNormalCursor()//正常指针{Cursor.SetCursor(cursor_normal, hotspot, mode);}public void SetNPCTalkCursor(){Cursor.SetCursor(cursor_npcTalk, hotspot, mode);}}

创建NPC脚本表示对所有NPC都适用的操作。

public class NPC : MonoBehaviour
{void OnMouseEnter()    {CursorManager._instance.SetNPCTalkCursor();}void OnMouseExit(){CursorManager._instance.SetNormalCursor();}}

barnpc脚本继承npc脚本。

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

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

相关文章

黑暗逃生服务器显示无,《黑暗逃生》常见问题解决方法 游戏进不去?

本款游戏被称作一款3D版的狼人杀游戏&#xff0c;最近有很多玩家开始游玩这个游戏了&#xff0c;但是相对的游戏时常会出现些小问题&#xff0c;接下来小编就给大家带来这篇黑暗逃生常见问题解决方法&#xff0c;不要错过哦。 常见问题解决教程 1、游戏无法运行&#xff1a;“-…

黑暗逃生服务器显示无,《黑暗逃生》常见问题 已知问题及解决方案

今天发号哥和大家讲解《黑暗逃生》常见问题 已知问题及解决方案 黑暗逃生常见问题解决由发号哥小编给大家带来&#xff0c;大家在玩黑暗逃生的时候一定会遇到一些问题吗&#xff0c;小编给大家整合了黑暗逃生已知问题及解决方案&#xff0c;感兴趣的玩家一起来看看吧。 传奇最经…

RPG游戏《黑暗之光》流程介绍与代码分析之(四):任务系统的实现

第四章&#xff1a;任务系统 这部分主要对任务系统进行设计&#xff0c;游戏的关键因素之一就是任务系统与玩家的交互&#xff0c;但在代码实现中并不算复杂。本篇博客主要通过一下几个方面实现任务系统。 任务模型的导入与任务UI界面的创建任务的接受与完成针对不同对象的指针…

GoodTask 6.6.0 计划提醒任务管理工具

GoodTask是一款基于Apple提醒和日历、功能强大的任务/项目管理工具。它既可以用作简单的待办事项检查列表&#xff0c;也可以用作复杂的项目管理工具&#xff0c;帮助完成重大项目。GoodTask让您通过各种不同的视角来观看自己关注且需要完成的事务。有了GoodTask&#xff0c;您…

超黑光摄像机可以有多“黑“?

目前&#xff0c;市场标准黑光级IPC能在0.0005Lux(照度单位)的低照下维持彩色&#xff0c;但星光级或普通红外条件则必须依赖补光灯。那么有没有一款摄像机能达到超黑光的标准&#xff0c;能够在更暗环境下&#xff0c;不需要额外补光的情况下维持彩色呢&#xff1f; 超低照成像…

如何处理亿级图片排重(精准排重,相似排重)

图片相似度对比 1、需求 假如有一个图片池&#xff0c;存有1亿图片。给一张目标图片&#xff0c;在图片池中做匹配。 判断一张图片是否在图片池中出现过。&#xff08;完全一样&#xff09;判断有没有相似的出现过。比如两张图相似度90&#xff0c;两张图片是在描述一件事情。 …

【初识Spring框架】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1. Spring框架是什么&#xff1f; 2. IOC 容器…

mDNS实现之Bonjour与Avahi(二)——win/linux/arm交叉编译

0.Part1&#xff1a; mDNS实现之Bonjour与Avahi&#xff08;一&#xff09;——win/linux/arm交叉编译_平凡之路-CSDN博客官网&#xff1a;Bonjour - Apple Developerhttps://developer.apple.com/bonjour/1.WindowsBonjour SDK for Windowshttps://developer.apple.com/downlo…

Android Says Bonjour

转载自&#xff1a; https://blog.csdn.net/innost/article/details/8629139 Android Says Bonjour 很高兴能在农历蛇年刚开始的这期《程序员》杂志上继续为读者奉上Android的故事。初来咋到&#xff0c;首先要向大家说声”你好“。有意思的是&#xff0c;Android也很通人情&a…

iOS 之 Bonjour 协议简单抓包分析

引子 因在学习iOS编程之bonjour编程的过程中&#xff0c;对bonjour产生了一些些的好奇&#xff0c;因此就查 阅了各种资料以及自己抓包分析该协议。 注&#xff1a;文章作为个人学习记录&#xff0c;不一定准确&#xff0c;如有错误请多多指教&#xff0c;共同进步&#xff01;…

1.7 基于XML配置方式使用Spring MVC

一、基于XML配置与注解的方式使用Spring MVC 1、创建Maven项目 Maven项目 - SpringMvcDemo01 单击【Finish】按钮 2、添加相关依赖 在pom.xml文件里添加支持Spring MVC的相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmln…

硬件工程师-BOOST升压电源设计

一、Boost变换原理 开关闭合时&#xff0c;电感电压等于输入电压 开关断开时&#xff0c;电感电压输出电压-输入电压&#xff0c; 电感的感生电动势&#xff0c;N ΔΦ磁通的变化率&#xff0c;Δt时间 假设开关闭合与开关断开&#xff0c;开关断开时能量全部释放光 将第三个式…

【Python】深度理解Class类、Object类、Type元类的概念和关系

深度理解Class类、Object类、Type元类 1.Class类、Object类、Type元类的表面关系2.Class、Object、Type解释3.关系详解4.那么如何看待object、type在Python面对对象概念中的一席之地呢&#xff1f;5.那么object、type扮演了什么样的角色呢&#xff1f;他们对class又分别做了什么…

MongoDB(学习笔记1.0)

最近在学非关系型数据库MongoDB&#xff0c;猛地用起来的真的没关系型数据库方便啊。 首先还是数据库的安装&#xff1a; 安装直接去官网安装即可&#xff0c;官网地址&#xff1a;MongoDB: The Developer Data Platform | MongoDB 当前也有免安装版的&#xff0c;这里就不再…

京东数据分析软件工具(京东618销量查询)

这一期&#xff0c;我们主要分享今年618京东美妆的预售数据&#xff0c;包括面部护肤、香水彩妆、男士面部护肤品类。 -面部护肤- 今年618&#xff0c;面部护肤品类在京东累计预售量达到130万件&#xff0c;预售额达到13亿元。预售期间&#xff0c;护肤品类均价在1010元左右。期…

Android 使用第三方字体

先看下图 一.全局替换方式 1.新建assets引入资源 2. 自定义application&#xff0c;将第三方的字体&#xff0c;替换当前系统默认字体 class App : Application() {override fun onCreate() {super.onCreate()initTypeface()}private fun initTypeface() {val typefaceByson…

Android 字体大小(fontScale)不随系统设置变化

需求 App字体大小不变 如果用户将系统字体大小设置的非常大&#xff0c;可能导致APP的文字大小显示异常。 目标效果是&#xff0c;APP内字体大小不随系统设置的 字体大小 变化。 原始效果 系统的字体大小设置为 超大 时&#xff1a;&#xff08;字体大小 可变&#xff09; 目…

Android 自带的字体库、字体样式

1、设置字体 android:fontFamily“字体样式” 1、sans-serif-smallcaps &#xff08;左边只设置字体&#xff0c;右边设置加粗&#xff09; 2、sans-serif 3、cursive 4、sans-serif-black 5、sans-serif-condensed-light 6、sans-serif-thin 7、serif 8、serif-monospa…

android屏幕大小字体大小,Android字体大小自适应不同分辨率的解决办法

Android字体大小自适应不同分辨率的解决办法 今天有人问我&#xff0c;Android系统不同分辨率&#xff0c;不同大小的手机&#xff0c;字体大小怎么去适应呢&#xff1f;其实字体的适应和图片的适应是一个道理的。 一、原理如下&#xff1a; 假设需要适应320x240&#xff0c;48…

Android切换字体

有时候需要根据UI需求切换项目字体&#xff0c;步骤如下&#xff1a; 准备字体文件&#xff0c;示例使用ttf文件&#xff0c;新建font文件夹&#xff1a; 将ttf文件放到res/font目录下 设置全局字体&#xff0c;系统主题添加 <item name"android:fontFamily">f…