Unity3d - RPG项目学习笔记(二十八)

前期工程我们终于实现了技能列表的显示,嗯,终于可以看到角色的技能啦。但是依照现在的尿性,你不做出快捷栏的话,这些技能都是只能看的。为了更好的释放技能/使用物品,现在开始制作快捷栏。

那么首先,我们必须持有一个快捷栏。

一、建立快捷栏

首先现建立一个Invisiable Wiedgt,命名为ShortCutUI,然后在内部建立6个UISprite,将图标定义为Grid,加上BoxCollider,这样我们初步的快捷栏就做好了。

二、实现技能的拖动

先明确一个概念,基于最优方案,一定是将技能的图标拖到快捷栏上。那么就会用到老朋友UIDragDropItem类,首先我们对技能图标建立脚步,并使其继承自UIDragDropItem类,并使其选中CloneOnDrop选项,然后通过其中的OnDragDropStart方法来管理克隆图标的父类(以实现自由拖动)以及OnDragDropRelease方法来实现拖动结束的过程。

根据上述思路,脚本如下:

Class SkillItemIcon : UIDragDropItem

{

private skillid;

Override OnDragDropStart() //需要注意:通过对基类UIDragDropItem的分析,我们可以得知,此方法的作用对象是拖动对象的克隆,及我们的操作目标,具体见NGUI的代码

{

base.OnDargDropStart( );

skillid = tranform.parent.GetCompnent<SkillItem>().id; //获取克隆父类(及技能的Prefabs)上的id

tranfrom.parent = root.parent;

}

Override OnDragDropRelease(gameobject surface)

{

base.OnDargDropRelease(surface);

if(surface.tag != null && surface.tag == Tag.shortcut)

{

surface.GetCompnent<ShortCutGrid>( ).SetSkill(skillId); //ShortCutGrid中的SetSkill方法后续进行构建,体现面向对象的思路——即构建一个模块,调用一个模块

}

}

}

以上就完成了今日的要求

时间: 2024-10-05 05:01:57

Unity3d - RPG项目学习笔记(二十八)的相关文章

Unity3d - RPG项目学习笔记(十二)

前期实现了背包基本的存储功能,现在开始构建背包物品的移动及调换功能,具体思路如下: ①读取现有物品所在的格子信息. ②对移动目标地点进行判断(即surface的Tag): 如果surface的Tag为空,则使物品的局部坐标归零: 如果surface的Tag不为空,分为几个情况考虑: 1.Tag为背包格子:说明移动地点为空格子,所以讲物品信息赋值到目标下,清除现有信息即可: 2.Tag为背包物品:说明移动地点为有物品格子,将两格子的信息交换即可: 3.Tag为其他物品:说明非常规移动,将物品的位移

Unity3d - RPG项目学习笔记(十六)

上期功能实现了NPC模型的点击逻辑,现在开始建立药品的信息清单窗口. 功能需求: ①显示药品的信息列表,包含:物品得icon.物品名称.物品效果,物品价格: ②显示药品的购买按钮,实现点击功能: ③点击购买按钮后,显示输入框,输入框内输入数字后,有OK确认按钮. 构建过程如下: ①创建一个sprite,定义为商店背景: ②创建一个sprite,定义为药品信息行: ③在药品信息行内创建药品icon,再创建三个Label,依次向Label中输入名称.效果及价格: ④在药品信息行后加入购买按钮,添加按

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入angular-resource.min.js文件 2.在模块中依赖ngResourece,在服务中注入$resource var HttpREST = angular.module('HttpREST',['ngResource']); HttpREST.factory('cardResource

马哥学习笔记二十八——nginx反向代理,负载均衡,缓存,URL重写及读写分离

Nginx反向代理 Nginx通过proxy模块实现反向代理功能.在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI.客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server).nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上.如下面的示例中,location的/uri将被替换为上游服务器上的/newuri. location /uri { proxy_pa

angular学习笔记(二十八-附2)-$resource中的promise对象

下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource){ return $resource('/card/user/:userID/:id',{userID:123,id:'@id'},{charge:{method:'POST',params:{charge:true},isArray:false}}) }); HttpREST.factory('h

angular学习笔记(二十八-附1)-$resource中的资源的方法

通过$resource获取到的资源,或者是通过$resource实例化的资源,资源本身就拥有了一些方法,比如$save,可以直接调用来保存该资源: 比如有一个$resource创建的服务: var service = angular.module('myRecipe.service',['ngResource']); service.factory('Recipe',['$resource',function($resource){ return $resource('/recipe/:id',

Unity3d - RPG项目学习笔记(二十)

前期工程将装备信息导入到了工程中,且实现了在背包内鼠标移动显示物品提示信息,本次工程开始构建装备穿戴功能. 项目需求: 右键点击背包内的装备,使其穿戴在身上. 需求分析: 右键点击背包内的装备,注意,此时的装备还是背包内的一个物品,即是工程所定义的id为2001-2010的InventoryItem而已:需求可以抽象为右键点击背包内的一个物品,如果该物品是装备类,则在角色的EquipmentUI相应的位置生成一个与之图标相同的EquipmentItem,则视为“装备”了该物品. 具体实现: ①右

Unity3d - RPG项目学习笔记(二十二)

上期工程完成了装备的穿戴功能,本期开始创建装备的卸下功能. 需求: 右键点击装备栏上的装备图标,使其返回至背包中. 需求拆解: 鼠标移动至装备图标上,右键点击,销毁装备,在背包中生成该装备的镜像,完毕. 根据上述思路,这个功能实现起来比较简单: ①首先为EquipmentItem添加BoxCollider,使装备栏中的装备可以被点击: ②对该EquipmentItem添加脚本如下: Class EquipmentItem { private bool isHovering = false; vo