unity如何制作随机生成器

这篇具有很好参考价值的文章主要介绍了unity如何制作随机生成器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随机生成器的制作至少应具备四个个要素:需要随机生成的物体、物体随机生成的间隔时间、每生成一次的物体个数、一定时间后销毁物体。

其中最关键的问题是如何间隔一定时间生成,这里提供两种思路:1.运用协程。2.做个计时器。

1.通过协程制作随机生成器。

在这里我们需要初步了解一下协程。

首先,我们常用的函数方法是没有状态的,等到它return后,它里面包含的所有局部变量就消失了,但是在协程中我们可以在一个函数中多次返回,局部变量被当做状态储存在协程函数中,直到最后一次reurn,协程的状态才被清除,即拥有随意暂停功能。

通俗来讲,协程的主要功能就是:你写一段顺序的代码,随后标明哪里需要暂停,它在下一帧或是一段时间后,系统会继续执行这段代码。

实现这个功能需要yield语句,即使用yield语句时,协程会暂停执行,并在下一帧自动恢复。

其中yield return new WaitForSeconds(x);意味着等待x秒,一段指定的时间延迟之后继续执行。

还需要StartCoroutine()方法启动协程。StartCoroutine()方法在第一个yield返回时返回,不过可以生成结果,直到协程结束。

同时,协程的方法必须写在IEnumerator中。

而既然协程可以随意暂停,我们随机生成功能倒可以给它制造一个while死循环。具体代码如下:

public class randomizer : MonoBehaviour {

    public GameObject ball;
    public float TimeJG;
    public int buildNumbers;

    void Start()
    {
        StartCoroutine(enumerator());
    }

    IEnumerator enumerator()
    {
        while (true)
        {
            for (int i = 0; i < buildNumbers; i++)
            {
                GameObject newball = Instantiate(ball);
                float X = Random.Range(1, 5);
                float Y = Random.Range(1, 5);
                float Z = Random.Range(1, 5);
                newball.transform. position = new Vector3(X, Y, Z);
                Destroy(newball, 8);
            }
            yield return new WaitForSeconds(TimeJG);
        }

    }
}

具体操作:层级窗口中创建一个空物体,可命名为randomizer,把脚本绑定给它,因为我们创建了一个GameObject类的游戏对象,所以外界需要先把层级窗口中需要随机生成的物体拖入project窗口中创建好预制体,再将预制体拖入代码中命名的ball里;同时在TimeJG中输入需要的时间间隔,在buildNumbers中输入每次生成需要的个数。然后在游戏中获取到随机生成的坐标范围,打开代码调整,分别将X、Y、Z轴的范围数值在脚本中对应修改,另外定时销毁游戏物体时间也可自行修改。

2.通过制作计时器来实现定时随机生成功能。

在FixedUpdate()方法中默认固定0.02s调用一次,假设我们声明时间间隔float TimeJG = 2秒,通过

TimeJG = TimeJG -Time.deltaTime;语句来简易的实现倒计时,当时间减到小于0时,执行我们需要的代码,但在判断中需要重新给TimeJG赋值间隔时间,否则生成一次就跳出判断停止了。具体代码如下:

public class timeLIMIT1 : MonoBehaviour {

    public GameObject ball;
    float TimeJG = 2;

    void FixedUpdate()
    {
        TimeJG = TimeJG - Time.deltaTime;
        if (TimeJG < 0)
        {
            GameObject newball = Instantiate(ball);
            TimeJG = Random.Range(1.5f, 2.0f);
            float X = Random.Range(1, 5);
            float Y = Random.Range(1, 5);
            float Z = Random.Range(1, 5);
            newball.transform.position = new Vector3(X, Y, Z);
            Destroy(newball, 8);
        }
    }
}

其具体操作和第一种方法类似,将预制体拖入GameObject类的ball中,再打开代码设置那三个参数:间隔时间,随机生成坐标,定时摧毁时间。文章来源地址https://www.toymoban.com/news/detail-406092.html

到了这里,关于unity如何制作随机生成器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 伪随机生成器(rand函数),随机数种子(srand函数)详细解读与分析:

    a.生成随机数; b.生成0~100以内的随机数 c.随机数的连续输出及其连续输出情况讲解与分析 首先我们来看一下rand函数(伪随机数生成器):   rand函数,即伪随机数生成器,该函数返回类型为整型,没有参数,即产生一个在(0-rand_max(十六进制的ox7ffff转化为整数即32767)的一个

    2024年02月11日
    浏览(50)
  • 构建Python随机密码生成器:保障账户安全的简易工具

    💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】 🤟 基于Web端打造的:👉轻量化工具创作平台 💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 密码安全是当前数字时代的一个重要议题。在保护个人信息和账户安全方面,安全且可靠的密码是至关重

    2024年02月03日
    浏览(52)
  • Verilog 实现伪随机数生成器(线性反馈移位寄存器)

    参考文献1 不简单的进行移位,而是在移位的基础上加上异或门,如题目所示,这就相当于每进行一次移位,寄存器中的值会发生改变,一直移动,一直改变,就形成了伪随机数。

    2024年02月09日
    浏览(56)
  • R语言【base】——.Random.seed(),RNGkind(),RNGversion(),set.seed():随机数生成器

    Package  base  version 4.2.0 .Random.seed是一个整数向量,包含R中生成随机数的随机数生成器(RNG)状态。它可以保存和恢复,但不应该被用户更改。 RNGkind是一个更友好的接口,用于查询或设置正在使用的RNG类型。 RNGversion在早期的R版本中可以用来设置随机生成器(为了再现性)。 set

    2024年02月22日
    浏览(52)
  • 【安全密钥交换协议】基尔霍夫定律-约翰逊噪声(KLJN)方案的随机数生成器攻击研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 算例1 2.2 算例2  2.3 算例3 🎉3 参考文

    2024年02月04日
    浏览(55)
  • bug:进行安全漏洞扫描被报Insecure Randomness:标准的伪随机数值生成器不能抵挡各种加密攻击。

    使用了 Math.random() 被安全漏洞扫描出high等级的漏洞。尽管我用了 Math.random() 后,再用了一些手段处理这个随机数,还是被安全漏洞报警。 由于 Math.random() 是统计学的 PRNG,攻击者很容易猜到其生成的字符串。推荐使用密码学的PRNG。 在 JavaScript 中,常规的建议是使用 Mozilla

    2024年02月04日
    浏览(45)
  • 【安全密钥】对基尔霍夫-洛-约翰逊噪声(KLJN)安全密钥交换协议的统计随机数生成器攻击(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文章

    2024年04月12日
    浏览(52)
  • 如何使用 Haiper AI 视频生成器

    使用步骤 1. 选择视频模板 Haiper AI 提供了各种视频模板供您选择,包括: 介绍视频 产品演示 解释性视频 动画视频 音乐视频 白板动画   2. 输入您的文字描述 在您选择了一个模板之后,您就可以输入您的文字描述了。您可以使用简单的语言描述您想要创建的视频,Haiper AI 会

    2024年04月09日
    浏览(56)
  • 2.4 如何在FlinkSQL使用DataGen(数据生成器)

    FLinkSQL中可以使用内置的DataGen SQL 连接器来生成测试数据 官网链接:DataGen SQL 连接器 随机数数据生成器支持随机生成 char、varchar、binary、varbinary、string 类型的数据 它是一个无界流的数据生成器 运行结果: 序列数据生成器,可以根据指定的起始值和结束值生成连续的整数数

    2024年02月05日
    浏览(37)
  • 从文本创建艺术,AI图像生成器的数据集是如何构建的

    AIGC系列分享是整数智能推出的一个全新分享系列,在这个系列中,我们将介绍与AIGC概念相关的有趣内容。AIGC系列主要分为以下几篇文章: 被称为下一代风口的AIGC到底是什么? AIGC的数据集构建方案分享系列 从文本创建艺术,AI图像生成器的数据集是如何构建的 ChatGPT的数据

    2024年02月11日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包