您现在的位置是:首页 >技术交流 >Unity API详解——Vector3类网站首页技术交流

Unity API详解——Vector3类

极客范儿 2023-07-06 19:13:41
简介Unity API详解——Vector3类

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

一、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类轻松实现。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。