征服Unity3dUnity技术分享unity

Unity实现技能追踪

2017-09-13  本文已影响312人  想入飞飞___

0.介绍

玩游戏时,我们放了一个大招希望一下击中敌人,当然敌人也不会傻傻地呆在那里不动,今天要实现的一个功能就是这个样子,如图:


追踪成功.png

1.大概实现

敌人的移动我们这里用Behavior Designer来实现,Behavior Designer也叫行为树,可以不用写代码实现诸多ai功能,技能追踪其实就是用了Vector.MoveTowards()来实现。

2. Behavior Designer实现巡逻

这里的巡逻非常简单,用2个空物体代表要巡逻的地点,面板上拖拖就解决了,具体的学习行为树这里就不介绍了,这里推荐一个学习行为树的视频教程,讲的非常好。
Unity火爆插件Behavior Designer行为树插件学习
http://www.bilibili.com/video/av10986305/index_3.html#page=1

简单巡逻.png

3.技能追踪

技能追踪其实就是让粒子系统追着敌人打,也就是移动粒子,要想移动粒子要把一个物体上的粒子全部拿到,然后遍历移动,

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {

    public GameObject A;
    private float speed = 50;

    private ParticleSystem particle;
    private int size;
    private ParticleSystem.Particle[] temp;

    // Use this for initialization
    void Start() {

        particle = this.GetComponentInChildren<ParticleSystem>();
        temp = new ParticleSystem.Particle[particle.maxParticles];
        
    }

    void LateUpdate()
    {
     
        size = particle.GetParticles(temp);

        float step = speed * Time.deltaTime;
        for(int i = 0; i < size; i++)
        {

            temp[i].position = Vector3.MoveTowards(temp[i].position, A.transform.position, step);
  A.transform.position, step);
        }
        particle.SetParticles(temp,size);
    }
}

代码实现还是比较简单,先是拿到物体上的粒子系统组件,然后是通过 ParticleSystem.Particle[]来获取所有粒子,再接着遍历所有粒子,用Vector3.MoveTowards方法来改变位置 ,最后再SetParticles一下保存进去,大功告成。

这里有1个坑要说明一下,拿到的粒子放到数组中时,数组要先声明现实例化,我当时只是声明了一个数组但是没有实例化,放的技能始终没有追踪。

最后效果图如下:

追踪中.png 追踪成功.png
上一篇下一篇

猜你喜欢

热点阅读