範囲攻撃は突き抜けるので、縦に並んでいる敵には有利ですね。
最後は、ダブルノックアウトw
assetStoreのこのパーティクルエフェクトを買いました。
Pinwheel Fantasy Effect
https://www.assetstore.unity3d.com/jp/#!/content/50310
ドキュメントを見ると、作者はベトナムの方でした。
30種類ぐらい入って$2ぐらいでお得でした。
パーティクルシステムも勉強しないと、ちょっといじりたいなと思ってもなかなかできないですね。
Vector3 pos = transform.position + Vector3.up*2.2f+transform.forward*1;
GameObject obj;
if (type == 3 ) // 魔法使い
{
obj = (GameObject)Instantiate(Resources.Load("Magic"), pos, transform.rotation);
obj.GetComponent<Magic>().power = attackPower;
obj.GetComponent<Magic>().enemy = enemy;
obj.GetComponent<Magic>().target = targetcc.gameObject;
Vector3 pos2 = transform.position + Vector3.up * 0f;
GameObject obj2;
obj2 = (GameObject)Instantiate(Resources.Load("VenomSpell"), pos2, transform.rotation);
Destroy(obj2, 3f);
}
Magicはトリガー付きの球です(MeshRenderが非表示)。攻撃力とターゲットを設定して生成。
緑色の魔法陣エフェクトを自分の足元で生成。Destroyは第二引数に時間を設定しておくと、指定時間後に自動削除されるので便利です。
親から、攻撃力と敵を与えられて生成される。Startで敵の方向ベクトルを作っておいて、後はひたすらその方向に移動していく。
球の大きなトリガーがついているので、触れた敵のGetDamage()を呼び出してダメージを与えます。
これが弓では何か敵に当たると、そこでデストロイしてますが、範囲攻撃の魔法はDestoryしないので、指定時間までは連続で殺傷できます。
ここでは寿命を3秒にしてますが、放っているキャラに応じて変えたい場合は、powerのように外部から値を渡せばいいです。
magic.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Magic : MonoBehaviour
{
public float power;
public GameObject target;
public int enemy;
Character targetcc;
Main main;
float timer;
Vector3 fw;
void Start()
{
main = GameObject.Find("Main").GetComponent<Main>();
timer = 3f;
targetcc = target.GetComponent<Character>();
fw = (target.transform.position + Vector3.up * 2.5f - transform.position).normalized;
Vector3 pos2 = transform.position + Vector3.up * 0f;
GameObject obj2;
obj2 = (GameObject)Instantiate(Resources.Load("IceSpear2"), pos2, transform.rotation,this.transform);
Destroy(obj2, 3f);
}
void Update()
{
if (timer > 0) timer -= Time.deltaTime;
else
{
Destroy(this.gameObject);
return;
}
transform.position += fw * Time.deltaTime * 7;
}
void OnTriggerEnter(Collider other)
{
Character cc = other.GetComponent<Character>();
//Debug.Log(other.name);
if (cc != null && cc.enemy!=enemy ) cc.getDamage(power);
}
}
Start()で、Destroy(this.gameObject,3f)としておけばupdate()でtimer更新はいらないですね。