0.介绍
玩游戏时,我们放了一个大招希望一下击中敌人,当然敌人也不会傻傻地呆在那里不动,今天要实现的一个功能就是这个样子,如图:
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
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个坑要说明一下,拿到的粒子放到数组中时,数组要先声明现实例化,我当时只是声明了一个数组但是没有实例化,放的技能始终没有追踪。
最后效果图如下: