Unity之 Vector3 的详细介绍以及方法的介绍

news2025/4/7 5:48:01

文章目录

  • 总的介绍
  • 小试牛刀
  • 相关的描述的参数
    • 看个小例子

在这里插入图片描述

总的介绍

当涉及到Unity中的Vector3类时,以下是一些常用的方法和操作:

  1. magnitude 方法:返回向量的长度。

    float length = vector.magnitude;
    
  2. sqrMagnitude 方法:返回向量的平方长度,通常用于比较向量大小而无需进行开方运算,从而提高效率。

    float squaredLength = vector.sqrMagnitude;
    
  3. normalized 方法:返回向量的单位向量,即长度为1但方向相同的向量。

    Vector3 normalizedVector = vector.normalized;
    
  4. Vector3.Dot 方法:计算两个向量的点积(内积),用于测量两个向量之间的相似性。

    float dotProduct = Vector3.Dot(vectorA, vectorB);
    
  5. Vector3.Cross 方法:计算两个向量的叉积(外积),用于计算垂直于这两个向量的向量。

    Vector3 crossProduct = Vector3.Cross(vectorA, vectorB);
    
  6. Vector3.Lerp 方法:在两个向量之间进行线性插值。

    Vector3 interpolatedVector = Vector3.Lerp(startVector, endVector, t);
    
  7. Vector3.Distance 方法:计算两个向量之间的距离。

    float distance = Vector3.Distance(vectorA, vectorB);
    
  8. Vector3.Angle 方法:计算两个向量之间的夹角。

    float angle = Vector3.Angle(vectorA, vectorB);
    
  9. Vector3.Project 方法:将一个向量投影到另一个向量上,得到一个投影向量。

    Vector3 projection = Vector3.Project(vectorToProject, ontoVector);
    
  10. Vector3.Reflect 方法:计算一个向量关于一个法线的反射向量。

    Vector3 reflection = Vector3.Reflect(incidentVector, normal);
    

这些方法可以用于执行各种向量计算,包括测量、变换、旋转、碰撞检测等等。根据您的具体需求,选择适当的方法可以帮助您更轻松地处理向量操作。

小试牛刀

以下是一个示例代码,演示了如何使用Vector3类的不同方法,并附带了详细的注释说明:

using UnityEngine;

public class VectorMethodsExample : MonoBehaviour
{
    public Transform target; // 用于演示的目标对象
    public Transform otherObject; // 用于演示的另一个对象

    private void Update()
    {
        Vector3 moveDirection = target.position - transform.position;

        // 获取向量的长度
        float magnitude = moveDirection.magnitude;

        // 获取向量的平方长度
        float sqrMagnitude = moveDirection.sqrMagnitude;

        // 归一化向量
        Vector3 normalizedDirection = moveDirection.normalized;

        // 计算两个向量的点积
        float dotProduct = Vector3.Dot(moveDirection, otherObject.position - transform.position);

        // 计算两个向量的叉积
        Vector3 crossProduct = Vector3.Cross(moveDirection, otherObject.position - transform.position);

        // 在两个向量之间进行线性插值
        float t = Mathf.PingPong(Time.time, 1f); // 0 到 1 之间的插值参数
        Vector3 interpolatedVector = Vector3.Lerp(moveDirection, otherObject.position - transform.position, t);

        // 计算两个向量之间的距离
        float distance = Vector3.Distance(transform.position, otherObject.position);

        // 计算两个向量之间的夹角
        float angle = Vector3.Angle(moveDirection, otherObject.position - transform.position);

        // 将一个向量投影到另一个向量上
        Vector3 projectedVector = Vector3.Project(moveDirection, otherObject.position - transform.position);

        // 计算一个向量关于一个法线的反射向量
        Vector3 normal = Vector3.up; // 示例法线
        Vector3 reflection = Vector3.Reflect(moveDirection, normal);

        Debug.Log("Magnitude: " + magnitude);
        Debug.Log("Squared Magnitude: " + sqrMagnitude);
        Debug.Log("Normalized Direction: " + normalizedDirection);
        Debug.Log("Dot Product: " + dotProduct);
        Debug.Log("Cross Product: " + crossProduct);
        Debug.Log("Interpolated Vector: " + interpolatedVector);
        Debug.Log("Distance: " + distance);
        Debug.Log("Angle: " + angle);
        Debug.Log("Projected Vector: " + projectedVector);
        Debug.Log("Reflection: " + reflection);
    }
}

请注意,这只是一个示例,以便演示各种Vector3方法的使用方式。在实际应用中,您需要根据具体情况进行调整。希望这个示例能够帮助您更好地理解和使用Vector3类的方法。

相关的描述的参数

“Vector3” 通常是一个表示三维空间中向量的数据结构或类,其名称表明它是一个包含三个分量的向量。在许多编程语言和数学库中,这种类型的向量通常用来表示位置、方向或位移等概念。

一个普通的三维向量本身通常只包含 x、y 和 z 三个分量。

看个小例子

这行代码是在许多游戏开发环境中常见的一种操作,用于创建一个三维向量(Vector3),表示一个移动方向或位移。让我们逐步解释这行代码的每个部分:

Vector3 moveDirection = new Vector3(horizontalInput, 0f, verticalInput);
  • Vector3:这是一个表示三维向量的类或结构体。它通常包含三个分量:x、y 和 z,分别对应三维空间中的横向、纵向和纵深方向。

  • moveDirection:这是一个变量名,用于存储表示移动方向或位移的三维向量。您可以将其视为存储位置、方向或速度等信息的容器。

  • new Vector3(horizontalInput, 0f, verticalInput):这是一个向 Vector3 构造函数传递参数来创建新的三维向量的表达式。其中,horizontalInputverticalInput 是变量,它们可能代表输入设备(例如键盘、手柄)的输入,表示玩家在水平和垂直方向上的输入值。这些输入值可以是浮点数(float)类型。

    • horizontalInput:代表水平方向上的输入值。通常,左负右正是一种常见的约定。
    • 0f:这个值表示在 y 方向上的移动,通常被设置为 0,因为在许多游戏中,垂直方向通常用于表示高度,而在这个上下移动的情况下,高度不发生变化。
    • verticalInput:代表垂直方向上的输入值。通常,下负上正是一种常见的约定。

因此,代码的含义是创建一个名为 moveDirection 的三维向量,表示根据玩家在水平和垂直方向上的输入所确定的移动方向。这个向量可以被用于各种游戏物体的移动操作,例如玩家角色、摄像机、子弹等。

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

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

相关文章

Sakana AI致力于打造日本人工智能界的top公司

原创 | 文 BFT机器人 01 Sakana AI创始人 Sakana AI 是一家总部位于东京的突破性创业公司,由前谷歌Brain研究员David Ha和Llion Jones共同创立。David Ha拥有多年且丰富的经验,曾担任Stability AI Ltd的研究负责人,并在Google LLC的日本人工…

ClickHouse领域集大成之作:《ClickHouse入门、实战与进阶》(文末送书)

前言 ClickHouse是大数据实时分析领域的主流选择之一。ClickHouse的目标是向人们提供世界上最快的分析型数据库。在各种OLAP查询引擎评测中,ClickHouse的查询性能横扫各大OLAP数据库引擎,尤其是Ad Hoc即席查询性能,一直遥遥领先。因此&#…

jenkins运行pytest测试用例脚本报错:没有权限,无法写日志PermissionError:[Error 13]Permission denied

报错信息: PermissionError:[Error 13]Permission denied:‘/var/jenkins_home/workspace/deleverySystem/Delivery_System/out_files/logs/waimai_20230823.log’ 解决方法: 在jenkins容器内部输入 chmod -R 777 /var/jenkins_home/works…

Ivanti曝新的MobileIron零日漏洞,正在被恶意利用

美国 IT 软件公司 Ivanti 今天提醒客户,一个关键的 Sentry API 身份验证绕过漏洞正在被恶意利用。 Ivanti Sentry(前身为 MobileIron Sentry)在 MobileIron 部署中充当 Microsoft Exchange Server 等企业 ActiveSync 服务器或 Sharepoint 服…

Diffusion Models for Image Restoration and Enhancement – A Comprehensive Survey

图像恢复与增强的扩散模型综述 论文链接:https://arxiv.org/abs/2308.09388 项目地址:https://github.com/lixinustc/Awesome-diffusion-model-for-image-processing/ Abstract 图像恢复(IR)一直是低水平视觉领域不可或缺的一项具有挑战性的任务&…

[Go版]算法通关村第十三关黄金——数字数学问题之数论问题(最大公约数、素数、埃氏筛、丑数)

目录 题目:辗转相除法(求最大公约数)思路分析:辗转相除法(也叫欧几里得算法)gcd(a,b) gcd(b,a mod b)复杂度:时间复杂度 O ( n l o g ( m a x ) ) O(nlog(max)) O(nlog(max))、空间复杂度 O (…

基于自私羊群算法优化的BP神经网络(预测应用) - 附代码

基于自私羊群算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于自私羊群算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.自私羊群优化BP神经网络2.1 BP神经网络参数设置2.2 自私羊群算法应用 4.测试结果:5…

js案例:小球碰壁反弹

目录 一.效果预览图​编辑 解析 二.完整代码 代码讲解 html部分 js部分 一.效果预览图 解析 这个效果是为了以后(过段时间会发的一个小游戏)做js小游戏做准备的,基本结构是,定义两个div盒子,小盒子设置成圆球形状…

单片机(二)使用位移 让灯亮

一:硬件电路 P2 口: P2.0~ P2.7 是这些 I0 口 LED 阳极接 电源 , P20 口 为低电平 可以让 LED灯 亮 二:软件实现部分 两种 ① 通过循环 来展示从左 到右 #include "reg52.h"#define LED_PORT P2 // 定义单片机的P2端…

利用语义属性来进行时序知识图谱的补全

目录 摘要部分 张量分解 超平面投影 超平面 投影 超平面投影的应用 数学表示 正则化 引言部分 TKG嵌入方法 举例 相关工作 SKG嵌入方法 评判事实合理性的评分函数模型 平移模型 TransE TransE例子 张量分解模型 RESCAL 神经网络模型 TKG嵌入方法 外推 插…

queue ide is not exists in YARN

报错内容: 2023-08-17 17:30:31.342 [ERROR] [BaseTaskScheduler-Thread-7 ] o.a.l.o.s.a.AsyncExecTaskRunnerImpl (79) [run] - Failed to execute task astJob_1_codeExec_1 org.apache.linkis.orchestrator.ecm.exception.ECMPluginErrorException: errCode:…

【实训项目】“优教”APP设计

1.设计摘要 随着科技的发展和信息技术的日益普及,很多家长抱着望子成龙的心态,不遗余力的为孩子找合适的家教,而很多在校大学生也希望通过当家教增加一点经济收入,基于这一点家教服务平台将提供更好的管理系统,使家长更加了解学生,也通过这个平台使家教管理者对于大…

Spring Cloud Alibaba-Nacos Discovery--服务治理

1 服务治理介绍 先来思考一个问题 通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 (ip,端口)等硬编码到了代码中,这种做法存在许多问题: 一旦服务提供者地址变化&am…

如何将PC电脑变成web服务器:将内网主机映射到外网实现远程访问

如何将PC电脑变成web服务器:将内网主机映射到外网实现远程访问 我是艾西,今天跟大家分享内容还是比较多人问的一个问题:如何将PC电脑变成web服务器。内网主机作为web服务器,内容包括本地内网映射、多层内网映射解决方案、绕过电信…

[Linux]进程概念

[Linux]进程概念 文章目录 [Linux]进程概念进程的定义进程和程序的关系Linux下查看进程Linux下通过系统调用获取进程标示符Linux下通过系统调用创建进程-fork函数使用 进程的定义 进程是程序的一个执行实例,是担当分配系统资源(CPU时间,内存…

android 重新签名bat

1.新建txt,修改后缀改为bat文件 sign.bat echo off:apk未签名文件名称 set apk_unsign"":apk签名文件名称 set apk_sign"":设置文件 set settingFileE:\apk\bat\sign\setting_sign.txt:读取settingFile第0行的 apk_unsign 值 for /f "to…

DETR-《End-to-End Object Detection with Transformers》论文精读笔记

DETR(基于Transformer架构的目标检测方法开山之作) End-to-End Object Detection with Transformers 参考:跟着李沐学AI-DETR 论文精读【论文精读】 摘要 在摘要部分作者,主要说明了如下几点: DETR是一个端到端&am…

Python入门之最基础1.0

记录学渣的学习过程 python入门学习1.0 前言一、 python学习之初需要注意的三个问题二、python所有内置函数的查看方式dir(__builtins__) 总结 前言 一、 python学习之初需要注意的三个问题 二、python所有内置函数的查看方式 dir(builtins) 总结 做自己的时候是发光的

【OpenMp】openmp库的基本语法

目录 OpenMP并行运行结构图句式parallel制导命令隐式同步 parallel的for命令parallel的for命令静态调度dynamic参数guided参数 sections制导指令single制导指令解决多线程竞争临界区矩阵所有元素1任务池同步点shared和private单语句原子操作#pragma omp atomic复杂样例程序 Ope…