本文主要介绍Unity中向量的几种运算和一些作用,主要包括向量的加法和减法,点乘和叉乘。
向量的加减法
假设有两个向量a和b,向量a=(x1,y1),向量b=(x2,y2),那么加减法得出的向量c就为(x1+x2,y1+y2),(x1-x2,y1-y2)。
在Unity中,减法可以用来求方向。假设在游戏中,玩家坐标是a,敌人的坐标是b,这两个坐标是世界坐标。这两个坐标起始就是等于从原点开始的向量,那么把玩家坐标和敌人坐标相减就能得出一个向量,让敌人沿着该向量行走就可以看到敌人向玩家走过去了。
如上图所示,我们创建三个游戏物体,一个player,一个emeny,一个地面plane,(记得添加完了要reset一下)。在enemy上挂载一个WalkTo脚本和一个Character Cintroller组件,WalkTo脚本的内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WalkTo : MonoBehaviour
{
public Vector3 v1;
public Vector3 v2;
public Vector3 direction;
public CharacterController cc;
private void Awake()
{
v1 = GameObject.Find("player").transform.position;
v2 = this.transform.position;
cc = GetComponent<CharacterController>();
}
void Update()
{
//这里乘以0.1f让物体移动的慢一些
direction = (v1 - v2) * 0.1f;
cc.SimpleMove(direction);
}
}
代码的逻辑也很简单,就是用上述向量减法的逻辑和Character Controller的SimpleMove方法让enemy物体向player移动。
向量的点乘
点成就是让向量对应坐标相乘,假设有两个向量a和b,向量a=(x1,y1),向量b=(x2,y2),那么点乘得出的向量c就为(x1x2,y1y2)。
可以通过反余弦求两个向量的夹角。θ=arccos((a·b)/ |a| |b| )。但其他Unity中有一个函数Vector3.Angle(a,b)可以求从a到b之间的夹角,注意返回的是浮点数。
具体有什么别的用处还没遇到。
向量的叉乘
假设有两个向量a和b,向量a=(x1,y1,z1),向量b=(x2,y2,z2),那么叉乘得出的向量c为(y1z2-z1y2,z1x2-x1z2,x1y2-y1x2)。假设p是向量a和向量b组成的一个平面,那么向量c垂直于该平面。
在《糖豆人》中,有些关卡会有一些斜面,玩家碰到这些斜面就会沿着垂直于该斜面的方向弹出去。通过向量的叉乘就可以得到垂直于平面的向量,在向量上施加一个速度,在附加到人物的rigbody上,人物就可以完成一样的效果。
还在补充当中。。。。。