Unity API详解——Random类

news2024/11/23 15:03:45

Random类是Unity中用于产生随机数的类,不可以实例化,只有静态属性和静态方法。本博客主要介绍了Random类的一些静态属性。

文章目录

    • 一、Random类静态属性
      • 1、基本语法
      • 2、功能说明
      • 3、代码实现
    • 二、rotationUniform属性
      • 1、基本语法
      • 2、功能说明
      • 1、规范化向量:
      • 2、向量加法:
      • 3、向量减法:
      • 4、向量乘法:
      • 5、向量除法:
      • 6、计算两个向量的点积:
      • 7、计算两个向量的叉积
      • 8、将向量缩放为指定大小:
      • 9、对向量进行旋转变换:
    • 三、实例
      • 1、创建物体
      • 2、计分系统
    • 四、总结

一、Random类静态属性

在Random类中,涉及的静态属性有insideUnitCircle属性、insideUnitSphere属性、onUnitSphere属性、rotationUniform属性、rotation属性和seed属性。由于属性insideUnitCircle、insideUnitSphere和onUnitSphere功能相近,属性rotationUniform和rotation的功能也相近,于是把它们放到一起介绍,接下来详细介绍这些属性。

insideUnitCircle属性:圆内随机点

1、基本语法

public static Vector2 insideUnitCircle { get; } 

2、功能说明

此属性用于返回一个半径为1的圆内的随机点坐标,返回值为Vector2类型

notes:insideUnitSphere属性和onUnitSphere属性功能相似。

  • insideUnitSphere属性:返回一个半径为1的球内的随机点坐标,返回值为Vector3类型
  • insideUnitSphere属性:返回一个半径为1的球表面的随机点坐标,返回值为Vector3类型

3、代码实现

通过实例演示属性insideunitCircle、insideUnitSphere和onUnitSphere的使用

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

public class insideUnitCircle_test : MonoBehaviour
{
    public GameObject go;
    void Start()
    {
        //每隔0.4秒执行一次use_rotationUniform方法
        InvokeRepeating("use_rotationUniform", 1.0f, 0.4f);
    }

    void use_rotationUniform()
    {
        //在半径为5的圆内随机位置实例化一个GameObject对象
        //Vector2实例转为Vector3时,z轴分量默认为0
        Instantiate(go, Random.insideUnitCircle * 5.0f, Quaternion.identity);
        //在半径为5的球内随机位置实例化一个GameObject对象
        Instantiate(go, Vector3.forward * 15.0f + 5.0f * Random.insideUnitSphere, Quaternion.identity);
        //在半径为5的球表面随机位置实例化一个GameObject对象
        Instantiate(go, Vector3.forward * 30.0f + 5.0f * Random.insideUnitSphere, Quaternion.identity);
    }
}

在这段代码中,首先声明了一个公共的GameObject变量go,然后再方法use_rotationUniform中分别使用Random属性insideUnitCircle、insideUnitSphere和onUnitSphere的返回值作为实例化对象的参考位置,最后在Start方法中调用InvokeRepeating方法,每隔0.4秒执行一次use_rotationUniform方法。
在这里插入图片描述
在这里插入图片描述

二、rotationUniform属性

均匀分布特征

1、基本语法

public static Quaternion rotationUniform { get; } 

2、功能说明

此属性用于返回一个随机且符合均匀分布特征的rotation值。所谓均匀分布特征,简单来说就是指每个可能出现的随机数的概率是相等的。例如,设随机数产生函数f(x)=x%7,x的取值范围为[0,10],则当x从0增大到10时,出现f(x)=0的次数有两次,分别为当x=0和x=7时;而f(x)=5的机会只有一次,即x=5时,所以f(x)的序列不是均匀分布的随机分布。为了使得f(x)中每个值出现的概率相等,可以把x的取值范围扩展为[0,7n],其中n为正整数,这样f(x)产生每个值得概率就相等了。

静态方法英文解释中文说明
void LoadLevel(int index); void LoadLevel(string name);Loads the level by its name or index.根据场景名称和索引号加载场景
void LoadLevelAdditive(int index);void LoadLevelAdditive(string name);Loads a level additively.根据场景名称和索引号加载场景,但是当前场景的物体不销毁
** AsyncOperation LoadLevelAsync(int index); AsyncOperation LoadLevelAsync(string levelName);** Loads the level asynchronously in the background.异步加载场景
** AsyncOperation LoadLevelAdditiveAsync(int index); AsyncOperation LoadLevelAdditiveAsync(string levelName);**Loads the level additively and asynchronously in the background.异步加载场景而且当前物体不销毁
** void Quit();**Quits the player application.退出游戏
** void CancelQuit();** Cancels quitting the application. This is useful for showing a splash screen at the end of a game.取消应用退出。
** bool CanStreamedLevelBeLoaded(int levelIndex);**Can the streamed level be loaded?获得当前levelindex的场景是否被加载。
** void CaptureScreenshot(string filename, int superSize = 0);**Captures a screenshot at path filename as a PNG file.截屏。
** void OpenURL(string url);**Opens the url in a browser.在浏览器中访问网址
** AsyncOperation RequestUserAuthorization(UserAuthorization mode);**Request authorization to use the webcam or microphone in the Web Player.请求获得权限
** void ExternalCall(string functionName, params object[] args);**alls a function in the containing web page (Web Player only).在webplayer 调用一个javaScrip函数。
** void ExternalEval(string script);** Evaluates script snippet in the containing web page (Web Player only).在webplayer上执行javascrip片段。
** float GetStreamProgressForLevel(int levelIndex);**How far has the download progressed? [0…1].下载进度。
** bool HasUserAuthorization(UserAuthorization mode);**pCheck if the user has authorized use of the webcam or microphone in the Web Player.检测用户是否有webcam和手机在webpalyer的权限

1、规范化向量:

Vector3 normalized = position.normalized;

2、向量加法:

Vector3 vectorA = new Vector3(1.0f, 1.0f, 1.0f);
Vector3 vectorB = new Vector3(2.0f, 2.0f, 2.0f);
Vector3 sum = vectorA + vectorB;

3、向量减法:

Vector3 vectorA = new Vector3(1.0f, 1.0f, 1.0f);
Vector3 vectorB = new Vector3(2.0f, 2.0f, 2.0f);
Vector3 difference = vectorA - vectorB;

4、向量乘法:

Vector3 vectorA = new Vector3(1.0f, 2.0f, 3.0f);
Vector3 scaled = vectorA * 2.0f;

5、向量除法:

Vector3 vectorA = new Vector3(1.0f, 2.0f, 3.0f);
Vector3 scaled = vectorA / 2.0f;

6、计算两个向量的点积:

Vector3 vectorA = new Vector3(1.0f, 2.0f, 3.0f);
Vector3 vectorB = new Vector3(4.0f, 5.0f, 6.0f);
float dot = Vector3.Dot(vectorA, vectorB);

7、计算两个向量的叉积

Vector3 vectorA = new Vector3(1.0f, 2.0f, 3.0f);
Vector3 vectorB = new Vector3(4.0f, 5.0f, 6.0f);
Vector3 cross = Vector3.Cross(vectorA, vectorB);

8、将向量缩放为指定大小:

Vector3 vectorA = new Vector3(1.0f, 2.0f, 3.0f);
Vector3 scaled = Vector3.Scale(vectorA, new Vector3(2.0f, 2.0f, 2.0f));

9、对向量进行旋转变换:

三、实例

使用C#和Unity中的Vector3类开发的简单游戏示例。游戏的玩法非常简单,玩家需要控制一个小球,避开障碍物,尽可能多地吃到食物。

1、创建物体

首先,我们需要创建一个空物体并将其命名为“Ball”。将以下代码附加到该物体上,以使其能够移动:

using UnityEngine;

public class Ball : MonoBehaviour
{
    public float speed = 10f; // 移动速度

    private Rigidbody rb; // 刚体组件

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    // 移动
    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        rb.AddForce(movement * speed);
    }
}

这将使小球在水平和垂直方向上移动。接下来,我们需要创建一些障碍物和食物。为此,我们可以使用Unity的基本图形对象,如Cube和Sphere,并在它们上面添加随机的初始位置和不同的颜色。

2、计分系统

让我们为游戏添加一个计分系统。每当小球吃到一个食物时,分数将增加,并且游戏将生成一个新的食物。同样,每当小球撞到一个障碍物时,游戏将结束。

using UnityEngine;
using UnityEngine.UI;

public class GameController : MonoBehaviour
{
    public Text scoreText; // 文本组件
    public GameObject foodPrefab; // 食物对象
    public GameObject[] obstacles; // 障碍物对象数组
    public int foodCount; // 食物数量

    private int score = 0; // 分数

    // 初始化
    void Start()
    {
        // 创建障碍物
        for (int i = 0; i < obstacles.Length; i++)
        {
            Vector3 position = new Vector3(Random.Range(-10.0f, 10.0f), 0.5f, Random.Range(-10.0f, 10.0f));
            Instantiate(obstacles[i], position, obstacles[i].transform.rotation);
        }

        // 创建食物
        for (int i = 0; i < foodCount; i++)
        {
            Vector3 position = new Vector3(Random.Range(-10.0f, 10.0f), 0.5f, Random.Range(-10.0f, 10.0f));
            Instantiate(foodPrefab, position, foodPrefab.transform.rotation);
        }

        // 显示分数
        UpdateScoreText();
    }

    // 更新分数
    void UpdateScoreText()
    {
        scoreText.text = "SCORE: " + score;
    }

    // 加分
    public void AddScore(int value)
    {
        score += value;
        UpdateScoreText();
    }

    // 游戏结束
    public void GameOver()
    {
        // 显示游戏结束画面

        // 重载场景
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
}

在此代码中,我们使用了UnityEngine.UI命名空间中的Text组件来显示分数。每当小球吃到一个食物时,我们将在计分系统中加一分
在这里插入图片描述

四、总结

总之,Vector3是一个灵活且功能强大的类,非常适用于3D游戏场景中的各种数学计算。无论是计算两个向量之间的点积、叉积还是将向量缩放、旋转,都可以使用Vector3类轻松实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/490374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前沿探索,AI 在 API 开发测试中的应用

目录 一、引言二、AI 加持下的 API 设计1、NLP 在 API 设计中的应用2、DL 在 API 设计中的应用能力一&#xff1a;Apikit 如何利用 AI 生成最佳的 API 设计方案能力二&#xff1a; Apikit 如何利用 AI 提高 API 的可用性和易用性 三、AI 加持下的 API 开发能力三&#xff1a;Ap…

k8s二进制安装部署(详细)(3主2从)

目录 kubeadm 和二进制安装 k8s 适用场景分析 多 master 节点高可用架构图 集群环境准备 部署过程 修改主机内核参数&#xff08;所有节点&#xff09; 配置阿里云的repo源&#xff08;所有节点&#xff09; 配置国内安装 docker 和 containerd 的阿里云的 repo 源 配置…

比肩 ChatGPT,国内快速访问的强大 AI 工具 Claude

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

Gateway案例

官网:Spring Cloud Gateway 中文文档:Spring Cloud Gateway 2.1.0 中文官网文档 - 腾讯云开发者社区-腾讯云 一、网关介绍: 网关就是当前微服务的统一入口 通常在微服务项目中,只有网关项目是暴露在网络里的,其他服务一般都是在内网里, 用户访问网关,网关根据访问的路径,来进…

Tomcat安装步骤及详细配置教程(2022最新版)

网上的tomcat安装及配置教程一大堆&#xff0c;但是好多都过时了&#xff0c;根本不适用现在的版本&#xff0c;今天凯歌整理一篇Tomcat安装步骤及详细配置教程&#xff0c;2022年最新版~ Tomcat安装及配置教程主要分为四步&#xff1a; 步骤一&#xff1a;首先确认自己是否已…

ChatGPT登录操作扫盲级教程,附ChatGPT登录常见报错及处理技巧

文 / 韩彬&#xff08;微信公众号&#xff1a;量子论&#xff09; 有了帐号&#xff0c;我们自然可以使用ChatGPT尽情玩耍了。 知识扩展&#xff1a;ChatGPT是啥&#xff0c;以及注册的问题&#xff0c;可以看《ChatGPT常见问题手册&#xff0c;通俗易懂版&#xff0c;3分钟了解…

Windows微信聊天图片文件的解码和图片、视频占满电脑磁盘空间的清理

1 问题现象 我的Windows版微信最近老是提示“磁盘空间不足200MB&#xff0c;需及时清理磁盘”。 使用文件资源管理器查看我的电脑磁盘使用情况&#xff0c;发现C盘只剩下174MB空间可用。系统盘C盘空间耗尽已经严重影响电脑的使用。 2 问题分析 2.1 磁盘空间占用情况分析 由于…

【学习笔记】pandas提取excel数据形成三元组,采用neo4j数据库构建小型知识图谱

前言 代码来自github项目 neo4j-python-pandas-py2neo-v3&#xff0c;项目作者为Skyelbin。我记录一下运行该项目的一些过程文字以及遇到的问题和解决办法。 一、提取excel中的数据转换为DataFrame三元组格式 from dataToNeo4jClass.DataToNeo4jClass import DataToNeo4j imp…

实操带你使用Mybatis_plus(2)

文章目录 一、通用ServiceService CRUD 接口a> IServiceb>创建Service接口和实现类测试 二、常用注解1、TableName2、TableId雪花算法3、TableField4、TableLogic 一、通用Service Service CRUD 接口 通用 Service CRUD 封装IService 接口&#xff0c;进一步封装 CRUD …

选择无服务器:Babbel 的迁移故事

Babbel 是什么&#xff1f; Babbel 是一个完整的语言学习产品生态系统&#xff0c;囊括了世界上最畅销的语言学习应用程序。我们已售出超过 1000 万份订阅和超过 60,000 门涵盖 14 种语言的课程&#xff0c;创造了全球第一语言学习目的地。自 2007 年推出产品的第一天起&#…

vivid源码分析

vivid源码分析 文章目录 vivid源码分析如何编写V4L2驱动分析vivid.c的open,read,write,ioctl过程openreadioctlv4l2_ctrl_handler使用过程 如何编写V4L2驱动 分配/设置/注册v4l2_device.v4l2_device_register,v4l2_device(辅助作用&#xff0c;提供自旋锁&#xff0c;引用计数…

LeetCode单链表OJ题目做题思路分享

目录 移除链表元素链表的中间节点链表中倒数第K个节点合并两个有序链表 移除链表元素 链接: link 题目描述&#xff1a; 思路分享&#xff1a; 我们上个博客分享了第一种方法&#xff0c;下面我们分析第二种方法&#xff1a;思路就是将每一个不等于我们要删除的值的节点依次尾…

【硬件】嵌入式电子设计基础之产品实践

电子技术是一门实践性非常强的学科&#xff0c;学习电子元器件基础知识和设计技能&#xff0c;最终为的是把具备一定功能的电路板制作出来&#xff0c;解决科研、生产、生活中的实际问题。 本篇文章从实际的电子产品出发&#xff0c;让您能够初步体验电子产品的硬件设计过程&am…

【Unity编辑器】拓展Project视图

目录 1、拓展右键菜单 2、创建一个菜单 3、拓展布局 4、监听事件 首先创建一个Editor文件夹&#xff0c;此文件夹可以作为多个目录的子文件夹存在&#xff0c;这样开发者就可以按照功能来划分&#xff0c;将不同功能的编辑代码放在不同的Editor目录下。 如果属于编辑模式下…

多维时序 | MATLAB实现BP、SVM、LSSVM多变量时间序列预测(考虑历史特征的影响,多指标、多图输出)

多维时序 | MATLAB实现BP、SVM、LSSVM多变量时间序列负荷预测(考虑历史特征的影响&#xff0c;多指标、多图输出) 目录 多维时序 | MATLAB实现BP、SVM、LSSVM多变量时间序列负荷预测(考虑历史特征的影响&#xff0c;多指标、多图输出)预测效果基本介绍程序设计学习总结参考资料…

大规模并行处理架构Doris概述篇

目录 1 Doris概述篇1.1 前言1.2 Doris简介1.3 核心特性1.4 Doris特点1.5 Doris发展历程1.6 对比其他的数据分析框架1.7 开源OLAP引擎对比1.8 使用场景1.9 使用用户 2 Doris原理篇2.1 名称解释2.2 整体架构2.3 元数据结构2.4 数据分发 1 Doris概述篇 1.1 前言 Doris由百度大数据…

BI 商业智能和报表,傻傻分不清楚?一文给你讲透

我们经常所听到的大数据、商业智能BI、数据分析、数据挖掘等我们都统称为数据信息化。数据信息化可以帮助企业全面的了解企业的经营管理&#xff0c;从经验驱动到数据驱动&#xff0c;降低情绪、心理等主观影响&#xff0c;形成以数据为基础的业务决策支撑&#xff0c;提高决策…

C++入门(内容补充)

目录 前言 1.auto关键字 1.1 auto的使用细则 1.2 auto不能推导的场景 2. 基于范围的for循环(C11) 2.1 范围for的使用条件 3.指针空值nullptr(C11) 3.1 C98中的指针空值 前言 之前给大家更新了一系列关于C的基础语法&#xff0c;那么今天小编再给大家进行部分内容的补充…

【C++】线程库

文章目录 线程库&#xff08;thread&#xff09;线程安全锁实现两个线程交替打印1-100 线程库&#xff08;thread&#xff09; 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如Windows和Linux下各有自己的接口&#xff0c;这使得代码的可…

python函数的递归调用

引入 函数既可以嵌套定义也可以嵌套调用。嵌套定义指的是在定义一个函数时在该函数内部定义另一个函数&#xff1b;嵌套调用指的是在调用一个函数的过程中函数内部有调用另一个函数。而函数的递归调用指的是在调用一个函数的过程中又直接或者间接的调用该函数本身。 函数递归…