IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 周学习内容 -> 正文阅读

[游戏开发]周学习内容

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预置体.....

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:21:59  更:2021-12-07 12:22:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:29:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码