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

文章目录

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

在这里插入图片描述

总的介绍

当涉及到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 的三维向量,表示根据玩家在水平和垂直方向上的输入所确定的移动方向。这个向量可以被用于各种游戏物体的移动操作,例如玩家角色、摄像机、子弹等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2013.8.5-2023.6.2碳排放权交易数据集

2013.8.5-2023.6.2碳排放权交易数据集 1、时间:2013.8.5-2023.6.2 2、指标:行政区划代码、所属省份、所属地域、长江经济带、经度、纬度、交易日期、地区、交易品种、开盘价、最高价、最低价、成交均价、收盘价、前收盘价、涨跌幅_%、总成交量、总成交…

启英泰伦通话降噪方案,采用深度学习降噪算法,让通话更清晰

生活中的通话应用场景无处不在,如电话、对讲机、远程会议、在线教育等。普遍存在的问题是环境噪音、干扰声导致通话声音不清晰,语音失真等。 为了解决这一问题,启英泰伦基于自适应线性滤波联合非线性滤波的回声消除方案和基于深度学习的降噪…

Rancher上的应用服务报错:413 Request Entity Too Large

UI->rancher的ingress->UI前端(在nginx里面)->zuul->server 也就是说没经过一次http servlet 都要设置一下大小 1.rancher的ingress 当出现Request Entity Too Large时,是由于传输流超过1M。 1、需要在rancher的ingress中设置参数解决。 配置注释&a…

RabbitMQ的镜像队列

镜像队列 如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable 属性也设置为 true ,但是这样仍然无法…

15-mongodb

一、 MongoDB 简介 1 什么是 MongoDB MongoDB 是一个基于分布式文件存储的数据库。由 C语言编写。在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系…

[FlareOn6]Snake 题解

这是是一个后缀为.nes的文件,NES(Nintendo Entertainment System,任天堂娱乐系统) 找到一个工具FCEUX可以打开和调试 打开十六进制编辑器观察数值的变化 发现0x25处记录了记录了吃掉苹果的个数 在这个地方打一个硬件断点 运行一…

记录windows7无权安装

项目场景: electron 安装程序 windows上的C盘 progrom files 、 问题描述 安装过程中出现 不能打开写入文件 提示如上。 { "name": "intergeOM-goldwind","version": "1.0.0","author": "weile",&q…

前端需要理解的CSS知识

CSS(层叠样式表,Cascading Style Sheets)不是编程语言,而是用来描述 HTML 或 XML(包括如 SVG、MathML 或 XHTML 之类的 XML 分支语言)文档的表现与展示效果的样式表语言。CSS3是CSS的最新标准,是…

【已解决】Java 后端使用数组流 Array.stream() 将数组格式的 Cookie 转换成字符串格式

🎉工作中遇到这样一个场景:远程调用某个接口,该接口需要用户的 Cookie 信息进行权限认证,认证通过之后才可以打通并返回数据。 在后端拿到 httpServletRequest 后,调用 getCookies() 方法,返回的是一个 Coo…

Android12之ABuffer数据处理(三十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

聊聊十大网络安全上市公司,看F5拥有强大安全基因

在应用数量爆炸式增长的当下,包括供应链攻击、零日漏洞及数据泄露在内的安全威胁随处可见。从传统应用到现代应用再到边缘、多云、多中心的安全防护,安全已成为企业数字化转型中的首要挑战。谈到十大网络安全上市公司,拥有强大安全基因的F5是…

若依移动端Ruoyi-App 项目的后端项目入门

后端项目运行 运行报错 Error creating bean with name sysConfigServiceImpl: Invocation of init method failed 数据库创建了。 代码连接数据库地方了也匹配上了。但是还是报错。 分析 : 想起来我电脑从来没有安装过redis 下载安装redis到windows 链接&…

2023京东咖啡机行业数据分析(京东数据分析平台)

如今咖啡的渗透率越来越高,养成咖啡饮用习惯的消费者越来越多,尤其是一二线城市。同时,随着人们收入水平的提高,精致生活理念使人们对咖啡的态度从提神需求逐渐转变为社交需求,国内咖啡机市场的发展空间也逐步增大。 …

5.基于多能互补的热电联供型微网优化运行

MATLAB代码链接:基于多能互补的热电联供型微网优化运行 MATLAB代码:基于多能互补的热电联供型微网优化运行 关键词:多能互补 综合需求响应 热电联产 微网 优化调度 参考文档:《基于多能互补的热电联供型微网优化运行》基本完全…

数据结构之树型结构

相关概念树的表示二叉树二叉树性质二叉树储存 实现一颗二叉树创建遍历(前中后序)获取树中节点个数获取叶子节点个数获取第k层节点个数获取二叉树高度检测值为value元素是否存在层序遍历(需要队列来实现)判断是否为完全二叉树&…

高职教育应对ChatGPT应用的策略

一、完善顶层设计,提升技术水平 在推广ChatGPT平台的过程中,高职院校需要关注技术本身的问题。这就需要在国家和地方政府的引导下,引入更完善的技术顶层设计,提高人工智能在高职教育中的运用水平。具体来说,一方面需要…

C# 多线程交替按照指定顺序执行

1.关于AutoResetEvent和ManualResetEvent的区别解释如下: AutoResetEvent和ManualResetEvent是.NET中的两个线程同步类。它们之间的主要区别在于其释放信号的方式以及对等待线程的影响。 AutoResetEvent的作用是在等待的线程被信号唤醒后,将信号自动重…

Kubernetes(k8s)当中安装并使用ingress暴露应用

Kubernetes当中安装并使用ingress暴露应用 为什么需要Ingress前期准备集群准备LoadBalancer准备 安装Ingress-Nginx下载地址v1.3.1v1.8.1 修改文件v1.3.1v1.8.1修改ingress服务类型配置 执行安装 部署应用通过ingress-nginx暴露应用部署ingress的yaml文件v1.3.1v1.8.1 为什么需…

前端加springboot实现Web Socket连接通讯以及测试流程(包括后端实现心跳检测)

【2023】前端加springboot实现Web Socket连接通讯(包括后端实现心跳检测) 前言一、Web Socket 简绍1 为什么用 websocket? 二、代码实现1、前端(html)1.1、无前端向后端发送消息1.2、有前端向后端发送消息 2、后端具体…

【Android】AES解密抛出异常Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH

Java使用AES加密的时候没得问题,但是在解密的时候就出错了,一起来找找原因吧。 首先,Java运行的代码如下,使用AES加解密 Cipher cipher Cipher.getInstance("AES/CBC/NOPadding"); //...主要问题 可调试运行控制台抛…