Unity3D学习之Unity基础——3D数学

文章目录

  • 1. 前言
  • 2 Mathf和Math基础
    • 2.1 一般用于只计算一次的函数
      • 2.1.1 PI Π PI
      • 2.1.2 取绝对值 Abs
      • 2.1.3 向上取整 CeilToInt
      • 2.1.4 向下取整 FloorToInt
      • 2.1.5 钳制函数 Clamp
      • 2.1.6 获取最大值 Max
      • 2.1.7 获取最小值 Min
      • 2.1.8 一个数的n次幂 Pow
      • 2.1.9 四舍五入 RoundToInt
      • 2.1.10 平方根 Sqrt
      • 2.1.11 判断是否是2的n次方 IsPowerOfTwo
      • 2.1.12 判断正负数 Sign
      • 2.1.13 其他函数
    • 2.2 一般用于不停计算的函数
      • 2.2.1 插值运算 Lerp
  • 3 三角函数
    • 3.1 弧度角度相互转换
    • 3.2 三角函数
    • 3.3 反三角函数
    • 3.4 把一个物体按正弦曲线进行移动
    • 3.5 坐标系
      • 3.5.1 坐标转换
  • 4 向量
    • 4.1 向量模长和单位向量
      • 4.1.1 向量
      • 4.1.2 两点决定一个向量
      • 4.1.3 零向量和复向量
      • 4.1.4 向量的模长
    • 4.2 单位向量
    • 4.3 向量加减乘除
      • 4.3.1 加法
      • 4.3.2 减法
      • 4.3.3 乘法除法
      • 4.3.4 unity中计算
      • 4.3.5 设置个相机跟随物体
    • 4.4 向量点乘
      • 4.4.1 使用Debug的画线
      • 4.4.2 计算点乘
      • 4.4.3 公式推导
      • 4.4.4 怪物视野范围
    • 4.5 向量叉乘
      • 4.5.1 计算叉乘
      • 4.5.2 几何意义
      • 4.5.3 完善索敌脚本
    • 4.6 插值运算
      • 4.6.1 线性插值
  • 5 四元数
    • 5.1 四元数是什么
    • 5.2 unity中的四元数
      • 5.2.1 轴角对
      • 5.2.2 四元数和欧拉角的转换
      • 5.2.3 四元数相乘
    • 5.3 四元数的常用方法
      • 5.3.1 单位四元数
      • 5.3.2 插值运算
      • 5.3.3 向量指向转四元素
      • 5.3.4 利用LookRotation实现LookAt方法
      • 5.3.5 利用 Slper实现摄像机匀速或先快后慢看向目标
      • 5.4 四元数计算
      • 5.4.1 四元数相乘
      • 5.4.2 四元数乘向量
      • 5.4.3 模拟飞机游戏中发射不同类型子弹的方法
      • 5.4.4 实现各类摄像机跟随效果


1. 前言

在这里插入图片描述
从这几部分学习

2 Mathf和Math基础

2.1 一般用于只计算一次的函数

在这里插入图片描述
都是用于提供数学计算的

Mathf是结构体,Math是类
Mathf是Math的第二次封装,更适合游戏开发

2.1.1 PI Π PI

在这里插入图片描述

2.1.2 取绝对值 Abs

在这里插入图片描述

2.1.3 向上取整 CeilToInt

在这里插入图片描述

2.1.4 向下取整 FloorToInt

在这里插入图片描述

2.1.5 钳制函数 Clamp

在这里插入图片描述
第一个参数,如果在第二个和第三个参数之间,就是合法的
如果小于第二个参数,则返回第二个参数
如果大于第三个参数,则返回第三个参数

2.1.6 获取最大值 Max

在这里插入图片描述

2.1.7 获取最小值 Min

在这里插入图片描述

2.1.8 一个数的n次幂 Pow

在这里插入图片描述

4的2次方,
2的3次方

2.1.9 四舍五入 RoundToInt

在这里插入图片描述

2.1.10 平方根 Sqrt

在这里插入图片描述
结果是2,4,8

2.1.11 判断是否是2的n次方 IsPowerOfTwo

在这里插入图片描述
true
true
false
true

2.1.12 判断正负数 Sign

正数是1,负数是-1
在这里插入图片描述

2.1.13 其他函数

有三角函数计算这部分会在后面专门开个部分讲

2.2 一般用于不停计算的函数

2.2.1 插值运算 Lerp

在这里插入图片描述

  1. 用法一
    在这里插入图片描述

在这里插入图片描述
先快后慢
2)用法二

在这里插入图片描述

在这里插入图片描述

匀速运动

做跟随运动的时候,有两种方法,一种是先快后慢,一种是匀速运动

在这里插入图片描述
第二种
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3 三角函数

在这里插入图片描述

在这里插入图片描述

3.1 弧度角度相互转换

在这里插入图片描述

3.2 三角函数

使用需要传入弧度值
在这里插入图片描述

3.3 反三角函数

通过三角函数得到的值,得到相应的弧度,就是上面这个函数里传入值

在这里插入图片描述

3.4 把一个物体按正弦曲线进行移动

在这里插入图片描述

在这里插入图片描述

3.5 坐标系

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
Camera组件里的视口坐标系
在这里插入图片描述

3.5.1 坐标转换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 向量

在这里插入图片描述

4.1 向量模长和单位向量

4.1.1 向量

在这里插入图片描述

4.1.2 两点决定一个向量

在这里插入图片描述

在这里插入图片描述

4.1.3 零向量和复向量

在这里插入图片描述

4.1.4 向量的模长

在这里插入图片描述
如果这个向量不是两个点的向量,则是原点到这个点的距离

4.2 单位向量

在这里插入图片描述
在这里插入图片描述v
v

4.3 向量加减乘除

4.3.1 加法

向量 + 向量 = 新向量
位置 + 向量 = 新位置
向量 + 位置 = 新位置

4.3.2 减法

位置 - 位置 = 向量
向量 - 向量 = 向量
位置 - 向量 = 位置
向量 - 位置 没有意义

4.3.3 乘法除法

向量 * / = 向量
向量 * / 正数 = 方向不变,放大缩小模长
向量 * / 正数 = 方向变反,放大缩小模长
向量 * 0,得到零向量

4.3.4 unity中计算

在这里插入图片描述

4.3.5 设置个相机跟随物体

摄像机一直在物体后方4米,向上偏7米的位置
在这里插入图片描述
把target拖入
这样位置是没问题,但是没有看向物体
在这里插入图片描述
加一句就行

4.4 向量点乘

在这里插入图片描述

4.4.1 使用Debug的画线

使用Debug的画线方法
在这里插入图片描述
在这里插入图片描述

给两个物体画一条射线,将终点 换成变量,在ins里拖入
在这里插入图片描述

在这里插入图片描述

4.4.2 计算点乘

在这里插入图片描述

4.4.3 公式推导

如果有巡逻怪,他有个视野范围,此时需要计算角度,判断是否在这个视野范围内,需要一个计算公式
在这里插入图片描述

在这里插入图片描述
1) 计算出两物体的单位向量
2) 用反三角函数得出角度

在这里插入图片描述
dot中第一个是起点的单位向量,第二个是终点即起点到终点的向量的单位向量
算出的范围在 0- 180度之间
怎么算出他在左右方向,在后面讲

这个API在 unity中提供两个向量夹角的方法
Vector3.Angle
在这里插入图片描述

4.4.4 怪物视野范围

在这里插入图片描述
1)首先判断距离
2)再判断角度
在这里插入图片描述

也可以直接用API
在这里插入图片描述

4.5 向量叉乘

在这里插入图片描述

4.5.1 计算叉乘

在这里插入图片描述

4.5.2 几何意义

在这里插入图片描述
同时垂直于A向量和B向量
AXB向量垂直于A和B组成的平面
A X B = -( B X A )

在这里插入图片描述

在这里插入图片描述
使用函数时参数互换的话得到结果相反

4.5.3 完善索敌脚本

在这里插入图片描述

1)在这里插入图片描述
右后和左后同理
2)
在这里插入图片描述

4.6 插值运算

4.6.1 线性插值

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 四元数

首先讲欧拉角
把角度分成按X,Y,Z三个轴进行旋转
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以为什么使用四元数
在这里插入图片描述

5.1 四元数是什么

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
Q = [cos(角度/2),sin(角度/2)n]

5.2 unity中的四元数

5.2.1 轴角对

在这里插入图片描述
第一种方法(一般不用)
在这里插入图片描述
在这里插入图片描述
第二种方法(简单记这个)
在这里插入图片描述
在这里插入图片描述

绕Vector3.right 旋转60度

5.2.2 四元数和欧拉角的转换

在这里插入图片描述

5.2.3 四元数相乘

四元素相乘代表旋转四元数
在这里插入图片描述
表示按面朝向旋转

5.3 四元数的常用方法

在这里插入图片描述

5.3.1 单位四元数

在这里插入图片描述
在这里插入图片描述
表示没有旋转

5.3.2 插值运算

在这里插入图片描述

一般使用Slerp
在这里插入图片描述
在这里插入图片描述
start要实时更新

在这里插入图片描述

5.3.3 向量指向转四元素

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3.4 利用LookRotation实现LookAt方法

在这里插入图片描述

5.3.5 利用 Slper实现摄像机匀速或先快后慢看向目标

在这里插入图片描述

5.4 四元数计算

5.4.1 四元数相乘

代表两个旋转量的叠加,相当于旋转
在这里插入图片描述

5.4.2 四元数乘向量

在这里插入图片描述
返回一个新向量,获得旋转对应四元数的旋转向量

在这里插入图片描述
相当于获得了新的方向向量

5.4.3 模拟飞机游戏中发射不同类型子弹的方法

在这里插入图片描述

在这里插入图片描述

5.4.4 实现各类摄像机跟随效果

在这里插入图片描述

画条线观测一下

在这里插入图片描述
在这里插入图片描述
实现了1,3

在这里插入图片描述

根据鼠标中间输入修改dis的值,从而修改摄像机离物体的距离
实现了2

在这里插入图片描述
实现4 .5

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果Find My可查找添加32件物品,伦茨科技ST17H6x芯片加速产品赋能

苹果最近更新的支持文档证实,从 iOS 16 开始,"Find My"可查找添加物品从16件增加到32件,AirTag 和“查找”网络中的物品利用“查找”网络的强大功能来发挥作用,这个网络由数亿台加密的匿名 Apple 设备构成。“查找”网络…

【Unity】AB包下载

【Unity】AB包下载 1.使用插件打AB包 a.AB包分类 一般地,将预制体作为AB包资源,不仅需要对预制体本身进行归类,还要对其涉及的动画(AnimationClip)、动画状态机(AnimatorController)、以及所…

golang学习笔记——http.Handle和http.HandleFunc的区别与type func巧妙运用

文章目录 http.Handle和http.HandleFunc的区别http.Handle分析type func巧妙运用 http.HandleFunc分析总结参考资料 http.Handle和http.HandleFunc的区别 http.Handle和http.HandleFunc的区别体现了Go语言接口的巧妙运用 下面代码启动了一个 http 服务器,监听 808…

Android学习之路(22) 从模块化到组件化

从模块化到组件化 一、从模块化到组件化 Android 应用项目 , 都存在一个应用模块 ( Application Module ) , 在 build.gradle 构建脚本中 , 第一个插件配置 com.android.application , 表明 该 Module 编译打包后的输出是 APK 安装包 ; 该项目可以直接运行 ; plugins {id co…

基础+常用的数据结构

基础 java基础 JDK 和 JRE JDK,它是功能齐全的 Java SDK,是提供给开发者使用,能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc(文档注释工具&#…

AI 的未来是开源的

想象一下,在未来,人工智能不会被锁在公司的金库里,而是由全球创新者社区一砖一瓦地在开放中构建的。协作,而不是竞争,推动进步,道德考虑与原始绩效同等重要。这不是科幻小说,而是人工智能发展核…

代码随想录 Leetcode1047. 删除字符串中的所有相邻重复项

题目&#xff1a; 代码(首刷自解 2024年1月21日&#xff09;&#xff1a; class Solution { public:string removeDuplicates(string s) {if (s.size() < 2) return s;stack<char> t;for (int i 0; i < s.size(); i) {if (t.empty()) t.push(s[i]);else {if (s[i…

广和通AI解决方案“智”赋室外机器人迈向新天地!

大模型趋势下&#xff0c;行业机器人将具备更完善的交互与自主能力&#xff0c;逐步迈向AI 2.0时代&#xff0c;成为人工智能技术全面爆发的重要基础。随着行业智能化&#xff0c;更多机器人应用将从“室内”走向“室外”&#xff0c;承担更多高风险、高智能工作。复杂的室外环…

使用easyexcel 导出多级表头demo

先看效果&#xff1a; 1、引入maven依赖 <!--EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version> </dependency> 2、实体类 package com.…

【算法练习Day50】下一个更大元素II接雨水

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 下一个更大元素II接雨水单调…

应用层—HTTPS详解(对称加密、非对称加密、密钥……)

文章目录 HTTPS什么是 HTTPSHTTPS 如何加密HTTPS 的工作过程对称加密非对称加密 HTTPS 什么是 HTTPS HTTPS 也是一个应用层的协议。是在 HTTP 协议的基础上引入的一个加密层。 由来&#xff1a;HTTP 协议内容都是按照文本的方式明纹传输&#xff0c;这就导致在传输过程中出现…

Python 面向对象绘图(Matplotlib篇-16)

Python 面向对象绘图(Matplotlib篇-16)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

GaussDB数据库中的MERGE INTO介绍

一、前言 二、GaussDB MERGE INTO 语句的原理概述 1、MERGE INTO 语句原理 2、MERGE INTO 的语法 3、语法解释 三、GaussDB MERGE INTO 语句的应用场景 四、GaussDB MERGE INTO 语句的示例 1、示例场景举例 2、示例实现过程 1&#xff09;创建两个实验表&#xff0c;并…

css-盒子等样式学习

盒子居中&#xff0c;继承外层盒子的宽高 兼容性&#xff08;border-box&#xff09;将边框收到盒子内部 初始化div 不用管box-setting content-box 还原 创建为一个类 &#xff0c;让所有需要还原的类 进行继承 padding 用法表示margin上下左右边距 body 外边距&…

C++ 设计模式之策略模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】什么是策略模式&#xff08;第14种模式&#xff09; 策略模式是⼀种⾏为型设计模式&…

深度学习常用代码总结(k-means, NMS)

目录 一、k-means 算法 二、NMS 一、k-means 算法 k-means 是一种无监督聚类算法&#xff0c;常用的聚类算法还有 DBSCAN。k-means 由于其原理简单&#xff0c;可解释强&#xff0c;实现方便&#xff0c;收敛速度快&#xff0c;在数据挖掘、数据分析、异常检测、模式识别、金…

ChatGPT提示词保姆级教程

现在越来越多提示词教程&#xff0c;本文列个清单&#xff0c;方便以后整理&#xff0c;不定期更新&#xff0c;欢迎关注留言&#xff01; 后续更新欢迎关注 提示词&#xff08;prompt&#xff09;出来后&#xff0c;被称为一个新的岗位诞生&#xff0c;面向提示词工程师。 …

shell编程学习

shell编程学习 变量的高级用法变量替换字符串处理获取字符索引获取子串长度抽取字符串中的子串 案例测试 变量的高级用法 变量替换 ##变量替换&#xff08;贪婪&#xff0c;从前往后匹配&#xff0c;匹配到进行删除&#xff09; test1I love you,you love me echo $test1 han…

数学建模实战Matlab绘图

二维曲线、散点图 绘图命令&#xff1a;plot(x,y,’line specifiers’,’PropertyName’,PropertyValue) 例子&#xff1a;绘图表示年收入与年份的关系 ‘--r*’:--设置线型&#xff1b;r:设置颜色为红色&#xff1b;*节点型号 ‘linewidth’&#xff1a;设置线宽&#xff1…

HarmonyOS鸿蒙学习基础篇 - 项目目录和文件介绍

├── hvigor //存储购置信息的文件&#xff0c;主要用于发布打包 ├── idea //开发工具相关配置可忽略 ├── AppScope //工程目录 全局公共资源存放路径 │ └── resources │ │ └── base │ │ │ └── element //常亮存放 │ │ │ …