【Unity基础】3.脚本控制物体运动天空盒
【Unity基础】3.脚本控制物体运动&天空盒
大家好,我是Lampard~~
欢迎来到Unity基础系列博客,所学知识来自B站阿发老师~感谢
(一)搭建开发环境
(1)下载visual studio
在我们下载unity编译器的时候,会让我们选择当前unity编译器搭配的vs编译器。我们最好就直接勾选上,或者可以自己手动下载vs,在vs的installer里勾选unity引擎开发需要的环境
(2)unity中设置脚本编译器
下载好了之后,我们要在unity中更新vs作为脚本编译器。方式很简单,打开编译器,选择Edit -> Preferences目录 ,在 External Tools 页签里,选择 VS 作为脚本编辑器
(3)设置随脚本修改重新编译
为了方便之后的开发调试,我们需要设置每当脚本修改了之后,unity自动帮我们编译这个脚本,让改动可以实时的生效。选择Edit -> Preferences目录 ,在 General 页签里,把Script Change While playing 选项调整为:Recompile After Finished Playing即可
(4)创建C#文件
在Unity中,脚本也属于资源的一部分。因此我们同样的在Asserts目录下创建一个Scripts的文件夹用来存放脚本文件
在该文件夹中右键create菜单,选择C#脚本即可生成第一个C#文件
(5)重命名C#文件
生成的C#脚本默认命名为NewBehaviourScript,双击这个脚本,unity会自动帮我们打开vs(如果没有请重阅读上文配置)
我们可以看到,里面存在一个同样命名为NewBehaviourScript的类,这是unity的特数规则:类名和文件名相同,因此我们在重命名类名或者文件名时就不可以像以往直接rename了,我们需要在脚本中选中类名然后右键重命名,比如修改成FirstLogic,我们就可以看到脚本和类名同时发生修改
在unity编译器中查看,也是已经同步修改过来了的
(6)挂载脚本组件
接下来我们只需要把脚本挂载到场景的对象中并运行就可以了(注意不挂上去的话脚本是不会生效的!)
挂载的方式和我们之前熟悉的一样拖动过去即可,拖过去之后,会发现对象的inspector面板中多了我们的FirstLogic组件
(二)物体运动
(1)制作一台运动的小车
transform组件提供了一个接口Translate,帮助我们调整物体的位置,只需要传入需要变化的位置信息就可以了
以下是Translate方法的定义:
transform.Translate是Unity引擎中Transform组件的一个方法,用于平移物体。该方法接受一个三维向量作为参数,表示需要平移的距离和方向。平移距离和方向的单位是世界坐标系中的单位
因此我们的代码可以改成这样:
void Update(){float DisPreSec = 6f; // 每帧运动的距离this.transform.Translate(0, 0, DisPreSec * Time.deltaTime);}
然后把脚本拖动至小车对象上就可以了,运行看看:
(2)改变运动的朝向
假设这台小车车有一个移动的目标,我们需要朝着红旗对象前进,驶向终点那要如何做呢?
首先创建一个红旗对象,然后随便放置一个位置
然后为了能使小车的车头朝向红旗,我们需要获取到红旗的位置。在获取红旗位置之前,我们就需要在脚本中先获取到红旗这个对象
怎么做呢?可以通过GameObject.Find这个静态方法来寻得红旗
GameObject.Find是Unity引擎中的一个方法,用于查找场景中指定名称的游戏物体。该方法接受一个字符串作为参数,表示需要查找的游戏物体的名称,返回一个代表该游戏物体的GameObject对象
而用法也很简单,直接把目标的名字传入就可以了
GameObject flag = GameObject.Find("红旗");
(3)transform.LookAt
获取到红旗这个对象,下一步我们就可以调整车头方向了。当然我们可以通过手动计算出两个物体当前的便宜角度,但阿发老师直接给我们提供了一个更好用的接口:transform.LookAt
transform.LookAt是Unity引擎Transform组件中的一个方法,用于使物体朝向指定的目标位置。该方法接受一个三维向量作为参数,表示需要朝向的目标位置
只需要调用这个方法,就把车头位置朝向红旗了
void Update(){GameObject flag = GameObject.Find("红旗");this.transform.LookAt(flag.transform);Vector3 localPos = this.transform.localPosition;float DisPreSec = 6f;this.transform.Translate(0, 0, DisPreSec * Time.deltaTime);}
看看效果:
(二)自转与公转
(1)地球自转
我们学习了如何在脚本中获取物体对象,并使用transform组件下的translate接口使物体运动
接下来我们进一步学习,用脚本控制物体的旋转
transform组件提供了Rotate这个接口,它可以直接传入欧拉角的偏移值,我们只需要在update方法中加入旋转接口就可以实现物体自转了
void Update(){this.transform.Rotate(0, 360 * Time.deltaTime, 0);}
接下来我们想实现地月系统旋转,首先第一步就是让地球自转起来,那很简单,我们把RotateLogic脚本挂在地球上就可以了
嗯...有点快,我们把速度调低一些。缩小个4倍吧,让它四秒转一圈,看上去好多了
(2)月亮公转
下一步就是实现月球的公转了,那要如何做呢?直接把RotateLogic挂给月亮也只是实现自转。这个时候我们就应该想起我们的父子关系
如果月亮是地球的子节点,那地球转的时候就可以带动月亮转了
但是问题来了,这样子的话月亮绕地球的转速就和地球自转的速度一样,我们知道地球一转一天,月球绕地球一周是需要27天的,速率明显不一样
这个时候我们只需要在地球的位置挂载一个空节点作为旋转节点,调整其旋转速率,并让月亮成为它的子节点就可以了
随便把速度设置为地球的三分一,看看效果:
(三)天空盒
(1)天空盒Skybox
天空盒就是3d世界里面的背景概念,我们可以想象在3d的世界中,我们就是处在一个巨大无比的矩形之中
我们知道一个矩形是由6个面组成的,面与面之间无缝连接,那么接下来看看天空盒的图片构成
我们创建的unity3d的项目中,会默认自带一个天空盒,我们可以在编辑器的这个位置控制天空盒是否显示:
(2)替换天空盒
天空盒本质上也是一个材质,我们接下来看看它的具体构成以及要如何进行替换
我们导入一个天空盒,点击可以看到,里面包含了一个天空盒材质,以及一个textures文件夹,文件夹中包含的是天空盒6个面所用到的资源
若想要替换这个demo的天空盒,我们需要在Window餐单栏下面的Rending->Lighting子菜单,然后在Enviroment页签下,找到天空盒定义材质和纹理的地方,把我们实现准备好的天空盒材质和资源替换上去即可
作为一个材质,天空盒和普通材质的差别是什么呢?我们可以看到它的shader的选项中勾选的是skybox/6个面的shader,也就是物体的表面由6个面组成
(3)创建天空盒
刚才我们的天空盒材质是直接导入的,那我们可不可以自己创建一个天空盒呢?
无疑是可以的,我们首先准备6张无缝连接的图片,导入项目中
然后我们创建一个空白的材质,并把它的shader模式改成skybox/6
紧接着把贴图一一对应的放置在对应的面上即可,是不是很简单~
好啦今天就到这里,感谢阅读!!!
点赞,关注!!!
相关文章:

【Unity基础】3.脚本控制物体运动天空盒
【Unity基础】3.脚本控制物体运动&天空盒 大家好,我是Lampard~~ 欢迎来到Unity基础系列博客,所学知识来自B站阿发老师~感谢 (一)搭建开发环境 (1)下载visual studio 在我们下载unity编译器的时候&…...

Spring MVC拦截器
拦截器(Interceptor)是 Spring MVC 提供的一种强大的功能组件。它可以对用户请求进行拦截,并在请求进入控制器(Controller)之前、控制器处理完请求后、甚至是渲染视图后,执行一些指定的操作。 在 Spring MV…...

ClickHouse的Join算法
ClickHouse的Join算法 ClickHouse是一款开源的列式分析型数据库(OLAP),专为需要超低延迟分析查询大量数据的场景而生。为了实现分析应用可能达到的最佳性能,分析型数据库(OLAP)通常将表组合在一起形成一个…...
java面试题-RabbitMQ面试题
RabbitMQ面试题 面试官:RabbitMQ-如何保证消息不丢失 候选人: 嗯!我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的,这里面就要求了消息的高可用性,我们要保证消息的不丢失。主要从三个层面考虑 第一…...
数据仓库-核心概念
数据仓库 数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。为需要业务智能的…...
java中的实体类
在Java与数据库交互时,设计实体类有以下几个原因: 1、对象关系映射(ORM):实体类提供了一种将数据库中的表映射为Java对象的方式。这样,开发人员可以使用面向对象的方式操作数据库,而无需编写大…...

使用Puppeteer爬取地图上的用户评价和评论
导语 在互联网时代,获取用户的反馈和意见是非常重要的,它可以帮助我们了解用户的需求和喜好,提高我们的产品和服务质量。有时候,我们需要从地图上爬取用户对某些地点或商家的评价和评论,这样我们就可以分析用户对不同…...

GLSL ES着色器语言 使用矢量和矩阵的相关规范
目录 矢量和矩阵类型 下面是声明矢量和矩阵的例子: 赋值和构造 矢量构造函数 矩阵构造函数 构造矩阵的几种方式 访问元素 . 运算符 矢量的分量名 [ ]运算符 运算符 矢量和矩阵可用的运算符 矢量和矩阵相关运算 矢量和浮点数的…...
Himall商城- web私有方法
目录 1 Himall商城- web私有方法 1.1 /// 获取售价 1.1.1 //商品批量销售价 1.1.2 //获取组合购的价格 Himall商城- web私有方法 #region web私有方法 /// <summary> /// 获取售价 /// <para>己计算会员折</para> /// </summary> /// <para…...

Spring Boot 整合 Redis,使用 RedisTemplate 客户端
文章目录 一、SpringBoot 整合 Redis1.1 整合 Redis 步骤1.1.1 添加依赖1.1.2 yml 配置文件1.1.3 Config 配置文件1.1.4 使用示例 1.2 RedisTemplate 概述1.2.1 RedisTemplate 简介1.2.2 RedisTemplate 功能 二、RedisTemplate API2.1 RedisTemplate 公共 API2.2 String 类型 A…...
Tomcat 接收请求并传递给工作线程池流程
文章目录 Tomcat 接收请求并传递给工作线程池流程接收 socket 连接 org.apache.tomcat.util.net.SocketProcessorBase#reset结论 Tomcat 接收请求并传递给工作线程池流程 接收 socket 连接 有两个线程 http-nio-8080-ClientPoller-0/1 (下文称为 clientPoller&…...

在Linux系统上用C++将主机名称转换为IPv4、IPv6地址
在Linux系统上用C将主机名称转换为IPv4、IPv6地址 功能 指定一个std::string类型的主机名称,函数解析主机名称为IP地址,含IPv4和IPv6,解析结果以std::vector<std::string>类型返回。解析出错或者解析失败抛出std::string类型的异常消…...

【硬件设计】硬件学习笔记二--电源电路设计
硬件学习笔记二--电源电路设计 一、LDO设计1.1 LDO原理1.2 LDO参数1.3 应用 二、DC-DC设计2.1 DC-DC原理2.2 DC-DC参数介绍2.4 DC-DC设计要点2.5 DC-DC设计注意事项 写在前面:本篇笔记来自王工的硬件工程师培训课程,想要学硬件的同学可以去腾讯课堂直接搜…...

day34 集合总结
集合总结 一、概述 作用:存储对象的容器,代替数组的,使用更加的便捷 所处的位置:java.util 体系结构 二、Collection 内部的每一个元素都得是引用数据类型 常用方法 add(Object o) 添加元素 addAll(Collection c) 将指定集…...

【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业课程设计
作者主页:paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…...

区块链技术与应用 - 学习笔记3【比特币数据结构】
大家好,我是比特桃。本系列笔记只专注于探讨研究区块链技术原理,不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划,在“加快数字发展 建设数字中国”篇章中,区块链被列为“十四五”七大数字经济重点产业之一&#…...

Ubuntu下高效Vim的搭建(离线版)
软件界面 可以看到界面下方有一些常用提示信息:文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下,并执行tar -xvf Vim 即可。 …...

阿里云和腾讯云2核2G服务器价格和性能对比
2核2G云服务器可以选择阿里云服务器或腾讯云服务器,腾讯云轻量2核2G3M带宽服务器95元一年,阿里云轻量2核2G3M带宽优惠价108元一年,不只是轻量应用服务器,阿里云还可以选择ECS云服务器u1,腾讯云也可以选择CVM标准型S5云…...

PYTHON(一)——认识python、基础知识
一、为什么要学习python? Python 被认为是人工智能、机器学习的首选语言,可以说是全世界最流行通用范围最广的语言,几乎可以完成所有的任务,像设计游戏、建网站、造机器人甚至人工智能等都广泛使用Python。 二、输出(…...

Python 操作 Excel
之前看过一篇文章,说一个工作多年的老员工,处理数据时只会用复制粘贴到 Excel ,天天加班工作还完不成,后来公司就招了一个会 Python 的新人,结果分分钟就处理完成。所以工作中大家经常会使用 Excel 去处理以及展示数据…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...