要实现技能释放其实很简单,说白了就是在指定的位置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. H5+js调用相机

    在机缘巧合之下,了解到用HTML5和javascript调用摄像头来实现拍照功能,今天就把大致原理写下来.页面布局很简单,就是一个input标签,两个HTML5元素video.canvas和一个but ...

  2. 如何将业务代码写得像诗一样(使用注解+单例+工厂去掉一大波if和else判断)

    1.订单控制器,提供一个根据商品id和银行渠道id计算商品折后价格的接口: import org.springframework.web.bind.annotation.GetMapping; imp ...

  3. Django入门4 数据库设计

    创建mxonline虚拟环境 C:\Users\ws>mkvirtualenv mxonline (mxonline) D:\python\djangostart>pip install ...

  4. jQuery 取值操作

    模板使用: https://startbootstrap.com/themes/sb-admin-2/ 使用的 bootstrap 模块 ,上面的这个网站可以下载 select 取值 <sele ...

  5. (转载)极大似然估计&最大后验概率估计

    前言 不知看过多少次极大似然估计与最大后验概率估计的区别,但还是傻傻分不清楚.或是当时道行太浅,或是当时积累不够. 这次重游机器学习之路,看到李航老师<统计学习方法>中第一章关于经验风险最 ...

  6. Python Linux系统管理与自动化运维

    Python Linux系统管理与自动化运维 前言 第1章Python语言与Linux系统管理1 1.1Python语言有多流行1 1.2Python语言为什么流行3 1.3Python语言有什么缺点 ...

  7. DL Practice:Cifar 10分类

    Step 1:数据加载和处理 一般使用深度学习框架会经过下面几个流程: 模型定义(包括损失函数的选择)——>数据处理和加载——>训练(可能包括训练过程可视化)——>测试 所以自己写代 ...

  8. Oracle 实现表中id字段自增长

    Oracle 实现表中id字段自增长 最近正在学习Oracle的时候发现Oracle表中的字段不能像mysql中那样可以用auto increment修饰字段从而让id这种主键字段实现自增长. 那Or ...

  9. sql-server-dmv-starter-pack

    SELECT wait_type , ) AS [wait_time_s] FROM sys.dm_os_wait_stats DOWS WHERE wait_type NOT IN ( 'SLEEP ...

  10. mysql笔记7--一句查询语句的过程

    1 sql语句示例 select *from A where id=1 2 mysql基本架构图 (1)Mysql分为Server层和引擎层两个部分 (2)Server层包括连接器,查询缓存,分析器, ...