Unity零基础到入门 ☀️|Vector3(三维向量)和Quaternion(四元数旋转)

举报
呆呆敲代码的小Y 发表于 2021/08/31 20:38:28 2021/08/31
【摘要】 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(四元数旋转)

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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。