unity3d5.0 随机数_unity3d中5.5随机数生成 - CSDN
  • 在使用系统所提供的Random随机数产生时,往往会得到与上次一致的随机数,让人很尴尬,如何产生与上次不同的随机数呢?很简单(⊙o⊙)哦。。。

    说明:

    在使用系统所提供的Random随机数产生时,往往会得到与上次一致的随机数,让人很尴尬,如何产生与上次不同的随机数呢?很简单(⊙o⊙)哦。。。

    代码展示:

    using UnityEngine;
    using System.Collections;
    
    public class random : MonoBehaviour
    {
        //最后输出的与上次随机数不同的随机数
        int getRangeNum = 0;
        //每次随机产生的随机数,用于与上次进行比较
        int rangeRadomNum = 0;
        //用于统计每次输出的数,方便观察
        int numCount = 0;
        // Use this for initialization
        void Start()
        {
        }
        // Update is called once per frame
        void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                numCount++;
                do
                {
                    rangeRadomNum = Random.Range(0, 5);
                }
                while (getRangeNum == rangeRadomNum);
                getRangeNum = rangeRadomNum;
    
                Debug.Log("第" + numCount.ToString() + "得到的随机数:" + getRangeNum);
            }
        }
    }

    测试如下:



    展开全文
  • Unity 3D - Random类

    2018-02-05 12:00:49
    Unity 3D - Random类 : Random类可以用来生成随机数。 Random成员变量 : 成员变量 说明 seed 随机数生成器种子 value 返回一个0~1之间随机浮点数,包含0到1 insideUnitSphere 返回位于半径为...

    Unity 3D - Random类 :

    Random类可以用来生成随机数。

    Random成员变量 :

    成员变量 说明
    seed 随机数生成器种子
    value 返回一个0~1之间随机浮点数,包含0到1
    insideUnitSphere 返回位于半径为1的球体内的一个随机点(只读)
    insideUnitCircle 返回位于半径为1的圆内的一个随机点(只读)
    onUnitSphere 返回半径为1的球面上的一个随机点(只读)
    rotation 返回一个随机旋转(只读)
    rotationUniform 返回一个均匀分布的随机旋转(只读)

    Random成员函数 :

    成员函数 说明
    Range 返回一个min和max之间的一个随机数 .

    Range注意事项 :

    如果类型为Int , 如 :

    Random.Range(0,5);

    那么取值范围为[0,5) , 可以取到0 , 但是无法取到5 .

    如果类型为Float , 如 :

    Random.Range(0.0f, 5.0f);

    那么取值范围为[0,5] , 可以取到0 , 也可以取到5 .

    展开全文
  • Unity 3D Random类

    2018-08-03 14:06:31
    Unity 3D - Random类 Random类可以用来生成随机数。 Random成员变量 : seed : 随机数生成器种子 value 返回一个0~1之间随机浮点数,包含0到1 insideUnitSphere: 返回位于半径为1的球体内的一个随机点...

    Unity 3D - Random类

    Random类可以用来生成随机数。

    Random成员变量 :

    seed : 随机数生成器种子 value 返回一个0~1之间随机浮点数,包含0到1
    insideUnitSphere: 返回位于半径为1的球体内的一个随机点(只读)
    insideUnitCircle: 返回位于半径为1的圆内的一个随机点(只读)
    onUnitSphere : 返 回半径为1的球面上的一个随机点(只读) rotation 返回一个随机旋转(只读)
    rotationUniform: 返回一个均匀分布的随机旋转(只读)

    Random成员函数 :

    成员函数 说明 Range 返回一个min和max之间的一个随机数 .
    Range注意事项 :

    如果类型为Int 如 :

    • Random.Range(0,5)
      那么取值范围为[0,5) , 可以取到0 , 但是无法取到5 .

    如果类型为Float , 如 :

    • Random.Range(0.0f, 5.0f)
      那么取值范围为[0,5] , 可以取到0 , 也可以取到5 .
    展开全文
  • Unity3D实现粒子光环效果参考效果: http://i-remember.fr/en

    Unity3D实现粒子光环效果


    参考效果: http://i-remember.fr/en
    基本思路如下
    1. 使用unity3d自带的粒子系统
    2. 为圆环设置最大半径maxR和最小半径minR
    3. 使用x=R*sin(angle), y=R*cos(angle)来计算每个粒子的坐标
    4. 将粒子数组设置到选定的粒子系统中

    下面说说具体步骤

    一.
    设置Main Camera的投影方式为正交投影,将背景设置为黑色,方便观察粒子效果
    摄像机设置

    接着新建一个Empty GameObject,用来挂载粒子系统,注意这个空物体要放在摄像机的投影范围内,为这个物体添加粒子系统,并且按图中方式设置粒子系统
    粒子系统设置
    主要是要将Looping选项和Play OnAwake选项去掉,同时把Emission Rate设为0

    二.
    新建C#脚本,用来控制粒子系统
    定义点结构,用来表示粒子的坐标信息

    public class Point {
        public float angle;
        public float radius;
    
        private float x = 0.0f;
        private float y = 0.0f;
    
    
        public void Cal() {
            float temp = angle / 180.0f * Mathf.PI;
            y = radius * Mathf.Sin(temp);
            x = radius * Mathf.Cos(temp);
        }
        public Point(float angle, float radius) {
            this.angle = angle;
            this.radius = radius;
        }
    
        public float getX() {
            return x;
        }
    
        public float getY() {
            return y;
        }
    }

    三.
    声明粒子系统和粒子系统的相关参数

        private ParticleSystem particleSystem;
        //粒子数组
        private ParticleSystem.Particle[] particleArray;
        //粒子坐标集合
        private Point[] points;
    
        //颜色梯度
        public Gradient grad;
        //控制透明度的变化
        private GradientAlphaKey[] gradAplp;
        //控制颜色的变化
        private GradientColorKey[] gradCol;
    
        //粒子参数
        public int count = 1000;
        public float size = 0.5f;
        public float minRadius = 5.0f;
        public float maxRadius = 12.0f;
        //控制主方向是顺时针还是逆时针
        public bool clockwise = true;
        public float speed = 0.5f;

    四:
    初始化粒子坐标,在一开始就生成一个圆环

    private void Init() {
            int i;
            for (i = 0; i < count; i++) {
                float midRadius = (minRadius + maxRadius) / 2.0f;
                float minRate = Random.Range(1.0f, midRadius / minRadius);
                float maxRate = Random.Range(midRadius / maxRadius, 1.0f);
                float radius = Random.Range(minRadius * minRate, maxRadius * maxRate);
                float angle = Random.Range(0.0f, 360.0f);
                points[i] = new Point(angle, radius);
                points[i].Cal();
                particleArray[i].position = new Vector3(points[i].getX(), points[i].getY(), 0f);
            }
    
            particleSystem.SetParticles(particleArray, particleArray.Length);
    }

    这里为了让粒子尽量集中在圆环的中间,首先计算出最大半径和最小半径之间的平均值,这个值就是圆环的中间,分别求出一个在最小半径和中间之间的一个随机比率以及中间值和最大半径之间的一个随机比率,再在这两个随机比率对应的半径值之间求出一个随机值就可以让粒子的坐标集中在中间值附近,根据概率的知识可知,求出的两个随机比率是符合正太分布的,所以这两个比率的中间值也是接近于圆环的中间,由于这两个比率对应的半径值中选取随机数也是符合正太分布的,所以会让大部分粒子集中在圆环中间的位置

    四:
    设置颜色梯度,我希望圆环在运动的时候能够根据当前的位置对颜色和透明度做出相应的变化

    // Update is called once per frame
        void Update () {
            int i;
            int level = 7; //将整个粒子系统分成七层,每一层的旋转方向和速度都有差异
            for (i = 0; i < count; i++) {
    
                if (i % level > 3)
                {
                    //外层顺时针旋转
                    points[i].angle -= (i % level + 1) * speed;
                } else {
                    //内层逆时针旋转
                    points[i].angle += (i % level + 1) * speed;
                }
    
                points[i].angle = (points[i].angle + 360.0f) % 360.0f;
                //粒子旋转半径的微小变化,能够让粒子运动体现出随机性
                points[i].radius += 0.04f * (Mathf.PerlinNoise(points[i].angle/360.0f, 0.0f))-0.02f;
                //Debug.Log(points[i].radius);
                points[i].Cal();
                particleArray[i].color = grad.Evaluate(Time.time*0.1f);
                particleArray[i].position = new Vector3(points[i].getX(), points[i].getY(), 0.0f);
            }
            particleSystem.SetParticles(particleArray, particleArray.Length);
    }

    这里面为了实现样例中的效果,需要让不同层次的粒子旋转方向不同,所以我将粒子分成了7层,每一层都有自己的旋转方向,当然这里还可调整旋转增量的参数,让旋转增量和运动半径产生关联,实现外围的粒子半径增量更大的效果,同时我使用Perlin噪声让粒子的运动半径发生随机的改变,然粒子的运动看起来更加无序,当然每次Update也需要重新计算梯度的变化

    最终效果(不同时期的运行效果,可以看到粒子的运行半径和圆环形状,透明度等都有变化):
    这里写图片描述

    这里写图片描述

    这里写图片描述

    完整代码

    using UnityEngine;
    using System.Collections;
    
    
    public class Point {
        public float angle;
        public float radius;
    
        private float x = 0.0f;
        private float y = 0.0f;
    
    
        public void Cal() {
            float temp = angle / 180.0f * Mathf.PI;
            y = radius * Mathf.Sin(temp);
            x = radius * Mathf.Cos(temp);
        }
        public Point(float angle, float radius) {
            this.angle = angle;
            this.radius = radius;
        }
    
        public float getX() {
            return x;
        }
    
        public float getY() {
            return y;
        }
    }
    public class PCircle : MonoBehaviour {
    
        private ParticleSystem particleSystem;
        //粒子数组
        private ParticleSystem.Particle[] particleArray;
        //粒子坐标集合
        private Point[] points;
    
        //颜色梯度
        public Gradient grad;
        //控制透明度的变化
        private GradientAlphaKey[] gradAplp;
        //控制颜色的变化
        private GradientColorKey[] gradCol;
    
        //粒子参数
        public int count = 1000;
        public float size = 0.5f;
        public float minRadius = 5.0f;
        public float maxRadius = 12.0f;
        //控制主方向是顺时针还是逆时针
        public bool clockwise = true;
        public float speed = 0.5f;
    
        private void Init() {
            int i;
            for (i = 0; i < count; i++) {
                float midRadius = (minRadius + maxRadius) / 2.0f;
                float minRate = Random.Range(1.0f, midRadius / minRadius);
                float maxRate = Random.Range(midRadius / maxRadius, 1.0f);
                float radius = Random.Range(minRadius * minRate, maxRadius * maxRate);
                float angle = Random.Range(0.0f, 360.0f);
                points[i] = new Point(angle, radius);
                points[i].Cal();
                particleArray[i].position = new Vector3(points[i].getX(), points[i].getY(), 0f);
            }
    
            particleSystem.SetParticles(particleArray, particleArray.Length);
        }
        // Use this for initialization
        void Start () {
            particleSystem = this.GetComponent<ParticleSystem>();
            particleArray = new ParticleSystem.Particle[count];
            points = new Point[count];
            particleSystem.startSpeed = 0;
            particleSystem.startSize = size;
            particleSystem.maxParticles = count;
            particleSystem.Emit(count);
            particleSystem.GetParticles(particleArray);
    
            grad = new Gradient();
            gradAplp = new GradientAlphaKey[5];
            gradCol = new GradientColorKey[5];
            float delt = 0f;
            //设置梯度变化有五个程度,且是均匀变化
            for (int i = 0; i < 5; i++) {
                gradAplp[i].time = delt;
                gradAplp[i].alpha = delt;
                delt += 0.2f;
            }
    
            gradCol[0].time = 0.0f;
            gradCol[0].color = Color.black;
            gradCol[1].time = 1.0f;
            gradCol[1].color = Color.white;
            grad.SetKeys(gradCol, gradAplp);
            Init();
        }
    
        // Update is called once per frame
        void Update () {
            int i;
            int level = 7; //将整个粒子系统分成七层,每一层的旋转方向和速度都有差异
            for (i = 0; i < count; i++) {
    
                if (i % level > 3)
                {
                    //外层顺时针旋转
                    points[i].angle -= (i % level + 1) * speed;
                } else {
                    //内层逆时针旋转
                    points[i].angle += (i % level + 1) * speed;
                }
    
                points[i].angle = (points[i].angle + 360.0f) % 360.0f;
                //粒子旋转半径的微小变化,能够让粒子运动体现出随机性
                points[i].radius += 0.04f * (Mathf.PerlinNoise(points[i].angle/360.0f, 0.0f))-0.02f;
                //Debug.Log(points[i].radius);
                points[i].Cal();
                particleArray[i].color = grad.Evaluate(Time.time*0.1f);
                particleArray[i].position = new Vector3(points[i].getX(), points[i].getY(), 0.0f);
            }
            particleSystem.SetParticles(particleArray, particleArray.Length);
        }
    }
    

    当然也可以自己写shader,毕竟unity3d自带的光效还是不太灵活,鉴于水平问题(本人太渣),这里就不做了

    展开全文
  • Destory(gameobject) Destory(gameobject,time) //销毁对象...) //找对象Instantiate(gameobject,positon,rotation) 还有很多其他重载Random.Range(0,1) //0-1随机数StartCoroutines(fucntion()) Start...
  • 一、前言 这是一款经典的小游戏,是Win系统自带的小游戏,是一款大众类的...原文地址:http://noobtuts.com/unity/2d-minesweeper-game 原文出处:noobtuts 提示:这是个论坛性质的网站,里面有很多小游戏的教程,...
  • Unity3d-粒子光环特效

    2018-05-29 17:17:55
    要求 ... 当鼠标hover到图一中间的+号圆圈中间时,光环会收缩成图二的状态,具体效果可自行前往网站体验~ 我们需要模仿这个效果并尝试用粒子流编程控制来实现。 ...光环在收缩前较为分散,位于光环中间的部分粒子较...
  • ColorHSV生成颜色的值 Quaternion四元数表示旋转的,表示朝向,旋转时候想x,z是自身坐标系x,z旋转,y轴旋转是根据世界坐标系y轴旋转,rotation的x,y,z是欧拉角,四元素计算旋转值可以转换为欧拉角 ...
  • 用粒子系统实现一个光环特效
  • 随机数在CPU中可以有rand()这类函数,但是GPU中却没有。如果想直接在GPU中使用随机数?有一个折中的方法,先再CPU中产生一个随机数... 1:主要在Directx中生成并初始化一个存储了随机数的纹理ID3D11Texture1D m_pRa
  • [Unity3d]Player Settings导出设置 分类: Unity3D2013-12-22 14:25 413人阅读 评论(0) 收藏 举报 目录(?)[+] Player Settings is where you define various parameters (platform ...
  •  在Unity中,脚本是实现游戏功能的主要方式之一,而变量是脚本中的重要元素,通过变量的使用,可以完成数据的引用,数学模型的定义及完成各种计算等。  • 主要支持以下三种脚本:  1)JavaScript  2)C#  3)...
  • Unity3D脚本中文系列教程(十二) ◆ function GetPixel(x: int, y: int): Color 描述:返回坐标(x, y)处的像素颜色。如果像素坐标超出边界(大于宽/高或小于0),它将给予纹理的包裹模式来限制或重复。如果你正在从...
  • Unity3D游戏开发-宣雨松 序 它支持JavaScript、C#、Boo三种脚本语言 JavaScript语言更适合初学者 双击游戏场景文件即可打开游戏工程 Scene.unity JavaScript语言编写的脚本中,使用UTF-8编码格式 C#语言...
  • Unity3D笔记 英保通二

    2019-01-08 02:04:29
    一、访问另一个物体 1、代码中定义一个public的物体 例如:var target:Transform; 在面板上直接拖拽一个物体赋值给target 2、通过GameObject.Find("物体名称") 3、通过Tag 代码:GameObject....
  • Unity-3D 粒子光圈效果

    2016-05-09 14:15:29
    首先,我们先来看一下它的效果:一、网站效果展示 二、创建粒子 设置相关参数 把相机背景色调黑 三、编写脚本 1、新建脚本:ParticleRotate.cs,并将其拖到Paticle System中。 2、创建粒子数组,初始化。...
  • Unity3D 脚本参考

    2012-02-01 09:06:56
    Unity3D 脚本参考 核心提示:一、脚本概览这是一个关于Unity 内部脚本如何工作的简单概览。Unity 内 部的脚本,是通过附加自定义脚本对象到游戏物体组成的。在脚本对象内部不同志的函数被 特定的事件调用。最常用...
  • 欢迎大家光临我的博客!一、Transform对象 ①位移 ②旋转 ③缩放位移举例: //移动物体 Transform.Translate(Vector3.forward); Transform.Translate new Vector3(10, 0,0); 旋转举例: //旋转一个...
  • unity3d 脚本参考-技术文档  核心提示:一、脚本概览这是一个关于Unity内部脚本如何工作的简单概览。Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的。在脚本对象内部不同志的函数被特定的...
  • unity3d questions!

    2019-07-16 20:33:03
    UnityVS: Web Target with Web Security enabled will prevent opening files and communication with UnityVS. 解决方法 直接在 unity中 File-》build setting -> 更换一个平台就行,不要选择web的 just go ...
1 2 3
收藏数 56
精华内容 22
关键字:

unity3d5.0 随机数