Unity 人物方向旋转详细讲解

Unity 人物方向旋转详细讲解

  • 人物的旋转有很多种
  • 一、在介绍之前我们需要理解Unity的向量也就是Vector3
  • 二、下面我们创建两个小球f1,f2
    • 左边的为f2 右边的为f1
  • 三、我们将小球坐标用白色直线画出来,两个小球之间用黑色线画出来,两个小球的向量用黄线表示
    • 接下来我们需要做的就是创建一个物体将物体旋转到黄线的方向
    • 因为旋转不需要考虑向量的大小与坐标的y值所以这里我把黄线改为单位向量并将y改为0配置如下所示
    • 所以旋转时,这根白线的单位向量就是我们物体的朝向方向
    • 此时运行场景无论该物体的旋转是多少都无所谓最后都会缓慢的转向白线的方向

人物的旋转有很多种

这里介绍旋转使用四元数的方法

Quaternion.LookRotation(Vector3 dir);
Quaternion.Lerp(Quaternion a, Quaternion b, float t);

一、在介绍之前我们需要理解Unity的向量也就是Vector3

首先我们创建一个Unity的脚本,将坐标系用Unity画出来如下

图中白球的位置为0,0,0坐标的原点
在这里插入图片描述
代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;[ExecuteInEditMode]
public class DirTest : MonoBehaviour {// Update is called once per framevoid Update () {for (int i = 0; i < 10; i++){for (int j = 0; j < 10; j++){Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);}}}
}

二、下面我们创建两个小球f1,f2

左边的为f2 右边的为f1

在这里插入图片描述

三、我们将小球坐标用白色直线画出来,两个小球之间用黑色线画出来,两个小球的向量用黄线表示

脚本中添加两个Transform p1 ,p2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;[ExecuteInEditMode]
public class DirTest : MonoBehaviour {/// <summary>/// /// </summary>public Transform p1;/// <summary>/// /// </summary>public Transform p2;// Update is called once per framevoid Update () {for (int i = 0; i < 10; i++){for (int j = 0; j < 10; j++){Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);}}Debug.DrawLine(Vector3.zero, p1.position);Debug.DrawLine(Vector3.zero, p2.position);Debug.DrawLine(p1.position,p2.position, Color.black);Vector3 dir = p1.position - p2.position;Debug.DrawLine(Vector3.zero,dir, Color.black);Debug.DrawLine(Vector3.zero,dir, Color.yellow);}
}

效果如下:

这里我们发现黑线和黄线的方向大小都是一致的只是位置不同而已
在这里插入图片描述

接下来我们需要做的就是创建一个物体将物体旋转到黄线的方向

这个黄线是有方向的:(0,0,0)到黄线的末端就是向量的方向

因为旋转不需要考虑向量的大小与坐标的y值所以这里我把黄线改为单位向量并将y改为0配置如下所示

在这里插入图片描述

所以旋转时,这根白线的单位向量就是我们物体的朝向方向

创建旋转的物体
在这里插入图片描述

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;[ExecuteInEditMode]
public class DirTest : MonoBehaviour {/// <summary>/// /// </summary>public Transform p1;/// <summary>/// /// </summary>public Transform p2;/// <summary>/// 物体/// </summary>public Transform p3;// Update is called once per framevoid Update () {for (int i = 0; i < 10; i++){for (int j = 0; j < 10; j++){Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);}}Debug.DrawLine(Vector3.zero, p1.position);Debug.DrawLine(Vector3.zero, p2.position);Debug.DrawLine(p1.position,p2.position, Color.black);Vector3 dir = p1.position - p2.position;dir.y = 0;Debug.DrawLine(Vector3.zero,dir, Color.black);Debug.DrawLine(Vector3.zero,dir, Color.yellow);Debug.DrawLine(Vector3.zero,dir.normalized, Color.white);p3.rotation = Quaternion.Lerp(p3.rotation,Quaternion.LookRotation(dir.normalized),Time.deltaTime * 3f);}
}

此时运行场景无论该物体的旋转是多少都无所谓最后都会缓慢的转向白线的方向

在这里插入图片描述

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

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

相关文章

Linux开发工具——gcc篇

gcc的使用 文章目录 gcc的使用 历史遗留问题&#xff08;普通用户sudo&#xff09; gcc编译过程 预处理&#xff08;进行宏替换&#xff09; 编译&#xff08;生成汇编&#xff09; 汇编&#xff08;生成机器可识别代码&#xff09; 链接&#xff08;生成可执行文件或库文件&a…

使用 OpenTelemetry 和 Loki 实现高效的应用日志采集和分析

在之前的文章陆续介绍了 如何在 Kubernetes 中使用 Otel 的自动插桩 以及 Otel 与 服务网格协同实现分布式跟踪&#xff0c;这两篇的文章都将目标聚焦在分布式跟踪中&#xff0c;而作为可观测性三大支柱之一的日志也是我们经常使用的系统观测手段&#xff0c;今天这篇文章就来体…

速看!销冠高效给客户群发消息的秘诀

你是不是也有过这样的疑问&#xff1a;明明都是给客户群发消息&#xff0c;为什么别人的成交率那么高&#xff0c;自己却效果一般呢&#xff1f; 今天就给大家分享销冠常用的高效群发消息秘诀&#xff0c;让大家都能更好地与客户进行沟通&#xff0c;提高成交率&#xff01; …

SQL Server的权限设置

实验环境&#xff08;实验案例一&#xff09; 某公司部署了 SQL Server 2016用来存储网站数据&#xff0c;由系统管理员进行维护.在bdon数据库中 已创建了class表。 需求描述 赋予用户zhangsan在bdqn数据库中创建表的权限和对class表查询和更新数据的权限。

28、清华大学脑机接口实验组SSVEP数据集:通过视觉触发BCI[飞一般的赶脚!]

前言&#xff1a; 哈喽&#xff0c;最近对清华大学脑机接口的数据进行了尝试&#xff0c;输入到了DL模型中&#xff0c;以下是本人对于清华BCI数据的个人见解。 数据地址&#xff1a; 清华大学脑机接口研究组 (tsinghua.edu.cn) 打开网站可以看到有很多个数据&#xff0c;官…

【Mathematical Model】Ransac线性回归Python代码

Ransac算法&#xff0c;也称为随机抽样一致性算法&#xff0c;是一种迭代方法&#xff0c;用于从一组包含噪声或异常值的数据中估计数学模型。Ransac算法特别适用于线性回归问题&#xff0c;因为它能够处理包含异常值的数据集&#xff0c;并能够估计出最佳的线性模型。 1 简介 …

Open3D 点云数据处理基础(Python版)

Open3D 点云数据处理基础&#xff08;Python版&#xff09; 文章目录 1 概述 2 安装 2.1 PyCharm 与 Python 安装 2.3 Anaconda 安装 2.4 Open3D 0.13.0 安装 2.5 新建一个 Python 项目 3 点云读写 4 点云可视化 2.1 可视化单个点云 2.2 同一窗口可视化多个点云 2.3…

Wafer晶圆封装工艺介绍

芯片封装的目的&#xff08;The purpose of chip packaging&#xff09;: 芯片上的IC管芯被切割以进行管芯间连接&#xff0c;通过引线键合连接外部引脚&#xff0c;然后进行成型&#xff0c;以保护电子封装器件免受环境污染&#xff08;水分、温度、污染物等&#xff09;&…

SSH秘钥登录服务器

一、查看本机 ssh 公钥&#xff0c;生成公钥 1.通过命令窗口 a. 打开你的 git bash 窗口 b. 进入 .ssh 目录&#xff1a;cd ~/.ssh c. 找到 id_rsa.pub 文件&#xff1a;ls d. 查看公钥&#xff1a;cat id_rsa.pub 或者 vim id_rsa.pub git–查看本机 ssh 公钥&#xff0c…

STM32单片机项目实例:基于TouchGFX的智能手表设计(7)MVP架构下的交互逻辑设计

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;7&#xff09;MVP架构下的交互逻辑设计 目录 一、概述 二、MVP架构下的交互逻辑 一、概述 本文例程是基于 TouchGFX 的智能手表设计—Designer 软件 UI 设计的例程 0B-2_STM32U575_MVP_Interactive工…

Postman接口测试(超详细整理)

常用的接口测试工具主要有以下几种 Postman&#xff1a;简单方便的接口调试工具&#xff0c;便于分享和协作。具有接口调试&#xff0c;接口集管理&#xff0c;环境配置&#xff0c;参数化&#xff0c;断言&#xff0c;批量执行&#xff0c;录制接口&#xff0c;Mock Server, …

国际会议口译,选择同传好还是交传好

在国际会议中&#xff0c;同传与交传是常见的两种翻译方式&#xff0c;它们各自承载着独特的使命与优势&#xff0c;为沟通世界发挥着不可替代的作用。那么&#xff0c;同传好还是交传好&#xff0c;如何选择合适的翻译方式&#xff1f; 首先&#xff0c;从费用角度来看&#x…