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 frame
	void 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 frame
	void 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 frame
	void 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);
    }
}

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 Python 和Surprise库,新手轻松搭建推荐系统

解密基于用户的推荐系统。 1、简介 在数据时代&#xff0c;推荐系统是提升用户体验的重要工具。今天介绍如何使用亚马逊的电影评分数据集创建电影推荐系统。 2、数据加载与探索 首先&#xff0c;通过加载和探索数据集开启数据分析过程。首先导入Pandas和Numpy&#xff0c;这…

MATLAB学习笔记(一)求解三阶微分方程

一、求解三阶微分方程 对于多变量三阶微分方程求解问题&#xff0c;这里介绍一种求解方法。 例题如下&#xff1a; 对于以上方程&#xff0c;给定边界条件&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;。求解和的表达式。 二、解题步骤 &#xff08;1&…

系列十一(实战)、发送 接收带标签的消息(Java操作RocketMQ)

一、发送 & 接收带标签的消息 1.1、概述 消息的种类纷繁复杂&#xff0c;不同的业务场景需要不同的消息&#xff0c;基于此RocketMQ提供了消息过滤功能&#xff0c;通过Tag或者Key进行区分&#xff0c;本章介绍Tag&#xff0c;我们再往一个Topic里面发送消息的时候&#x…

正式官宣!谈思AutoSec 8周年年会暨中国汽车网络安全及数据安全合规峰会将于明年4月在沪召开

随着智能互联网时代的到来&#xff0c;智能汽车的安全形势变得更加严峻和复杂&#xff0c;网络资产的暴露和安全边界继续扩大。与传统的汽车车身安全问题相比&#xff0c;网络安全、数据安全、用户隐私等安全问题交织叠加&#xff0c;并加速了黑客对智能汽车领域的渗透&#xf…

OpenHarmony之内核层解析~

OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计&#xff0c;从下向上依次为&#xff1a;内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开&#xff0c;在多设备部署场景下&#xff0c;支持根据实际需求裁剪某些非必要的组件…

微服务-springcloud(eureka实践, nacos实践)

Spring 体系图 版本关系 eureka 实践 1 父工程依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.14</version> </parent> <dependencyManage…

VA01/VA02/VA03 销售订单根据定价和步骤校验权限隐藏价格(二)

1、文档说明 1.1、内容回顾 之前发表过相关文章《VA01/VA02/VA03 销售订单根据定价和步骤校验权限隐藏价格&#xff08;一&#xff09;》&#xff0c;本篇文章对上一篇文章做补充说明。 第一篇文章是通过拥有权限&#xff0c;则隐藏价格的模式&#xff0c;即对需要隐藏价格的…

第一届能源电子产业创新大赛太阳能光伏赛道在京顺利完成初赛评审

近日&#xff0c;第一届能源电子产业创新大赛太阳能光伏赛道初赛在北京顺利举行。本次太阳能光伏赛道赛事由工业和信息化部产业发展促进中心、宜宾市人民政府主办&#xff0c;宜宾市经济和信息化局、宜宾高新技术产业园区承办&#xff0c;中国国检测试控股集团股份有限公司协办…

天下第一铭:以此文纪念汤晓鸥

文章目录 1. Introduction2. Main3. Biography4. My ThoughtsReference彩蛋环节 1. Introduction 汤晓鸥的逝世是继孙剑博士逝世之后&#xff0c;华人在计算机视觉领域的又一损失。 以下文章为汤晓鸥教授的一篇旧文&#xff0c;我重发此文以纪念作者。 2. Main 汤晓鸥&#x…

2024 年 10大 AI 趋势

2025 年&#xff0c;全球人工智能市场预计将达到惊人的 1906.1 亿美元&#xff0c;年复合增长率高达 36.62%。 人工智能软件正在迅速改变我们的世界&#xff0c;而且这种趋势在未来几年只会加速。 我们分析了未来有望彻底改变 2024 年的 10 个AI趋势。从生成式人工智能的兴起到…

56.0/DIV+CSS 布局(详细版)

目录 56.1 本章简介 56.2 实例讲解 56.2.1 菜单制作 56.2.2 美化滚动条 56.2.3 DIV+CSS 布局 56.3 综合示例 56.3.1 总体分析 56.3.2 Header 层 56.3.3 最终代码 56.1 本章简介 本章通过几个实例讲解 DIV+CSS 的应用。 采用表格布局的页面内,为了实现设计的布局,制作者往往…

用旧电脑搭建NAS

将旧 PC 改造成家庭服务器或 NAS&#xff08;网络附加存储的缩写&#xff09; 一、使用旧 PC 作为 NAS 服务器的优势 如果您想要快速且易于使用的解决方案&#xff0c;专门构建的 NAS 可能是个不错的选择。但将旧 PC 重新利用为 NAS 服务器有其独特的优势&#xff1a; 黑苹果…

一文道破Java中的深拷贝,浅拷贝,零拷贝

前言 在Java编写代码中&#xff0c;对象的拷贝是一个常见的操作。根据拷贝的层次和方式不同&#xff0c;可以分为深拷贝、浅拷贝和零拷贝。本篇文章我们将详细介绍这三种拷贝方式的概念、实现方法以及使用场景&#xff0c;方便大佬学习及面试。 深拷贝 深拷贝是一种创建对象副…

【数据结构】——期末复习题题库(1)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

数据治理之数据标准管理

目录 一、概述什么是数据标准数据标准的作用什么是数据标准化数据标准的意义业务方面技术方面管理方面 二、数据标准管理的内容数据模型标准基础数据标准主数据和参考数据标准指标数据标准 三、数据标准管理流程数据标准梳理数据标准制定数据标准审查数据标准发布数据标准贯彻 …

Redis的安装以及使用

第一步&#xff0c;去官网下载一个压缩包到本地解压即用&#xff0c;绿色软件&#xff0c;不用其他操作&#xff0c;点击Download下载即可&#xff1a; Introduction to Redis | RedisLearn about the Redis open source projecthttps://redis.io/docs/about/第二步&#xff0…

用邮件群发软件开拓外贸客户:有效的方法与技巧

随着跨境电商业务的发展&#xff0c;企业在研发外贸客户时面临如何有效地与潜在用户沟通的挑战。电子邮件群发软件已经成为一种时兴的工具&#xff0c;帮助企业迅速推送很多电子邮件。本文将探讨电子邮件群发软件在外贸客户开发中的实际应用效果&#xff0c;并从专业角度分析其…

简单的喷淋实验--嵌入式实训

目录 喷淋实验--嵌入式实训 1.MQTT通信原理 2.MQTT库的移植 3.代码流程 运行视频如下: 喷淋实验--嵌入式实训 1.MQTT通信原理 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布/订阅消息传输协议&#xff0c;旨在提供可靠、高效的通信…

计算机视觉基础(12)——图像恢复

前言 我们将学习图像恢复相关知识。主要有图像恢复的定义、评价标准和实现图像恢复的方法。图像恢复任务包括图像去噪、去模糊、图像超分辨率、图像修复等&#xff1b;评价标准有峰值信噪比和结构相似性&#xff1b;图像超分辨的方法有传统方法和基于深度学习的方法&#xff1a…