Unity零基础到入门 ☀️|Vector3(三维向量)和Quaternion(四元数旋转)
【摘要】 Vector3(三维向量)Vector3向量,在三维坐标系中带有方向和大小的数据,下图介绍了Vector3的属性参数下面来用代码示例学一下 Vector3的使用//创建一个三维向量 Vector3 dir = new Vector3(1,2,3); //创建一个二维向量 Vector2 dir2 = new Vector2(3,3); ...
Vector3(三维向量)
Vector3向量,在三维坐标系中带有方向和大小的数据,下图介绍了Vector3的属性参数
下面来用代码示例学一下 Vector3的使用
//创建一个三维向量
Vector3 dir = new Vector3(1,2,3);
//创建一个二维向量
Vector2 dir2 = new Vector2(3,3);
//创建一个四维向量
Vector4 dir4 = new Vector4(1,2,3,4);
//获取一个向量的单位向量
Vector3 normalDir = dir.normalized;
//将当前向量变成单位向量
dir.Normalize();
//向量的长度【模】
float mag = dir.magnitude;
//模的平方【用来做向量长度的对比】
float sqrMag = dir.sqrMagnitude;
// Vector3.forward
// Vector3.back
// Vector3.left
// Vector3.right
// Vector3.up
// Vector3.down
// Vector3.zero
// Vector3.one
Vector3 pointA = Vector3.forward;
Vector3 pointB = Vector3.right;
//求两个坐标的距离
float dis = Vector3.Distance(pointA, pointB);
Vector3 dirA = Vector3.one;
Vector3 dirB = Vector3.right;
//求两个向量的夹角
float angle = Vector3.Angle(dirB, dirA);
float newAngle = Vector3.Angle(new Vector3(1, 1, 0), Vector3.zero);
//求两个向量的点乘
float dot = Vector3.Dot(dirA, dirB);
//求两个向量的叉乘【求两个向量的法向量】
Vector3 normal = Vector3.Cross(dirA, dirB);
//求一个向量在某个方向上的投影向量
Vector3 pro = Vector3.Project(new Vector3(1, 1, 0), Vector3.right);
//求两个向量中间的插值坐标
Vector3.Lerp(new Vector3(1, 0, 0), new Vector3(5, 0, 0), 0.5f);
//由快到慢运动过去
transform.position = Vector3.Lerp(transform.position, new Vector3(5, 0, 0), 0.03f);
Quaternion四元数本质上是一种高阶复数,是一个四维空间,相对于复数的二维空间。
在Unity里,tranform组件有一个变量名为Rotation,它的类型就是四元数。用于在Unity中控制旋转的一种方式
下面来用代码示例学一下 Quaternion的使用
public class ReadQuaternion : MonoBehaviour
{
public float turnSpeed = 3f;
public Transform target;
void Start()
{
//空旋转【相当于欧拉角的(0,0,0)】
Debug.Log(Quaternion.identity);
//将当前角色的旋转设置空旋转
transform.rotation = Quaternion.identity;
}
void Update()
{
// transform.LookAt(target);
//插值旋转
// transform.rotation 起点四元数
//玩家指向敌人的方向向量
Vector3 dir = target.position - transform.position;
//目标四元数
Quaternion targetQua = Quaternion.LookRotation(dir);
// transform.position = Vector3.Lerp(transform.position,Vector3.right*5,0.02f);
//插值转身
transform.rotation = Quaternion.Lerp(transform.rotation, targetQua, 0.02f * turnSpeed);
}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)