首页 > 其他分享 >unity3d——Vector3

unity3d——Vector3

时间:2024-11-03 18:16:27浏览次数:3  
标签:unity3d Log Vector3 向量 Debug 夹角 单位向量

在Unity3D中,Vector3是一个非常重要的结构体,用于表示三维空间中的位置和方向。以下是关于Vector3的一些关键知识点:

一、Vector3的基本概念和属性

  • 定义:Vector3是一个包含三个浮点数的结构体,分别代表X、Y和Z轴上的分量。它用于描述具有大小和方向两个属性的物理量,如速度、加速度、力等。

  • 常用属性

    • x、y、z:分别表示向量在X、Y、Z轴上的分量。
    • magnitude:返回向量的长度(模),即向量到原点的距离。
    • normalized:返回与该向量方向相同但长度为1的向量(单位向量)。
    • sqrMagnitude:返回向量长度的平方,计算时比magnitude更高效。

二、Vector3的静态属性

Unity为Vector3提供了一些常用的静态属性,方便开发者快速获取特定方向的向量:

  • zero:(0, 0, 0),表示原点向量。
  • one:(1, 1, 1),表示所有分量都为1的向量。
  • up:(0, 1, 0),表示Y轴正方向的单位向量。
  • down:(0, -1, 0),表示Y轴负方向的单位向量。
  • left:(-1, 0, 0),表示X轴负方向的单位向量。
  • right:(1, 0, 0),表示X轴正方向的单位向量。
  • forward:(0, 0, 1),表示Z轴正方向的单位向量。
  • back:(0, 0, -1),表示Z轴负方向的单位向量。

三、Vector3的常用操作

  • 创建和初始化:可以通过构造函数创建Vector3对象,如new Vector3(x, y, z),也可以通过静态属性如Vector3.zero进行初始化。

  • 向量运算

    • 加减:对应分量分别进行加减运算。
    • 数乘:向量与标量相乘,可以缩放向量的长度。
    • 点乘:两个向量点乘得到一个标量,数值等于两个向量长度相乘再乘以夹角的余弦值。可用于计算两个向量的夹角、判断向量是否垂直等。
    • 叉乘:两个向量叉乘得到一个新的向量,该向量垂直于原两个向量所构成的平面。叉乘的结果向量的长度等于原两个向量长度相乘后夹角的正弦值。注意叉乘不满足交换律。
  • 夹角和距离计算

    • 可以使用Vector3.Angle(a, b)方法计算两个向量之间的夹角。
    • 可以使用Vector3.Distance(a, b)方法计算两个点(或向量)之间的距离。
  • 线性插值Vector3.Lerp(a, b, t)方法用于在两个向量之间进行线性插值。参数t的范围是[0, 1],表示插值点的位置。当t=0时返回向量a,当t=1时返回向量b,当t=0.5时返回a和b的中间点。

四、Vector3的应用场景

  • 表示位置:在游戏开发中,Vector3常用于表示游戏对象的位置。
  • 表示方向:可以用于表示摄像机的观察方向、角色的移动方向等。
  • 物理计算:在物理引擎中,Vector3用于表示力、速度、加速度等物理量,进行物理计算。
  • 动画和游戏逻辑:在动画和游戏逻辑中,Vector3的线性插值功能(Lerp)常用于实现平滑过渡效果,如角色移动、颜色渐变、摄像机平滑跟踪等。

五、示例代码

以下是一个简单的示例代码,展示了在Unity中使用Vector3进行向量运算和插值操作:

using UnityEngine;  
  
public class Vector3Example : MonoBehaviour  
{  
    void Start()  
    {  
        // 初始化向量  
        Vector3 v1 = new Vector3(1, 0, 0);  
        Vector3 v2 = new Vector3(0, 0, 1);  
  
        // 夹角计算  
        float angle = Vector3.Angle(v1, v2);  
        Debug.Log("夹角为: " + angle);  
  
        // 距离计算  
        Vector3 point1 = new Vector3(2, 2, 2);  
        Vector3 point2 = new Vector3(5, 5, 5);  
        float distance = Vector3.Distance(point1, point2);  
        Debug.Log("两点距离为: " + distance);  
  
        // 点乘示例  
        float dotResult = Vector3.Dot(v1, v2);  
        Debug.Log("点乘结果为: " + dotResult);  
  
        // 叉乘示例  
        Vector3 crossResult = Vector3.Cross(v1, v2);  
        Debug.Log("叉乘结果为: " + crossResult);  
  
        // 线性插值示例  
        Vector3 start = Vector3.zero;  
        Vector3 end = Vector3.one;  
        Vector3 lerpResult1 = Vector3.Lerp(start, end, 0.5f);  
        Vector3 lerpResult2 = Vector3.Lerp(start, end, 0.8f);  
        Debug.Log("比例为 0.5 的差值结果为: " + lerpResult1);  
        Debug.Log("比例为 0.8 的差值结果为: " + lerpResult2);  
    }  
}

这段代码展示了在Unity中Vector3的各种常见操作和应用,包括初始化、夹角计算、距离计算、点乘、叉乘、差值计算等。 

 

标签:unity3d,Log,Vector3,向量,Debug,夹角,单位向量
From: https://blog.csdn.net/2401_82978699/article/details/143301135

相关文章

  • unity3d————三角函数
    先上代码,结合代码讲解:publicclassLesson2:MonoBehaviour{//StartiscalledbeforethefirstframeupdatevoidStart(){#region知识点一弧度、角度相互转化//弧度转角度floatrad=1;floatanger=rad*Math......
  • Unity3D学习FPS游戏(6)武器发射子弹
    前言:上一篇中设置好了武器的瞄准,本篇将实现一个武器发射子弹的效果。子弹子弹发射位置在Weapon01下面新建一个GameObject用来设置发射子弹的位置,调整Position放在枪口位置。子弹模型子弹模型在下面路径找到子弹模型,然后拖入到项目中,并右键Prefab-unpack(为了避免影响......
  • Unity3D教程:次表面散射的简单实现
    次表面散射指的是光线射入半透明材质,在内部发生散射后再透射出来的光线传播过程,考虑到有些项目会需要使用次表面散射,下面就给大家介绍下在Unity3D中次表面散射的简单实现,希望可以帮到大家。 一、前言本文旨在与大家一起探讨学习新知识,如有疏漏或者谬误,请大家不吝指出。以下内......
  • Unity3D c# 使对象物体始终面向摄像机
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassLookAtMainCamera:MonoBehaviour{ //Usethisforinitialization voidStart(){ } //Updateiscalledonceperframe voidUpdate(){......
  • Android平台Unity3D下如何同时播放多路RTMP|RTSP流?
    技术背景好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。实际上,我们在前几年发布Unity下直播播放模块的时候,就已经支持了Android多实例播放RTMP|RTSP,随着大家对这块的技术诉求和性能要求越......
  • 音视频生态下Unity3D和虚幻引擎(Unreal Engine)的区别
    技术背景好多开发者跟我们做技术交流的时候,会问我们,为什么有Unity3D的RTMP|RTSP播放模块,还有RTMP推送和轻量级RTSP服务模块,为什么不去支持虚幻引擎?二者区别在哪里?本文就Unity3D和虚幻引擎之间的差异,做个大概的分析,实际上,Unity3D和虚幻引擎(UnrealEngine)在游戏开发及其他相关领域都......
  • Unity3D下如何播放RTSP流?
    技术背景在Unity3D中直接播放RTSP(RealTimeStreamingProtocol)流并不直接支持,因为Unity的内置多媒体组件(如AudioSource和VideoPlayer)主要设计用于处理本地文件或HTTP流,而不直接支持RTSP。所以,你可以通过一些间接的方法来实现RTSP流的播放,或者通过比较成熟的第三方插件来播。可选方......
  • Unity3D下如何播放RTSP流?
    技术背景在Unity3D中直接播放RTSP(RealTimeStreamingProtocol)流并不直接支持,因为Unity的内置多媒体组件(如AudioSource和VideoPlayer)主要设计用于处理本地文件或HTTP流,而不直接支持RTSP。所以,你可以通过一些间接的方法来实现RTSP流的播放,或者通过比较成熟的第三方插件来播。......
  • Unity3d 截屏保存到相册,并且刷新相册
    要做一个截图的功能,并且玩家可以在相册中看到。 做的时候遇到了三个问题: 1、unity自带的截图API,Application.CaptureScreenshot在Android上不生效 2、图片保存的路径获取 3、保存的图片可以在手机的文件管理中找到,但是相册中没有。 解决......
  • unity3d拼图__附带资源
    要达到吸附效果则需要每个拼图上挂载碰撞体达到整张图片的替换效果需要选中所有拼图部件把材质球拖上去、制作材料球脚本挂载到随便一个空物体上usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassPinTu:MonoBehaviou......