unity3D数学

一、向量的定义

向量:有大小有方向
与向量相对的量成为标量:即只有大小没有方向的量。例如物体移动中的平均速率、路程。
模:向量的长度标准化(Normalizing):保持方向不变,将向量的长度变为1.
单位向量:长度为1的向量。
零向量:各分量均为0的向量
向量运算——加减:向量的加法(减法)为各个分量分别相加(相减)。在物理上可以用来计算两个里的合力,或者几个速度份量的叠加。

二、向量的加减法

每个坐标都进行加减(x与x,y与y,z与z)
如果v1和v2都表示一个点的话,那么v3的方向是从v1开始指向v2的一个带有箭头的射线,此时v3就是一个向量
如果v1和v2都表示一个向量的话,那么v3是一个从v1的尾部指向v2的头部的一个带有方向箭头的一条射线 ,减法则相反

三、点乘

点乘:向量·向量=标量
每个坐标都进行相乘(x与x,y与y,z与z)
Vector3.Dot():计算点乘的方法

//1、用单位向量算出点乘结果
float pos = Vector3.Dot(transform.forward, (target.position - transform.position).normalized);
//2、用反三角函数得出角度(0--180)
print("角度为:" + Mathf.Acos(pos) * Mathf.Rad2Deg);

//用Vector3计算两个向量的夹角
print("角度2为:" + Vector3.Angle(transform.forward, target.position - transform.position));

四、叉乘

叉乘:向量X向量=向量
向量A(XA,YA,ZA)
向量B(XB,YB,ZB)
AXB=(XC,YC,BC)
XC=YAZB-ZAYB
YC=XAZB-ZAXB
ZC=XAYB-YAXB
得出来的结果(XC,YC,BC)同时垂直向量A和向量B,又称为他们的法线
Vector3.Cross():计算叉乘的方法

五、注释旋转

function LookRotation (forward : Vector3, upwards : Vector3 = Vector3.up) : void 
传入的两个参数分别代表前方盯着的方向以及自己的上方向。它可以让一个GameObject转动脑袋盯着另一个物体。
    public Vector3 target;   // cube的朝向目标, 初始值为(0, 3, 0)
    void Update()
    {
// 注意, 此处Vector3.up并不一定与target - cube.position垂直
        cube.rotation = Quaternion.LookRotation(target - cube.position, Vector3.up); 

        Debug.DrawLine(Vector3.zero, cube.forward, Color.blue); // 绘制每根轴
        Debug.DrawLine(Vector3.zero, cube.right, Color.red);
        Debug.DrawLine(Vector3.zero, cube.up, Color.green);
    }
LookAt()LookRotation()的参数都相似,但前者是将游戏对象的z轴指向参数所表示的那个点,而后者是将游戏对象的z轴指向参数所表示的向量的方向;

六、Invoke和InvokeRepeating

1Invoke(methodName: string, time: float): void;
methodName:方法名      time:多少秒后执行

案例:点击鼠标左键,3秒后克隆一个游戏对象
public GameObject cube;
	void Update () 
{
        if (Input.GetMouseButtonDown(0))
        {
			Invoke("CreateNewCube", 3f);
        }
	}
	void CreateNewCube()
    {
		Instantiate(cube);
}2InvokeRepeating(methodName: string, time: float, repeatRate: float): void;
methodName:方法名    time:多少秒后执行   repeatRate:重复执行间隔
案例:点击鼠标左键,3秒后每隔2秒克隆一个游戏对象

public GameObject cube;
	void Update () 
{
        if (Input.GetMouseButtonDown(0))
        {
			InvokeRepeating("CreateNewCube", 3f,2f);
		}
	}
	void CreateNewCube()
    {
		Instantiate(cube);
}

CancelInvoke:取消该脚本上的所有延时方法
int i = 0;
	void CreateNewCube()
    {
		Instantiate(cube);
		i++;
		print("执行次数:"+i);
        if (i == 5)
        {
			CancelInvoke();
        }
}

七、Mathf

1)Mathf.Abs:绝对值
(2)Mathf.Clamp(float value,float min,float max)
在 Mathf.Clamp 中传入三个参数:value,min,max
限制 value的值在min,max之间,如果value大于max,则返回max,如果value小于min,则返回min,否者返回value;
案例:飞机飞行的范围限制
float x = Mathf.Clamp(transform.position.x, -6.66f, 6.66f);
float z = Mathf.Clamp(transform.position.z, -35.5f, -11.5f);
transform.position = new Vector3(x, 0, z);3)Mathf.Ceil上限值
     Ceil (f : float) : float 
返回 f 指定数字或表达式的上限值。数字的上限值是大于等于该数字的最接近的整数。
(4)Mathf.Floor下限值
	Floor (f : float) : float 
返回参数 f 中指定的数字或表达式的下限值。下限值是小于等于指定数字或表达式的最接近的整数。
(5)Mathf.Max最大值
Max (a : float, b : float): float 
返回两个或更多值中最大的值。

Mathf.Min最小值
 function Min (a : float, b : float): float 
返回两个或更多值中最小的值。
(6)Mathf.Repeat重复
 Repeat (t : float, length :float) : float 
循环数值t,0到length之间。t值永远不会大于length的值,也永远不会小于0。
案例:立方体循环往复的放大
void Update () 
{
			float a = Mathf.Repeat(Time.time, 2);
			transform.localScale = new Vector3(a, a, a);
}

Mathf.PingPong乒乓
PingPong (t : float, length: float) : float 
0到length之间往返。t值永远不会大于length的值,也永远不会小于0。
返回值将在0和length之间来回移动。
案例:立方体循环往复的放大缩小
void Update () 
{
			float a = Mathf.PingPong(Time.time, 2);
			transform.localScale = new Vector3(a, a, a);
}7)Mathf.PI圆周率
PI(读pai)的值,也就是圆周率(π)的值3.14159265358979323846…
(8)Mathf.Pow次方
 Pow (f : float, p : float): float 
计算并返回 f 的 p 次方。
(9)Mathf.RoundToInt四舍五入到整数
 RoundToInt (f : float) :int 
返回 f 指定的值四舍五入到最近的整数。
如果数字末尾是.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。

Mathf.Round四舍五入
 Round (f : float) : float 
返回浮点数 f 进行四舍五入最接近的整数。
如果数字末尾是.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。
(10)Mathf.Sqrt平方根
 Sqrt (f : float) : float 
计算并返回 f 的平方根。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值