unity3d 实现LOL英雄的寒冰的(万箭齐发)

先上效果图

放到人物身上的脚本Thefanattacks

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

public class Thefanattacks : MonoBehaviour
{
    public string BulletOrigin;//子弹父类的路径
    public string bulletModelPath; //子弹模型路径
    public int angle;//扇形的角度
    public int interval;//间隔(间隔最好是Mathf.Abs(count / interval)*2 的偶数,负的也许只不过有一些偏差)
    Vector3[] vectors;//数组
    int sum;//记录最早角度(-(int)(angle/2))得到你输入的扇形角度的一半,负数角度
    int count;//得到你输入的扇形角度的一半,负数角度
    // Start is called before the first frame update
    void Start()
    {
        sum = -(int)(angle/2);
        count= -(int)(angle / 2);//得到你输入的扇形角度的一半,负数角度
        int number = Mathf.Abs(count / interval)*2;
        if (number % 2 == 0)//判断是否是偶数
        {
            vectors = new Vector3[Mathf.Abs(count / interval) * 2 + 1];
        }
        //else//判断是否是基数
        //{
        //    vectors = new Vector3[Mathf.Abs(count / interval) * 2 + 2];
        //}
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Q))
        {
            if(vectors!=null)
            {
                Vector3 bornPos; //世界空间
                Quaternion bornDir; //世界空间下的子弹方向
                for (int i = 0; i < vectors.Length; i++)
                {
                    vectors[i] = Quaternion.Euler(new Vector3(0, count, 0)) * Vector3.forward;
                    count += interval;
                }
                bornPos = transform.TransformPoint(new Vector3(0, 0, 0));
                for (int i = 0; i < vectors.Length; i++)
                {
                    vectors[i] = transform.TransformDirection(vectors[i]); //拿到世界空间下的方向表示
                }
                for (int i = 0; i < vectors.Length; i++)
                {
                    bornDir = Quaternion.LookRotation(vectors[i]);
                    var prefabBulletOrigin = Resources.Load<GameObject>("Prefabs/" + BulletOrigin);//加载
                    var prefabBulletModel = Resources.Load<GameObject>($"Prefabs/Bullet/{bulletModelPath}");//加载
                    var bulletOriginGo = GameObject.Instantiate(prefabBulletOrigin, bornPos, bornDir);//实例化
                    var bulletModelGo = GameObject.Instantiate(prefabBulletModel, bulletOriginGo.transform);//实例化认父
                    bulletModelGo.transform.localPosition = Vector3.zero;
                    bulletModelGo.transform.localEulerAngles = Vector3.zero;
                }
                count = sum;
            }
            
        }
    }
}

子弹的移动脚本Move

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

public class Move : MonoBehaviour
{
    public int speet;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(transform.forward*Time.deltaTime* speet,Space.World);
        Destroy(gameObject, 5);
    }
}

 


版权声明:本文为qq_57896821原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。