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

第四章:任务系统


这部分主要对任务系统进行设计,游戏的关键因素之一就是任务系统与玩家的交互,但在代码实现中并不算复杂。本篇博客主要通过一下几个方面实现任务系统。
  1. 任务模型的导入与任务UI界面的创建
  2. 任务的接受与完成
  3. 针对不同对象的指针修改(提高可玩性)

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

首先添加接受任务信息的老爷爷, 在Model中找到NPC老爷爷,拖入场景Map中,并调整朝向。因为NPC不参与具体战斗,不需要精确点击,因此创建一个Box Collider,使其包围住老爷爷即可。

之后要设计任务对话框,在UI Root界面中导入Atlas,在Sprite中添加游戏任务背景,将背景图片导入。之后对这个背景添加一个tween——>position,修改红框处,其中from 1000~169表示一个运动方向,即对话框从视线之外运动进来,下面的曲线表示运动速度。


4.2 任务的接受与完成

任务界面应包括如下几个方面
  1. 点击NPC时,出现任务描述
  2. 接受任务后,出现任务提示
  3. 完成任务后,提交获取奖励

4.2.1 点击NPC后,应出现提示信息

在任务面板中添加一个Label实现该功能,设计如下

为了在点击任务面板时不移动,给UI控件attach一个box collider,在PlayerDirection中加入判断,即在鼠标点击后判断鼠标是否碰到UI控件,如果碰到,则不移动。
if (Input.GetMouseButtonDown (0) && UICamera.hoveredObject == null)
即可实现。

为了实现点击老爷爷显示界面的效果,我们给NPC老爷爷新建一个脚本BarNPC,代码如下
using UnityEngine;
using System.Collections;
public class BarNPC : MonoBehaviour {public TweenPosition questTween;void OnMouseOver()    //当鼠标发出射线发生碰撞{if (Input.GetMouseButtonDown(0))    //此时点下鼠标{ShowQuest();}}void ShowQuest(){questTween.gameObject.SetActive (true);    //将quest激活questTween.PlayForward ();    //显示动画}
}
即可
为了实现点击“X”按钮隐藏并播放动画,我们对X按钮进行代码设计
    public void CloseQuest(){HideQuest ();}void HideQuest(){questTween.PlayReverse ();    //与PlayForward相反,实现关闭的动画效果}
即可

4.2.2 点击Accept后,出现任务提示

在点击Accept之后,Accept和Cancel按钮应当消失,并且任务描述应当改为任务更新。并出现OK按钮用于在完成任务时提交任务。
接下来这段BarNPC中的代码表示接受任务到完成任务这一系列的所有操作
using UnityEngine;
using System.Collections;
public class BarNPC : MonoBehaviour {public TweenPosition questTween;public bool isOnTask = false;    //是否处于任务状态的标志位public int killWolfNumber = 0;    //当前杀死的狼    public int wolfKilledAcquire = 10;    //需要杀死狼的个数public UILabel describeLabel;    //控制任务描述与进度显示public GameObject AcceptBtnGO;    //控制三个按钮public GameObject OKBtnGO;public GameObject CancelBtnGO;void OnMouseOver(){if (Input.GetMouseButtonDown(0)){if(isOnTask)    //如果处在任务状态,即按下Accept,显示任务进度{ShowTaskProgress();}else    //否则显示任务描述{ShowTaskDes();}ShowQuest();}}void ShowQuest()    //任务界面的动画效果{questTween.gameObject.SetActive (true);questTween.PlayForward ();}void HideQuest(){questTween.PlayReverse ();}void ShowTaskDes()    //任务描述{describeLabel.text = "任务:\n杀死" + wolfKilledAcquire+"只小野狼\n\n奖励:\n1000金币";AcceptBtnGO.gameObject.SetActive (true);OKBtnGO.gameObject.SetActive (false);}void ShowTaskProgress()    //任务进度{describeLabel.text = "任务:\n你已经杀死了" + killWolfNumber + "/"+wolfKilledAcquire+"只小野狼\n\n奖励:\n1000金币";AcceptBtnGO.gameObject.SetActive (false);OKBtnGO.gameObject.SetActive (true);}public void OnCloseQuest()    //点击关闭按钮{HideQuest ();}public void OnAcceptQuest()    //点击接受按钮{isOnTask = true;ShowTaskProgress ();}
}
如下图所示

4.2.3 完成任务后,获取任务奖励并更新任务描述

如果任务完成,点击OK按钮可以提交任务,获得奖励,并把Label显示为新的任务描述

接下来要实现任务奖励的获取和任务更新,首先需要在Magician的PlayerStatus的脚本中添加一段函数,用以控制金币变化
    public void GetCoin(int coinNumber){coin += coinNumber;}
之后需要在BarNPC中调用这个函数
    private PlayerStatus state;void Start()    //在Start中找到对应的脚本{state = GameObject.FindGameObjectWithTag (Tags.player).GetComponent<PlayerStatus> ();}
并在OK的按钮功能中加入
public void OnOKQuest(){if (killWolfNumber >= wolfKilledAcquire)    //若完成目标,即杀死的狼数量大于等于任务目标{state.GetCoin(1000);    //调用GetCoin()增加金币killWolfNumber = 0;    //进度归零ShowTaskDes();    //显示新的任务描述}else{HideQuest();    //若没完成,隐藏界面}}

4.3 点击不同对象出现不同指针

为了让玩家在点击不同对象时出现不同的鼠标,作为提示。我们将所有用到的鼠标指针(RPG——>GUI——>mouse cursor)存到一个类中。脚本编辑为
using UnityEngine;
using System.Collections;
public class MouseSetting : MonoBehaviour {public static MouseSetting _instance;    //一个单例,到时候通过单例调用不同指( ps:单例是用来取代以前的全局函数变量)
相比全局函数,单例不会重名,应用域明确,可以管理生命周期,可封装,可以通过继承扩展(重要!)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都能适用于鼠标变换,我们在Script——NPC中新建一个CommonNPC脚本表示对所有NPC都适用的操作,添加
using UnityEngine;
using System.Collections;
public class NPC : MonoBehaviour {void OnMouseEnter()    //碰撞到GUI控件时调用一次,不同于OnMouseOver的每帧调用{MouseSetting._instance.SetNPCTalkCursor ();}void OnMouseExit(){MouseSetting._instance.SetNormalCursor ();}
}
即可,再将public class BarNPC :MonoBehaviour改为public class BarNPC : CommmonNPC ,即BarNPC中的所有NPC能继承CommonNPC脚本中的数据。


总结:任务系统是游戏的重要组成部分,但从代码实现来说,难度并不大。之后会陆续更新面板、道具、装备、系统设置等信息。



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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPG游戏《黑暗之光》流程介绍与代码分析之(二):角色创建界面的实现

第二章 角色创建 上一章中完成了初始化的场景界面的创建&#xff0c;本章就接着上一篇博客的内容&#xff0c;介绍角色创建的方法。 2.1 角色创建的UI界面 角色创建的背景采用与加载界面所用背景相同&#xff0c;并且Camera不需要移动。 创建的UI界面与之前类似&#xff0c;其中…

【游戏开发渲染】Unity ShaderGraph使用教程与各种特效案例:Unity2022(持续更新)

文章目录 一、ShaderGraph前言二、ShaderGraph科普1、渲染管线&#xff08;Render Pipline&#xff09;2、可编程渲染管线&#xff0c;SRP&#xff08;Scriptable Render Pipline&#xff09;3、高清渲染管线&#xff0c;HDRP&#xff08;High Definition Render Pipleline&…

RPG游戏《黑暗之光》流程介绍与代码分析之(十五):主角受攻击效果以及场景切换

十五章&#xff1a;主角受攻击效果以及场景切换 本篇博客将《黑暗之光》开发的最后工作做完&#xff0c;包括之前未实现的主角被击效果&#xff0c;以及实际运行中的场景切换。 15.1 主角的受攻击效果 我们参照WolfBaby中的受攻击效果&#xff08; 链接&#xff09;&#xff0c…

Unity实现王者荣耀登陆界面动画背景

我呢&#xff0c;特别爱打王者荣耀。 而最近几个版本的更新中,王者荣耀的登录背景变成了动画背景,看着很有动感炫酷,这里来看下王者荣耀是怎么个效果。 这里找的一个B站UP主的视频,因为现在官方不知道为啥换了换背景&#xff0c;虽然他这个不是官方自制的吧,是自己修改的游戏…

Unity 之 ShaderGraph 实现火焰效果入门级教程

Unity 之 ShaderGraph 实现火焰效果入门级教程 前言一&#xff0c;效果展示二&#xff0c;原理介绍三&#xff0c;实现效果四&#xff0c;使用示例五&#xff0c;完整图示 前言 若你的工程还没有进行基础配置&#xff0c;请查看我的博文Unity 之 ShaderGraph入门使用详解&#…

Unity RPG 黑暗之光 问题记录 下(64-110 技能、装备商店、头像栏、快捷栏、敌人攻击系统、玩家攻击系统)

黑暗之光 64-73技能系统 数据读取 数据 表 黄色枚举&#xff0c;红色没有的 数据 文本 数据 读取 背包时是itemList&#xff0c;读取属性时各有不同&#xff0c;无法统一&#xff0c; 这种方式是为了方便读取&#xff0c;所有需要的数据表都可以在DataHub上读取到&#x…

Unity官方案例噩梦射手开发总结<一> 角色的攻击功能实现

愉悦的寒假生活总是会猝不及防地迎来尾声&#xff0c;这也意味着我大一生活的进度条已经过半了。幸运的是&#xff0c;在我某位优秀的学长的带领下&#xff0c;我完整地开发出来了unity的官方案例噩梦射手并基本实现所有功能&#xff0c;也是让我这个大一的苟蒻积攒了不少的新知…

GAMES202-Shadow总结概括

截图均来自于闫令琪老师的GMAES202-Shadow&#xff0c;本文在于对课程内容进行总结以及加上自己的理解&#xff0c;希望帮助同学们加深对课程内容的理解&#xff0c;如有谬误请各位指正 复习本节需要的基本知识 1. Shadow Mapping 为了获得一张Shadow Mapping&#xff0c;需要…

暗黑破坏神:不朽 unity mmo arpg资源分包精讲

unity大型游戏资源管理——分包 视频讲解&#xff1a;点击观看 unity mmo arpg 暗黑破坏神&#xff1a;不朽 是一个大型的重度游戏&#xff0c;该游戏资源已经超过10G 所以它用了资源分包技术减少下载时间。 首包只包含基础资源&#xff0c;在玩家玩第一关的时候&#xff0c;后…

股票卖出技巧及原则,你了解哪些

股票卖出技巧及原则&#xff0c;你了解哪些&#xff1f;有句股谚说&#xff0c;“会买的是徒弟&#xff0c;会卖的是师傅&#xff0c;会空仓的是祖师爷”。以前都是把大部分精力放在了选股和如何买股上面&#xff0c;而对如何卖股票太忽视了。难怪总是出不了师&#xff0c;小学…

通达信破底翻选股公式,用缠论底分型进行优化

上次在写《通达信破底翻形态选股公式&#xff0c;选出破底之后再翻回的股票》这篇文章时&#xff0c;编写破底翻选股公式就考虑使用缠论底分型&#xff0c;但是底分型的包含关系较为复杂&#xff0c;不容易处理&#xff0c;只能暂时搁置&#xff0c;采用了一种简单的方式&#…

股票大作手操盘术[图解]

目录 第一章&#xff1a;投机是一项挑战 第二章 何时入场才是好时机 第三章 追随领头羊 第四章 手里的钱财 第五章 关键点 第六章 百万美元的大错 第七章 三百万美元的盈利 第八章 利弗莫尔市场要决 杰西•利弗莫尔为什么能在投机事业中取得巨大成功&#xff0c;这…

【通达信指标公式】主力博弈分时指标,分时图抓日内弱转强牛股

GHYJKU:BETWEEN((CLOSE*1)/(SUM(AMOUNT,BARSCOUNT((CLOSE*1)))/SUM(VOL*100,BARSCOUNT((CLOSE*1)))),1.05,0.95); VBNH:IF(GHYJKU0,MA((CLOSE*1),BARSCOUNT((CLOSE*1))),(SUM(AMOUNT,BARSCOUNT((CLOSE*1)))/SUM(VOL*100,BARSCOUNT((CLOSE*1))))); 紫色跟风:EXPMA((CLOSE/VBNH),…

ChatGPT写代码之——CodeWhisperer在VS Code下如何安装

一、安装 1. 在VS Code扩展中搜索AWS 点安装就安装好了 #二、配置 1. 点击状态栏出现的AWS 选择add New Connection 选择Use a personal email to sign up and sign in with AWS Builder ID 选择Copy Code for AWS builder ID 跳转到浏览器 2. 在浏览器上一步步用自己的邮…

计算机程序设计类论文,计算机编程论文

计算机编程论文 介绍:本栏目是计算机和编程和论文相关的论文例文,免费教你怎么写关于计算机编程的论文提供相关文献资料。 【摘 要】本探究经过问卷调查、现场采访、走访调查、查阅文献资料等方法对河南省各大高校计算机专业大学生的学习情况(特别是编程能力)进行了调查和研。 …

爱丁堡计算机专业硕士世界排名,爱丁堡大学计算机世界排名

导读&#xff1a;,伴随着科技与经济的高速发展&#xff0c;计算机技术专业成为一门热门的专业&#xff0c;越来越受到人们的欢迎&#xff0c;学校的师资力量和教育水平&#xff0c;也直接成为影响我们选择高校的原因之一。 伴随着科技与经济的高速发展&#xff0c;计算机技术专…

爱丁堡大学计算机专业alevel,爱丁堡大学alevel要求?

原标题&#xff1a;爱丁堡大学alevel要求&#xff1f; 爱丁堡大学接受A-level和国际文凭课程的直接申请&#xff0c;每个学位课程都必须达到特定标准的要求才能入学。例如&#xff1a;申请爱丁堡大学商学院本科课程A-level要求AAA-ABB&#xff0c;兽医学(5年制)A-level要求为AA…

革微信的命,要靠“聊天即挖矿”?

广告诱惑我们追求名车服饰,从事自己憎恨的工作,为的就是买堆根本没用的狗屁东西。 ——Tyler Durden,《搏击俱乐部》 2019年1月15日,注定是一个不平凡的日子,这一天,3家公司揭秘了酝酿已久的社交产品——分别是罗永浩的聊天宝,王欣的马桶MT,张一鸣的多闪。目的只有一个…

用AI重构骨架,打造未来感IP体验经济

我国网文市场目前拥有近2000万位作家、4.9亿名读者。 如果将庞大的网文行业比作一个江湖&#xff0c;那么拥有2.4亿月活用户的阅文集团&#xff08;HK00772&#xff0c;股价33.2港元&#xff0c;市值338.06亿港元&#xff09;&#xff0c;称得上是“天下第一大派”。 “第一大…

NLP-预训练模型-GPT系列:GPT-1(2018-06)、GPT-2(2019-02)、GPT-3(2020-05)、InstuctGPT(2022-01)、chatGPT(2022-11)

GPT1:Imporoving Language Understanding By Generative Pre-training GPT2:Lanuage Models Are Unsupervised Multitask Learners GPT3:Language Models Are Few-shot Learners GitHub:https://github.com/openai/gpt-3 从GPT三个版本的论文名也能看出各版本模型的重点…