随机拖尾、协程、预置体

1,利用随机数处理拖尾特效(续上)

2,协程

3,预置件(预置体)

1,利用随机数处理拖尾特效(续上)

代码比较简单就是用随机数随便选一种粒子特效(有点像激光束的感觉),就不做过多讲解,补充上一博客!

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

public class BulletMove : MonoBehaviour
{

    public float BulletSpeed = 100f;//子弹移动速度
    private Vector3 velocity;
    public float destotryTime = 4.0f;//子弹销毁时间

    //VFX添加粒子效果
    public GameObject impactVFX1;
    public GameObject impactVFX2;
    public GameObject impactVFX3;
    public GameObject impactVFX4;
    public GameObject impactVFX5;
    public GameObject impactVFX6; 
    public GameObject impactVFX7;
    public GameObject impactVFX8;
    public int n=1;//烟花选择
    public float VFXLifetime=0.25f;//VFX销毁时间
    public Transform Bullet;//子弹

    //随机拖尾选择

    void Start()
    {
        velocity = transform.forward * BulletSpeed;
        Destroy(gameObject, destotryTime);
        n = (int)Random.Range(1, 9);
    }

    void Update()
    {
        
        Fire( n);

    }
    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Wall" || other.tag == "Robot")
        {
            Destroy(gameObject);
        }
    }
    private void Fire(int n)//进行选择然后调用
    {
        if(n==1)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX1, Bullet.position, Bullet.rotation);
            Destroy(impactVFXInstance, VFXLifetime);
            transform.position += velocity * Time.deltaTime;
        }
        if (n == 2)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX2, Bullet.position, Bullet.rotation);
            Destroy(impactVFXInstance, VFXLifetime);
            transform.position += velocity * Time.deltaTime;
        }
        if (n == 3)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX3, Bullet.position, Bullet.rotation);
            Destroy(impactVFXInstance, VFXLifetime);
            transform.position += velocity * Time.deltaTime;
        }
        if (n == 4)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX4, Bullet.position, Bullet.rotation);
            Destroy(impactVFXInstance, VFXLifetime);
            transform.position += velocity * Time.deltaTime;
        }
        if (n == 5)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX5, Bullet.position, Bullet.rotation);
            Destroy(impactVFXInstance, VFXLifetime);
            transform.position += velocity * Time.deltaTime;
        }
        if (n == 6)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX6, Bullet.position, Bullet.rotation);
            Destroy(impactVFXInstance, VFXLifetime);
            transform.position += velocity * Time.deltaTime;
        }
        if (n == 7)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX7, Bullet.position, Bullet.rotation);
            Destroy(impactVFXInstance, VFXLifetime);
            transform.position += velocity * Time.deltaTime;
        }
        if (n == 8)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX8, Bullet.position, Bullet.rotation);
            Destroy(impactVFXInstance, VFXLifetime);
            transform.position += velocity * Time.deltaTime;
        }

    }
}

2,协程

                        协程Coroutine                                   普通函数

协程可以在运行到特定指令后返回,等下一帧或者特定时间后继续运行

普通函数会在返回前执行完所有的指令,意味着函数内的指令会在一帧内完成

在Unity运行时,调用协程就是开启了一个IEnumerator(迭代器),协程开始执行,在执行到yield return之前和其他的正常的程序没有差别,但是当遇到yield return之后会立刻返回,并将该函数暂时挂起。在下一帧遇到FixedUpdate或者Update之后判断yield return 后边的条件是否满足,如果满足向下执行。

协调程序主要是在Update()方法之后,LateUpdate()方法之后调用!

协程的主要应用:协程不是只能做一些简单的延迟,如果只是单纯的暂停几秒然后再执行就完全没有必要再开启一个线程了。协程真正的作用是分步做一些比较耗时的事情,比如加载游戏资源......

IEnumerator 函数名()//协程函数的返回值
{
    内部通常为一个循环

    yield return null;相当于每帧循环一次

    或者yield return new WaitForSeconds(0.1f);
    //等待0.1秒继续进入这个协程,直到循环结束
}

可以通过StopCoroutine(停止当前协程)或者StopAllCoroutines(停止所有协程)停止协程。

3,预置件(预置体)

预制件Prefab的作用

        1)可重用的有特定组件、属性和子物体的游戏对象。

        2)类似于模板,将物体按照模板在场景中实例化。

        3)对预制件的修改会影响到所有实例化的物体。

可重复利用销毁后直接在Prefab里面直接取!

 在脚本中使用Instantiate对预置体进行“提取”,到达一直用的效果(比如子弹)

比如在1中我用到了子弹预置体和VFX预置体.....

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

致奋斗的自己

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

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

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

打赏作者

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

抵扣说明:

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

余额充值