要实现技能释放其实很简单,说白了就是在指定的位置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)可以在粒子或者通过脚本设置。

posted on 2017-06-30 17:32  懒人起烂名  阅读(8778)  评论(1编辑  收藏  举报