第十四章 移动和旋转(下)

news2024/11/27 10:26:57

本章节我们介绍另外两种形式的旋转,也对应了两个方法。首先是RotateAround方法,他是围绕穿过世界坐标中的 point 点的 axis轴旋转 angle 度。这个方法虽然比较晦涩难懂,但是我们使用一个案例,大家就非常明白了。我们创建一个新的“SampleScene5”场景,然后创建一个“Cube”游戏对象和“CubeRotate.cs”脚本,并附加两者在一起。接下来,我们将“Cube”放置到世界坐标系的(-5,0,0)位置,然后我们创建一个“Sphere”球体并放置在世界坐标系原点(0,0,0)位置。

最后,为了能够观察“Cube”的旋转,我们还需要移动和旋转摄像机,让其在世界坐标系的原点正上方向下俯视整个场景,参数设置入下:

 

接下来,我们保持相机选中状态,我们点击菜单栏“GameObject”->“Align View to Selected”

接下来,我们添加“CubeTransformTest2”脚本中的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeRotate : MonoBehaviour
{
    // Update is called once per frame
    void Update()
    {
        Vector3 point = new Vector3(0, 0, 0);
        Vector3 axis = new Vector3(0, 1, 0);
        transform.RotateAround(point, axis, 10 * Time.deltaTime);
    }
}

稍微解释一下,point就是世界坐标系原点,也就是Sphere球体的位置。

axis就是Y轴正方向,而point和axis一起就代表了世界坐标系的Y轴。

而RotateAround就是让Cube围绕世界坐标系的Y轴进行旋转,通俗理解就是Cube(地球)围绕Sphere(太阳)进行“公转”,运行工程效果如下:

最后我们再介绍LookAt方法,它使当前游戏对象向前方向(transform.forward指向 target 的当前位置,类似于转头看向target 位置的操作。我们继续创建“SampleScene6”的新场景,然后创建“Cube”和“CubeLookAt.cs”脚本,并将其附加在一起,“Cube”的位置位于(0,0,0)点。接下来,我们继续创建一个“Sphere”和“SphereTest.cs”脚本,并将其附加在一起,它的位置在(-5,0,0)点。

然后我们需要调整摄像机的位置和旋转,让其能够在前上方俯视当前场景,摄像机参数如下:

 

接下来,我们保持相机选中状态,我们点击菜单栏“GameObject”->“Align View to Selected”

我们先完成“SphereTest.cs”脚本的内容,实现“Sphere”能够沿世界坐标系Z轴移动效果。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SphereTest : MonoBehaviour
{
    // Update is called once per frame
    void Update()
    {
        // 向前移动
        if (Input.GetKeyDown(KeyCode.W))
        {
            transform.Translate(Vector3.forward, Space.World);
        }

        // 向后移动
        if (Input.GetKeyDown(KeyCode.S))
        {
            transform.Translate(Vector3.back, Space.World);
        }
    }
}

接下来,就是“CubeLookAt.cs”脚本的内容。

因为我们需要让Cube看向Sphere,因此需要在当前脚本中获取到Sphere游戏对象。

让在Update方法中调用LookAt方法来让Cube看向Sphere,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeLookAt : MonoBehaviour
{
    // 球体
    GameObject sphere;

    // Start is called before the first frame update
    void Start()
    {
        sphere = GameObject.Find("Sphere");
    }

    // Update is called once per frame
    void Update()
    {
        transform.LookAt(sphere.transform);
    }
}

如果我们移动Sphere的话,Cube肯定会跟随旋转。

其实LookAt还有第二个参数worldUp,它会将Cube向上方向指向 worldUp;没有该参数的话,就是默认的世界坐标系Y轴。也就是说,Cube向上方向就是Vector3.up。Cube的向上方向本来就是世界坐标系Y轴,因此对我们的案例没有任何的影响。该参数其实是为了调整Cube旋转时候的姿态而已。默认就是Y轴向上的“站立”姿态。

注意:在使用LookAt方法的时候,他会让Cube在X/Y/Z三个轴上看向Sphere,对于X/Z轴的来讲,类似于我们所说的左右旋转,对于Y轴(垂直方向)来讲,这个旋转就不太人性化。因为在现实中,我们会左右旋转看向目标;但是如果目标在上方或者下方的时候,我们只是头部仰视或者俯视,并不会让整个身体进行旋转并看向目标。如何做这样的修改呢?

void Update()
{
        //transform.LookAt(sphere.transform);

        // 位置相减获取方向向量
        Vector3 direction = sphere.transform.position - transform.position;

        // 方向向量去掉Y轴(Y轴清零即可)
        direction = new Vector3(direction.x, 0, direction.z);

        // 使用四元数进行朝向的旋转
        transform.rotation = Quaternion.LookRotation(direction);
}

每句都有相应的注释,这里我们使用了Quaternion.LookRotation方法来完成朝向旋转。接下来,我们在进行测试的时候,即使在Y轴方向移动Sphere,Cube也不会朝向它并旋转了。关于这个案例的效果图,我们就不给到大家了(前提是Y轴上移动Sphere哦)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDBC详解(三):使用PreparedStatement实现CRUD操作(超详解)

JDBC详解(三):使用PreparedStatement实现CRUD操作(超详解) 前言一、操作和访问数据库二、使用Statement操作数据表的弊端三、PreparedStatement的使用1、PreparedStatement介绍2、PreparedStatement vs Statement3、Ja…

连接分析工具箱 | 利用CATO进行结构和功能连接重建

导读 本研究描述了一个连接分析工具箱(CATO),用于基于扩散加权成像(DWI)和静息态功能磁共振成像(rs-fMRI)数据来重建大脑结构和功能连接。CATO是一个多模态软件包,使研究人员能够运行从MRI数据到结构和功能连接组图的端到端重建,定制其分析并…

牛郎织女

我写的十二星座十二人大多是奇女子,如双子的刘若英《若》、天秤的叶倩文《AB天秤座,Sally》、射手的桂纶镁《半人马座,桂纶镁》、水瓶的杨千嬅《可惜我是水瓶座》、双鱼的安妮伊能静《十二星座十二人之:双鱼,伊能&…

使用cube studio开发机器学习建模的pipeline

(作者:陈玓玏) Cube Studio目前包含了传统机器学习模板,400AI模型,欢迎私信了解哇! 在使用cube studio进行模型训练或推理的过程中,我们有时会发现没有符合自己要求的模板,此时我们…

Unity 后处理(Post-Processing) -- (1)概览

在Unity中,后处理(Post-Processing)是在相机所捕捉的图像上应用一些特殊效果的过程,后处理会让图像视觉效果更好(前提是做的好)。 这些效果的范围有非常细微的颜色调整,也包括整体的美术风格的大…

graalvm spring 打包成exe

graalvm jdk下载https://www.graalvm.org/downloads/ 把graalvm加入环境变量和就是JAVA_HOME 安装native-image gu.cmd install native-image 问题: Error: Default native-compiler executable cl.exe not found via environment variable PATH Error: To prevent native-tool…

Redis基础——Redis常用命令

Redis基础 1.1 Redis通用命令 通用指令是部分数据类型的,都可以使用的指令,常见的有: KEYS:查看符合模板的所有keyDEL:删除一个指定的keyEXISTS:判断key是否存在EXPIRE:给一个key设置有效期&…

C++动态规划模板汇总大全

前言 如果你不太了解dp(动态规划)是个什么东西,请回到上次dp。 链接:动态规划算法详解 数字三角形模型 问题 A: 【一本通基础DP基础模型】【例9.2】数字金字塔 【题目描述】 观察下面的数字金字塔。写一个程序查找从最高点到…

【计算机图形学】三维图形投影和消隐(三视图构造)

模块4-1 三维图形投影和消隐 一 实验目的 编写三维图形各种变换的投影算法 二 实验内容 1:自行选择三维物体(不能选长方体),建立坐标系,给定点的三维坐标值,建立边表结构。完成三视图。 实验结果如下图所…

如何解决服务器认证失败

服务器认证失败是指在连接服务器时,由于身份认证失败而无法访问服务器。其实这是一种非常常见的问题,这种问题的原因很多,多方面导致的,但是我们又该如何解决这种问题呢?接下来就让小编为大家介绍服务器认证失败的原因…

41.Java单列集合LinkedList

单列集合LinkedList 1.LinkedList集合2.源码3. ArrayList和LinkedList的区别 1.LinkedList集合 在许多情况下,ArrayList效率更高,因为通常需要访问列表中的某一个元素,但是LinkedList提供了几种方法来更有效地执行某些操作。 2.源码 3. Arr…

【Java笔试强训 4】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥计算糖…

Dubbo 的引入(1)

目录 认识RPC Dubbo 认识RPC RPC是解决不同JVM之间数据调用的一个思想,比如说现在有2台不同的机器,业务代码需要在这2台机器间调用后台业务代码,RPC就可以解决这2台机器业务代码调用的问题: 而RPC实现流程是什么样的呢&#xff…

无脑005----在mmyolo框架下复现RTMDet-R

背景 win11系统wsl虚拟机Ubuntu下GTX1060显卡 cuda 10.1 pytorch 1.7.1 python 3.8 耗时 两个小时 参考github链接:https://github.com/open-mmlab/mmyolo 1.安装环境 首先安装pytorch conda install pytorch1.7.1 torchvision0.8.2 torchaudio0.7.2 cudatoolkit…

最新发布!面向开发者的 ChatGPT Prompt Engineering 免费教程,吴恩达与OpenAI合作打造!...

就在几小时之前,吴恩达在Twitter上宣布了与OpenAI合作的最新免费教程:《ChatGPT Prompt Engineering for Developers》 我们可以通过下面的链接,直达官网网站: https://www.deeplearning.ai/short-courses/chatgpt-prompt-enginee…

当下常见的企业文件管理工具都有哪些?

随着数字化的发展,企业在日常办公中会产出大量文件,高效管理办公文件十分重要。当下常见文件管理工具都有哪些呢? 1.Zoho WorkDrive 高性价比,多设备支持,安全性能高。Zoho Workdive 是一个团队协作多人内容编辑平台&…

“递归三要素”寻踪(浅析递归“经典”框架,领略递归优雅秀气;看到有“递归算法优化”的操作,余试剖之)

浅析递归“经典”框架,领略递归优雅秀气。看到有“递归算法优化”的操作,余试剖之。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是…

mulesoft MCIA 破釜沉舟备考 2023.04.29.27 (易错题)

mulesoft MCIA 破釜沉舟备考 2023.04.29.27 (易错题) 1. An insurance company has an existing API which is currently used by customers.2. An organization has deployed both Mule and non-Mule API implementations to integrate its customer and order management s…

《2023中国各地区科创之星势力图1.0版》重磅发布

数据猿出品 本次“数据猿2023年度三大媒体策划活动——《2023中国各地区科创之星势力图1.版》”的发布,是数据猿在2022年3.0版本的基础上,迭代升级的2023开年的第一个版本。本年度下一次版本迭代将于2023年8月底发布2023年2.0版,敬请期待&…

51 - 自写操作系统

简易OS 1> 版本1:任务建立与切换2> 版本2:定时器切换2.1> main.c2.2> task.c2.3> sleep.c 3> 版本3:加时间片轮转 🔗 //--------- 参考视频链接 ------// 通过实验, 学习理解操作系统的大概&#xf…