【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

    紧接着把贴图一一对应的放置在对应的面上即可,是不是很简单~

 

好啦今天就到这里,感谢阅读!!!
点赞,关注!!!

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

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

相关文章

Microsoft Edge网页视频播放绿屏解决方法(B站)

一:问题,在B站观看视频时有绿色条纹 二:查找原因,未知 三:解决方法 三.1网页设置关闭硬件加速 三.2 点击视频播放下的 “小齿轮”,然后点击“更多播放设置” 把播放策略 “默认” 改为“AVC” 四&…

Tomcat配置域名和端口

Tomcat配置域名和端口 1.进入tomcat文件夹2. cd 到你的tomcat下3. 修改server.xml文件中监听端口4. 重启tomcat 1.进入tomcat文件夹 2. cd 到你的tomcat下 3. 修改server.xml文件中监听端口 继续修改server.xml中Host 4. 重启tomcat 进入bin ./shutdown.sh ./startup.sh …

etcd分布式存储

etcd分布式存储 etcd简介etcd下载安装etcd常用命令etcd配置参数etcd集群golang操作etcd

rrweb入门

rrweb 背景 rrweb 是 record and replay the web,是当下很流行的一个录制屏幕的开源库。与我们传统认知的录屏方式(如 WebRTC)不同的是,rrweb 录制的不是真正的视频流,而是一个记录页面 DOM 变化的 JSON 数组&#x…

【鲁棒电力系统状态估计】基于投影统计的电力系统状态估计的鲁棒GM估计器(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

SpringCloud Alibaba 入门到精通 - Nacos

SpringCloud Alibaba 常用组件 一、基础结构搭建1.父工程创建2.子工程创建 二、Nacos:注册中心1.服务端搭建2.注册中心-客户端搭建3.注册中心-管理页面4.注册中心-常用配置5.注册中心-核心功能总结 三、Nacos注册中心集成Load Balancer 、OpenFeign1.Nacos客户端集成…

一键部署k8s集群

前置动作 关闭防火墙 systemctl disable firewalld && systemctl stop firewalld 关闭SELinux sed -i s#SELINUXenforcing#SELINUXdisabled#g /etc/selinux/config && grep SELINUXdisabled /etc/selinux/config setenforce 0 getenforce 关闭swap # 关闭…

前端面试题JS篇(4)

浏览器缓存 浏览器缓存分为强缓存和协商缓存,当客户端请求某个资源时,获取缓存的流程如下: 先根据这个资源的一些 http header 判断它是否命中强缓存,如果命中,则直接从本地获取缓存资源,不会发请求到服务…

c语言练习44:深入理解strstr

深入理解strstr strstr作用展示&#xff1a; #include <stdio.h> #include <string.h> int main() {char str[] "This is a simple string";char* pch;pch strstr(str, "simple");/*strncpy(pch, "sample", 6);*/printf("%s…

Android逆向学习(一)vscode进行android逆向修改并重新打包

Android逆向学习&#xff08;一&#xff09;vscode进行android逆向修改并重新打包 写在前面 其实我不知道这个文章能不能写下去&#xff0c;其实我已经开了很多坑但是都没填上&#xff0c;现在专利也发出去了&#xff0c;就开始填坑了&#xff0c;本坑的主要内容是关于androi…

Scrum认证高级Scrum Master (A-CSM) 认证培训课程

课程简介 高级ScrumMaster (Advanced Certified ScrumMaster, A-CSM) 认证课程是国际Scrum联盟推出的进阶级Scrum认证课程&#xff0c;是Scrum Master通往专业级敏捷教练必经的学习路径。 在ScrumMaster&#xff08;CSM&#xff09;认证课程中&#xff0c;您学习到了Scrum的价…

Centos 6.5 升级到Centos7指导手册

一、背景 某业务系统因建设较早&#xff0c;使用的OS比较过时&#xff0c;还是centos6.5的系统&#xff0c;因国产化需要&#xff0c;需将该系统升级到BClinux 8.6&#xff0c;但官方显示不支持centos 6.x升级到8&#xff0c;需先将centos6.5升级到centos7的最新版&#xff0c…

华为OD机试 - 战场索敌 - 深度优先搜索dfs算法(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、深度优先搜索dfs五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明4、如果增加目标敌人数量K为55、来&#xff0c;上强度 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 有一个大小是N*M…

RNA 36. SCI 文基于转录组数据识别CNV并可视化 (CaSpER)

转录组生信分析教程 桓峰基因公众号推出转录组分析教程&#xff0c;有需要生信的老师可以联系我们&#xff01;转录分析教程整理如下&#xff1a; RNA 1. 基因表达那些事--基于 GEO RNA 2. SCI文章中基于GEO的差异表达基因之 limma RNA 3. SCI 文章中基于T CGA 差异表达基因之 …

python28种极坐标绘图函数总结

文章目录 基础图误差线等高线polar场图polar统计图非结构坐标图 &#x1f4ca;python35种绘图函数总结&#xff0c;3D、统计、流场&#xff0c;实用性拉满 matplotlib中的画图函数&#xff0c;大部分情况下只要声明坐标映射是polar&#xff0c;就都可以画出对应的极坐标图。但…

基于SSM的校园美食交流系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

2023-9-10 集合-Nim游戏

题目链接&#xff1a;集合-Nim游戏 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_set>using namespace std;const int N 110, M 10010;int n, m; int s[N], f[M];int sg(int x) {if(f[x] ! -1) return f[x];//…

【补】代码随想录算法训练营day38|动态规划 |509. 斐波那契数|70. 爬楼梯|746. 使用最小花费爬楼梯

动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c;贪心没有状态推…

【初阶C语言】操作符1--对二进制的操作

前言&#xff1a;本节内容介绍的操作符&#xff0c;操作的对象是二进制位。所以前面先介绍整数的二进制位 一、二进制位介绍 1.二进制介绍 &#xff08;1&#xff09;整数的二进制表示形式有三种&#xff1a;原码、反码和补码。 &#xff08;2&#xff09;原码、反码和补码的…

conda的使用教程

conda的介绍 简单来说&#xff0c;conda软件就是来管理包的软件。以Python为例&#xff0c;在实际生活中&#xff0c;我们要处理多个不同的项目&#xff0c;因此&#xff0c;要安装不同的项目所需要的包&#xff0c;为了管理方便&#xff0c;conda就是用来打理不同项目的包&…