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 dataPath | Contains the path to the game data folder (Read Only). | 游戏数据路径 |
string persistentDataPath | Contains 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 levelCount | The total number of levels available (Read Only). | 场景的总数。 |
int loadedLevel | The level index that was last loaded (Read Only). | 当前加载的场景序号 |
int loadedLevelName | The name of the level that was last loaded (Read Only). | 当前加载的场景名称。 |
bool isLoadingLevel | Is some level being loaded? (Read Only). isLoadingLevel returns true if a level load was requested this frame already. | 表示当前加载的场景是否还需要当前帧。 |
NetworkReachability | internetReachability Returns the type of Internet reachability currently possible on the device. | 表示当前设备的网络连接方式。 |
RuntimePlatform p | latform Returns the platform the game is running (Read Only). | 表示当前游戏运行的平台。 |
bool isConsolePlatform | Is the current Runtime platform a known console platform. | 表示当前运行的平台是否为控制台。 |
bool isMobilePlatform | Is the current Runtime platform a known mobile platform. | 当前运行的平台是否为移动平台。 |
bool isWebPlayer Are we running inside a web player? (Read Only). 当前运行的平台是否为web平台。 | ||
bool isEditor | Are we running inside the Unity editor? (Read Only). | 表示当前是否在Unity编辑器环境中运行程序。 |
int targetFrameRate | Instructs game to try to render at a specified frame rate. | 帧速率。 |
ThreadPriority | *backgroundLoadingPriority * | Priority of background loading thread. |
string bundleIdentifier | eturns application bundle identifier at runtime. | 表示应用运行时的标识符。 |
string cloudProjectId | A unique cloud project identifier. It is unique for every project (Read Only). | 云应用的唯一标识符。 |
string companyName | Return application company name (Read Only). | 应用的公司名称。 |
ApplicationInstallMode | installMode Returns application install mode (Read Only). | 应用安装模式。 |
bool runInBackground | Should the player be running when the application is in the background? | 应用是否在后台运行。 |
ApplicationSandboxType | sandboxType Returns application running in sandbox (Read Only). | 应用程序运行的沙箱类型。 |
string srcValue | The path to the web player data file relative to the html file (Read Only). | web player 文件的路径。 |
int **streamedBytes | How many bytes have we downloaded from the main unity web stream (Read Only). | 字节流数。 |
SystemLanguage systemLanguage | How many bytes have we downloaded from the main unity web stream (Read Only). | 当前系统使用的语言。 |
string unityVersion | The version of the Unity runtime used to play the content. | Unity的版本。 |
string version | Returns application version number (Read Only). | 应用版本。 |
int webSecurityEnabled | Indicates whether Unity’s webplayer security model is enabled. | unity 的webplayer的安全模式是否开启。 |
string absoluteURL | The 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 genuineCheckAvailable | Contains the path to the game data folder (Read Only). | |
ApplicationInstallMode installMode | Returns 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. T | his 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类轻松实现。