要实现技能释放其实很简单,说白了就是在指定的位置Instantiate一个对应的例子特效。我走的弯路主要在寻找这个指定位置上。

对于指向性技能就不多说了,因为是有确切目标的(当然首先判断下技能能不能对目标施放等等),可以直接instantiate。

这里说下非指向技能,比如lol里曙光女神的R技能。

其实实现也很简单,之前想麻烦了(比日说在角色要释放技能的时候做一个设置为3d的ugui,然后再在ui上判断技能释放位置,

比如说将鼠标位置转为3d坐标(这个实现下边有。。),再比如想用时间系统像ui那样直接拖拽,反正饶了很多弯)

好吧,我最后的实现是通过射线做的,在Update里边时刻检测鼠标位置,然后鼠标抬起位置就是技能释放的位置(也就是粒子创建的位置)

为了便于观察(比如说你按着R就会出现一个圈然后是一个通过鼠标移动控制释放位置)我创建了一个2D的Sprite来显示释放位置(当然做成了预设..)。

下图为创建的场景。就Plane表示地图,Capsule表示角色好了。。。

直接上脚本吧,注释应该还是蛮详细的...我给挂在Plane上了...

public class Test : MonoBehaviour
{ public GameObject particle;//粒子特效预设
private RaycastHit hit;
private Ray ray;
private GameObject capsule;//角色
private bool keydown;//判断是否按下对应技能键
private GameObject par;//要创建的例子(要释放的技能)
public GameObject firesprite;//2D Sprite的预设
private GameObject fire;//要创建的Sprite // Use this for initialization
void Start()
{
capsule = GameObject.Find("Capsule"); } void Update()
{
// Vector3 gameposscreen = Camera.main.WorldToScreenPoint(capsule.transform.position);
// Vector3 mouseposworld = Camera.main.ScreenToWorldPoint(new Vector3( Input.mousePosition.x,Input.mousePosition.y,gameposscreen.z));
// capsule.transform.position = new Vector3(mouseposworld.x, 1,mouseposworld.z);//这几句就是把鼠标的屏幕坐标转为世界坐标的...主要是鼠标的
世界坐标跟物体在同一个xoz平面上,也就是y一样。
if (Input.GetKeyDown(KeyCode.A))
{
keydown = true; fire = GameObject.Instantiate(firesprite, Vector3.zero, Quaternion.identity);//在这里创建Sprite
fire.transform.Rotate(new Vector3(90, 0, 0));//旋转成水平方向 }
if (keydown)
{
if (Input.GetMouseButton(0))
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))//射线检测
{
if (hit.collider != null)
{
var coll = new Vector3(hit.point.x, hit.point.y, hit.point.z);//射线检测的位置
fire.transform.position = new Vector3(coll.x, 1, coll.z);//付给Sprite
}
}
}
if (Input.GetMouseButtonUp(0))
{
par = GameObject.Instantiate(particle, fire.transform.position, Quaternion.identity);//创建粒子特效(释放技能

          Destroy(fire);
          Destroy(par,5f);//摧毁

            }
}
} }

  我这个粒特效是PlayOnAwake的,如果不是瞬发技能(比如小法师的E)可以在粒子或者通过脚本设置。

unity 实现技能释放的更多相关文章

  1. UGUI之Image使用以及技能释放CD

    顾名思义:Image就是用来显示图片的 Image中Image组件中有一个重要的熟悉:Image type

  2. 关于Unity3d粒子系统的小发现(天堂3技能释放)

    导入系统给的粒子包,发现了一个问题:系统的粒子都有移动轨迹. 而自己新建的空粒子系统却没有这个功能.顺便也复习一下粒子系统. Particle System (粒子系统): Duration(持续时间 ...

  3. Unity NGUI实现技能CD效果

    unity版本:4.5.1 NGUI版本:3.6.5 脚本代码:C# 在游戏中经常要实现技能的CD效果,NGUI中已经实现了这个功能,即在button上创建一个半透明的Sprite实现这个功能. 首先 ...

  4. Unity——技能系统(二)

    Unity技能系统(二) Unity技能系统(一) Demo展示: 五.技能管理和释放 1.CharacterSkillSystem 技能系统类,给外部(技能按钮,按键)提供技能释放方法: 技能释放逻 ...

  5. GJM : 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  6. 使用Unity制作游戏关卡的教程(一)

    转自: http://gamerboom.com/archives/74131 作者:Matthias Zarzecki 我正在制作<Looking For Group – The Fork O ...

  7. Unity Android设备的输入

    Unity Android设备的输入 1依据屏幕位置输入 有的时候也许是为了整个有些风格的干净,减少屏幕上的UI图标,以至于摒弃了虚拟按键这种常用的输入方式.为了替代虚拟按键的输入方式而选择了依据点击 ...

  8. Unity2D项目-平台、解谜、战斗! 1.5 Player框架、技能管理组件

    各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 前文提到,凡是有"攻击"语义的对象,在游戏中,我们给予其一个"CanFight"组件予 ...

  9. ARPG游戏技能系统设计

    ARPG游戏的技能的前端表现, 主要指的是人物动作和特效表现, 从普遍意义上讲,大致可以分为三个阶段:起手.飞行.碰撞(爆炸). [特效可见性判断] 1.[attacker & victim] ...

随机推荐

  1. groupby 的妙用(注意size和count)

    Pandas的groupby()功能很强大,用好了可以方便的解决很多问题,在数据处理以及日常工作中经常能施展拳脚. 今天,我们一起来领略下groupby()的魅力吧. 首先,引入相关package: ...

  2. layui flow loading占位图实现方法

    如果流图片要加载失败, 就会显示找不到图片的裂痕 代码如下: <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  3. osg geometry清空vertex

    _vertices->clear(); _vertices->dirty(); _drawArrays->set(sog::PrimitiveSet::POINTS,0,0); _g ...

  4. (原)关于使用imagemagick将gif叠加到图片或者画布上的方法,以及疑难杂症

    今天因为项目过程中,有一个小需求,需要将一个指定的gif按照指定大小,叠加到画布的指定位置上,本来对于熟悉这块的人,简直就是小菜一碟哈,但本人因为对imagemagick的不熟悉,导致在这个需求上摸索 ...

  5. Linux CentOS7 下无图形界面安装Oracle11G R2版本

    01,系统 Centos7 数据库版本 Oracle_11gR2 ,以及硬件要求 内存不能小于 1G,可用硬盘不小于8G Swap分区空间不小于2G grep MemTotal /proc/memin ...

  6. c#的BeginInvoke和EndInvoke使用demo

    BeginInvoke方法可以使用线程异步地执行委托所指向的方法.然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回值就是被调用方法的返回值),或是确定方法已经被成功调用. ...

  7. win7安装 truffle

    1. 最近有个项目需要用到区块链,第一次玩不太熟悉.现在电脑上安装个  truffle,作为一个区块链节点 2. 安装 truffle ,之前需要安装其他几个软件 truffle的安装需要首先装有:n ...

  8. 【ARM-Linux开发】用VS2013+VELT-0.1.4进行海思平台 Linux内核 的开发

    1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件 ...

  9. [数据结构 - 第6章] 树之链式二叉树(C语言实现)

    一.什么是二叉树? 1.1 定义 二叉树,是度为二的树,二叉树的每一个节点最多只有二个子节点,且两个子节点有序. 1.2 二叉树的重要特性 (1)二叉树的第 i 层上节点数最多为 2n-1: (2)高 ...

  10. 对decimal 类型的数据进行获取调整

    Decimal为SQL Server.MySql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小数部分的位数. 好处:使用精确小数类型不仅能够保证数据计算更为精确,还可以节省储 ...