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);
    }
}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只学习的小鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值