Unity API详解——Vector3类

news2024/11/14 16:37:55

Vector3类是用于表示三维向量的类,其中的x、y和z成员表示向量在三个轴上的分量。Vector3类还包含许多常用的函数,例如计算向量长度、向量点积和向量叉积等等。此外,Vector3类还具有许多方便的操作,例如规范化向量、向量加法、向量减法、向量乘法和向量除法等。对于3D游戏应用程序特别有用的附加功能包括旋转和缩放变换等。需要注意的是,Vector3类是一个结构体,因此需要使用“.”而不是“->”来访问其成员。本博客从创建以及使用详细介绍Vector3类。

文章目录

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

一、Vector3类静态属性

静态属性英文解释中文说明
string dataPathContains the path to the game data folder (Read Only).游戏数据路径
string persistentDataPathContains the path to a persistent data directory (Read Only).持久化数据路径。
string * streamingAssetsPath*Contains the path to the StreamingAssets folder (Read Only).流数据缓存目录。
string temporaryCachePath Contains the path to a temporary data / cache directory (Read Only).零时缓存目录。
int levelCountThe total number of levels available (Read Only).场景的总数。
int loadedLevelThe level index that was last loaded (Read Only).当前加载的场景序号
int loadedLevelNameThe name of the level that was last loaded (Read Only).当前加载的场景名称。
bool isLoadingLevelIs some level being loaded? (Read Only). isLoadingLevel returns true if a level load was requested this frame already.表示当前加载的场景是否还需要当前帧。
NetworkReachabilityinternetReachability Returns the type of Internet reachability currently possible on the device.表示当前设备的网络连接方式。
RuntimePlatform platform Returns the platform the game is running (Read Only).表示当前游戏运行的平台。
bool isConsolePlatformIs the current Runtime platform a known console platform.表示当前运行的平台是否为控制台。
bool isMobilePlatformIs the current Runtime platform a known mobile platform.当前运行的平台是否为移动平台。
bool isWebPlayer Are we running inside a web player? (Read Only). 当前运行的平台是否为web平台。
bool isEditorAre we running inside the Unity editor? (Read Only).表示当前是否在Unity编辑器环境中运行程序。
int targetFrameRateInstructs game to try to render at a specified frame rate.帧速率。
ThreadPriority*backgroundLoadingPriority *Priority of background loading thread.
string bundleIdentifiereturns application bundle identifier at runtime.表示应用运行时的标识符。
string cloudProjectIdA unique cloud project identifier. It is unique for every project (Read Only).云应用的唯一标识符。
string companyNameReturn application company name (Read Only).应用的公司名称。
ApplicationInstallModeinstallMode Returns application install mode (Read Only).应用安装模式。
bool runInBackgroundShould the player be running when the application is in the background?应用是否在后台运行。
ApplicationSandboxTypesandboxType Returns application running in sandbox (Read Only).应用程序运行的沙箱类型。
string srcValueThe path to the web player data file relative to the html file (Read Only).web player 文件的路径。
int **streamedBytesHow many bytes have we downloaded from the main unity web stream (Read Only).字节流数。
SystemLanguage systemLanguageHow many bytes have we downloaded from the main unity web stream (Read Only).当前系统使用的语言。
string unityVersionThe version of the Unity runtime used to play the content.Unity的版本。
string versionReturns application version number (Read Only).应用版本。
int webSecurityEnabledIndicates whether Unity’s webplayer security model is enabled.unity 的webplayer的安全模式是否开启。
string absoluteURLThe absolute path to the web player data file (Read Only).用于保存在web浏览器中数据文件的绝对路径。
bool **genuine **Returns false if application is altered in any way after it was built.
bool genuineCheckAvailableContains the path to the game data folder (Read Only).
ApplicationInstallMode installModeReturns application install mode (Read Only).应用安装模式。

Unity的Vector3是一种用于表达3D游戏对象的类。Unity中的大部分3D游戏对象都使用Vector3来定义其位置、缩放和旋转等属性。

Vector3类是一个结构体,其中的成员变量x、y和z表示向量在三个轴上的分量。Unity提供了很多方法和操作符来对Vector3进行操作。这些操作包括向量规范化、向量加减、向量数乘、向量点积和向量叉积等等。

1、创建Vector3

下面的代码演示了如何创建Vector3:

Vector3(1.0f, 2.0f, 3.0f);

创建一个Vector3对象,其x、y和z分量分别为1.0、2.0和3.0。

2、计算点积

使用Vector3,您可以非常方便地执行各种数学计算。例如,要计算两个向量的点积,使用以下代码:

Vector3.Dot(vectorA, vectorB);

3、缩放

要将Vector3对象规范化,请使用Normalize()方法。此方法将根据向量的长度将其缩小至单位长度。

另一个有用的功能是对Vector3进行加减法操作。使用+运算符可以对两个向量进行加法。使用-运算符可以对向量进行减法。

要将Vector3缩放到特定大小,请使用Scale()方法。例如,要将Vector3放大为2倍,使用以下代码:

vector1.Scale(new Vector3(2.0f, 2.0f, 2.0f));

使用Vector3中的Rotate()方法可以对向量进行旋转变换。这个方法需要传入一个Quaternion类型的参数,该参数将定义向量的旋转角度和轴。

二、Vector3类静态方法

静态方法英文解释中文说明
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/480473.html

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

相关文章

数据预处理--sort乱序DICOM文件

我们直接从PACS系统里拷贝下来的图像&#xff0c;很多情况下是乱序的&#xff0c;随机命名的。如下图 从这个文件夹名字&#xff0c;我们只知道患者的 ID 信息&#xff0c;不知道这个图像是什么模态&#xff08;CT/MRI/Xray&#xff09;&#xff0c;也不知道扫的是哪个部位&…

【电子学会】2023年03月图形化一级 -- 甲壳虫走迷宫

甲壳虫走迷宫 1. 准备工作 &#xff08;1&#xff09;绘制如图所示迷宫背景图&#xff0c;入口在左下角&#xff0c;出口在右上角&#xff0c;线段的颜色为黑色&#xff1b; &#xff08;2&#xff09;删除默认小猫角色&#xff0c;添加角色&#xff1a;Beetle&#xff1b; …

Python探索性P图,四种增强方式快速玩转pillow库

嗨害大家好鸭&#xff01;我是爱摸鱼的芝士❤ 我们平时使用一些图像处理软件时&#xff0c; 经常会看到其对图像的亮度、对比度、色度或者锐度进行调整。 你是不是觉得这种技术的底层实现很高大上&#xff1f; 其实最基础的实现原理&#xff0c; 用 Python 实现只需要几行…

【力扣周赛】第343场周赛

【力扣周赛】第343场周赛 2660&#xff1a;保龄球游戏的获胜者题目描述解题思路 2661&#xff1a;找出叠涂元素题目描述解题思路 2660&#xff1a;保龄球游戏的获胜者 题目描述 描述&#xff1a;给你两个下标从 0 开始的整数数组 player1 和 player2 &#xff0c;分别表示玩家…

系统集成项目管理工程师 笔记(第10章 项目质量管理)

文章目录 10.1.2 质量管理及其 发展史 35610.1.3 项目质量管理 35810.2.2 规划质量管理的输入 35910.2.3 规划质量管理的工具与技术 3601、成本效益分析法2、质量成本法&#xff08;一致性成本【预防、评价】 和 非一致性成本【内部、外部】&#xff09;3、七种基本质量工具&am…

【AI作诗】主流平台介绍+自主搭建

诗歌总是属于文人的浪漫&#xff0c;但随着技术的发展&#xff0c;理科生文艺起来&#xff0c;也就没文科生什么事了&#xff08;开玩笑的&#xff09;。通过本篇文章&#xff0c;笔者将给大家介绍主流的AI诗歌创作平台及如何自己搭建&#xff0c;以供大家学习参考。 技术的进…

0、Java开发常见(并发,JVM)

并发 问题详解请谈谈你对volatile的理解linkCAS你知道吗&#xff1f;link原子类Atomiclnteger的ABA问题谈谈?原子更新引用知道吗&#xff1f;link我们知道ArrayList是线程不安全&#xff0c;请编码写一个不安全的案例并给出解决方案link公平锁/非公平锁/可重入锁/递归锁/自旋…

快解析赋能企业私有云部署

很多企业形成了以总部为中心的多点生产体系结构&#xff0c;并借助网络化办公工具搭建跨区域协同办公系统&#xff0c;满足总部与分支机构间的信息互通&#xff0c;进而促进异地业务的信息共享&#xff0c;提高办公处理效率和综合管理水平。 北京某信息技术公司&#xff0c;主…

C# 使用OpenCV基本图像操作功能

C# 使用OpenCV OpenCV是一个开源的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。C#在上位机开发中比较常用&#xff0c;有些项目需要在上位机上加入一些机器视觉相关的功能&#xff0c;在下面简单介绍了C#中使用OpenCV…

JVM-0426

对象内存布局 对象的实例化 创建对象的方式&#xff1a; new 最常见的方式变形1&#xff1a;XX的静态方法 Class &#xff1a; 调用froName( )方法变形2&#xff1a;xxxBuilder / xxxFactory的静态方法 Class的newInstance( )&#xff1a;反射的方式&#xff0c;只能调用空参的…

自动控制原理笔记-频率响应法-频率特性的概念

目录 频率响应法&#xff1a; 频率特性的概念&#xff1a; 一、频率特性的定义&#xff1a; 二、频率特性的求法: 三、频率特性的物理意义: 四、频率特性的图形表示方法: 频率响应法&#xff1a; 基本思想&#xff1a;通过开环频率特性的图形对系统进行分析。 主要优点&…

【2023华中杯数学建模】B 题 小学数学应用题相似性度量及难度评估详细建模方案及实现代码

更新时间&#xff1a;2023-5-1 14:00 1 题目 B 题 小学数学应用题相似性度量及难度评估 某 MOOC 在线教育平台希望能够进行个性化教学&#xff0c;实现用户自主学习。在用户学习时&#xff0c;系统从题库中随机抽取若干道与例题同步的随堂测试题&#xff0c;记录、分析学生的学…

java的类加载浅析

类加载 类加载器 类加载器是Java虚拟机&#xff08;JVM&#xff09;的一个组成部分&#xff0c;它的主要任务是在运行时动态加载类和资源&#xff0c;以便程序能够使用它们。类加载器从文件系统、网络或其他来源中获取类的字节码&#xff0c;并将其转换为JVM可执行的形式&…

机器学习基础知识之交叉验证

文章目录 交叉验证定义1、随机子抽样验证2、K折交叉验证3、留一法交叉验证4、自助采样验证 交叉验证定义 在使用某一个数据集对模型进行训练时&#xff0c;模型的实际训练情况会受到数据集的直接影响&#xff0c;且其实际训练结果是难以确定的&#xff0c;极有可能出现欠拟合与…

【实验报告】实验四、彩色图像处理

一、实验目的 使用MatLab软件对图像进行彩色处理&#xff0c;熟悉使用MatLab软件进行图像彩 色处理的有关方法&#xff0c;并体会到图像彩色处理技术以及对图像处理的效果。 二、实验原理 &#xff08;一&#xff09;一幅RGB图像就是彩色像素的一个M x N x 3数组&#xff0…

视频搬砖项目【一个技术员是如何轻松利用视频搬运项目做到日入2000+】

无门槛人人可做副业项目&#xff0c;视频搬砖收益&#xff0c;实测一天2000&#xff01; 今天给大家分享一个微信看一看 的项目&#xff0c;操作非常简单&#xff0c;小白也很容易上手&#xff0c;不需要像某音一样去卖货&#xff0c;只要发布作品就能够有收益。 第一个、项目…

vue项目无法运行报错 error:0308010C:digital envelope routines::unsupported

文章目录 问题原因解决方法方法一方法二 问题 运行vue项目&#xff0c;报错 error:0308010C:digital envelope routines::unsupported 原因 网上查了一下&#xff0c;大体原因就是node版本不对&#xff0c;node版本太高 也有说我没有使用 Node JS 的 LTS&#xff08;长期支…

ROS2交叉编译操作

ROS2移植过程 在移植ROS2之前,先确认需要移植的版本以及其对应的依赖,这些信息可以在 ROS 2 Releases and Target Platforms 中有介绍,可依据自身需要使用的平台,参考该链接进行选择,下面以ROS2 Humble为例进行介绍ROS2移植操作。 ROS Humble依赖如下: 而ROS2的构建依赖…

sed进阶之保留空间和排除命令

shell脚本编程系列 保留空间 模式空间&#xff08;pattern space&#xff09;是一块活跃的缓冲区&#xff0c;在sed编辑器执行命令时保存着待检查的文本&#xff0c;但它并不是sed编辑器保存文本的唯一空间。sed编辑器还有另一块称作保留空间&#xff08;hold space&#xff0…

【深度学习】BERT是什么?怎么玩的?

RNN 也是一种Seq2Seq网络 这种RNN就不能并行运算&#xff0c;且对于长句子会造成损失遗忘或者梯度爆炸 Transfomer Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建&…