Unity3D学习笔记之三Prefab组件的使用

本次教程,我们来创建一个简单的Prefab组件。
教程参考自人人素材翻译组出品的翻译教程《Unity游戏引擎的基础入门视频教程》。

说到Prefab,中文翻译为预设体,在Unity官方的书本《Unity4.X从入门到精通》中的解释是:可以理解为是一个游戏对象及其组件的集合,目的是使游戏对象及资源能够被重复使用。相同的对象可以通过一个预设体来创建,此过程可理解为实例化。
     存储在项目文件中(Project视图)的状态时,预设体作为一个资源,可应用在一个项目中的不同场景中。当拖动预设体到场景中就会创建一个实例。该实例与其原始预设体的有关联的,对预设体进行更改,实例会同步修改。Prefab可以提升资源的利用率和开发的效率。
     好比某个Prefab是我们创建好的一个标准的房间模型,当我们在场景中需要建立另一个房间的时候,不需要我们再手动的将地板,墙,天花板拼接,而是可以直接拖一个Prefab到Scene视图中,并对这个Prefab进行修改就可以了。

     下面开始创建我们的Prefab组件。接上一篇教程,现在我们场景内,有三个没有吻合的模型。如下图:
接下来我们把分别单击选中这三部分,并在Inspector视图中,找到Position,将他们的XYZ坐标都修改为0,0,0,
我们会发现模型会变为下图这样。

我们发现MineShaft_Wall中心在墙的中间,所以我们要修改下他的Y坐标。选中墙壁模型,将MineShaft_Wall墙壁模
型的Y坐标改为3就可以了,事实上这个模型墙壁高度为6个单位。
     这里要注意一下,如果你要单方向移动一个模型,即保持其他两个坐标值不变只改变一个坐标值,那么你就要按
住坐标系三个方向其中的一个并拖动就可以了。

接下来我们要做的是把现在位于中间的墙壁,移动到一侧,并复制几面墙移动到四周。直接拖动或者修改坐标可能
会产生各种误差,这里我们采用顶点捕捉(Vertex Snapping)。
      我们首先选中我们要移动的物体,然后按下V,我们会发现当我们移动鼠标的时候坐标轴会只在模型中的顶点
停留。如下图,当你们鼠标挪到左下角的时候,会在左下方的定点出现坐标轴。
这时我们可以单击鼠标,选中这个顶点坐标轴处的正方形区域(如图中的黄色小正方形),拖动这个模型,可以让
这个顶点与下面我们鼠标挪到的另一个顶点结合。如下图,我选中这个顶点后,将其拖动至地板左下角的顶点上,
让这两个顶点相合。这是一个快捷的移动模型的方法。

接下来我们要借用这一面墙复制出另一面墙,并移动位置。我们选中我们刚移动的这面墙体,按下Ctrl+D(Mac下为
Command+D)来复制一下,我们会在Hierarchy视图下发现多了一个MineShaft_Wall,然后我们采取刚才同样的方
法,按下V,选取墙体的左下角坐标轴,拖到地板的右下角顶点,我们刚才复制的墙体就到已有墙体的对面。但是
我们前面提到过,我们的墙体不从正面看是看不到的,平移后我们相当于看到的是墙体的另一面,所以这里才会只
有一个坐标系而没有墙。如果我们稍微向右再挪动一点儿视角,就会看到我们复制出来的这面墙。
如下图:

图一:未挪动视角
图二:挪动视角


我们要做的是把这面墙体旋转180度。选中这面墙,按下E,激活Rotate工具,坐标轴会发生如下变化:

这里我们按住绿色线确保Y轴角度不便,然后按住CTRL(Mac下按住Command)逆时针方向一直拖动,按住CTRL
是以15度为单位来旋转,旋转后我们会发现Inspector视图中,Y角度变成了-180(有时会是179.99),当然也可以
直接在Inspector视图额Rotation里面直接修改角度,要确保你修改的坐标轴是正确的。旋转完成后按W回归原始坐
标系。

 现在我们开始将这个模型放入一个Prefab组件中。先在Project视图内,ImportedAssets文件夹内新建Prefabs文件
夹,专门用来放置我们的预设体。
然后进入Prefabs文件夹,右键,Create,Prefab,将新建的空的Prefab命名为PFB_Straight。

下面我们将视线移动到Hierarchy视图中,我们可以看到四个蓝色名称,蓝色名称表明该物体是预设体或者从文件中
拖入到场景内的。现在要把物体放入Prefab中,我们可以发现当这些物体全部选中后是无法拖进我们新建的Prefab
中的。这里我们需要在Hierarchy中创建一个空的游戏物体------菜单栏,GameObject,Create Empty,这样Hierarchy
中会多出一个空的GameObject。我们对其命名为PFB_Straight,没错,和我们的Prefab名字相对应,并且现在这个
object的名称是白色的。下面我们来为此object与我们的四个物体建立父子关系,并将其导入到Prefab中。

选中全部四个物体,然后拖动到PFB_Straight中,会形成如图一的父子关系,接下来选中PFB_Straight,并拖入到
Project视图中我们新建的Prefab中,就完成了Prefab的初步创建,如图二。
     图二中,Hierarchy中物体全部变为蓝色,而且我们的Prefab在界面右下角有了预览,我们可以在预览中用鼠标
拖动来查看Prefab的内容。

图一:

图二:


至此,一个很简单的Prefab就创建好了,下面我们将这个组件拖入到场景中,我们会发现我们已经可以将我们之前
创建的组件很简单的假如场景中。这就是Prefab的优点,大大提高了工作的效率。
我们现在可以选中一个组件,按住V,并利用前面提到过的顶点捕捉(Vertex Snapping)来建立一个长长的隧道。
注意要选中整个组件,而不是组件的一部分,不要只把地板或者墙壁移动了,如果移动错了,记得按CTRL
(Command)+Z来取消操作。大家可以来试试创建一个隧道。



2015.1.1     0:03
By Mr.Losers



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

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

相关文章

JavaScript之闭包

不少开发人员总是搞不清匿名函数和闭包这两个概念,因此经常混用。闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数 --《JavaScript高级程序设计》 转载于:https://www.cnblogs.com/songsongblue/…

【跃迁之路】【522天】程序员高效学习方法论探索系列(实验阶段279-2018.07.12)...

(跃迁之路)专栏 【跃迁之路】奖励金计划正式开始 从2018.7.1起,【跃迁之路】奖励金计划正式起航,从今以后,每月1日,我会将自己个人上月收入的1%计入【跃迁之路】奖励金池,积累到足够金额后,将适时用于奖励那…

迷茫在路口——致我的2014

今天是2015年一月一日,2014年已经过去了。这意味着再过六个月整,我就要大学毕业,开始为自己的未来拼搏。这一年,我过的充实且迷茫。说2014充实,是因为我从寒假结束到有一个寒假的到来,几乎没有怎么闲下来&a…

Codeforces 173E Camping Groups 线段树

Camping Groups 我们先计算出&#xff0c; 每个点当leader所能掌控的最多人数。 然后我们把询问离线&#xff0c; 丢到responsibility最大的那个地方去。 然后从大到小往线段树里加人&#xff0c; 加入完之后处理掉当前的询问。 如果强制在线的话就只能树套树啦。 #include<…

tomcat闪退解决方案

在这几天&#xff0c;遇到一个Tomcat启动闪退的问题&#xff0c;通过查阅各种资料&#xff0c;算是完美解决。在此分享给朋友们。 首先&#xff0c;确定你的问题在哪里 1.查询错误&#xff1a;winR 输入cmd&#xff0c;进入一般处理程序。通过cd 找到你Tomcat的bin文件夹&#…

《古剑奇谭2》详细测评心得

期待已久的《古剑奇谭2》。仔仔细细的玩下来给我的感觉还是不错的。烛龙也不愧是国产单机的良心公司了&#xff0c;回合制的战斗方式改成了即时战斗类。 的确&#xff0c;国产动作类的游戏经验目前等于零。《古剑2》一改以往国产网游的作风跳出了回合制的圈子实属不易&#xff…

LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

581. 最短无序连续子数组581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组&#xff0c;你需要寻找一个连续的子数组&#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 你找到的子数组应是最短的&#xff0c;请输出它…

NFS4文件锁机制探秘

2019独角兽企业重金招聘Python工程师标准>>> 简介 NFS4实现“租赁锁”。每个锁拥有一样的“租赁期”。客户端的读写操作将刷新“租赁期”。租赁期到期后&#xff0c;锁将被服务器释放。NFS4通过下述“模型”实现对锁的管理&#xff1a; 1) 清晰地划分客户端和服务器…

Stay Hungry Stay Foolish——网络学习平台分享

从1月24号回家也有一阵子了&#xff0c;今天已经是31号&#xff0c;这一个周的中心思想就是一个字&#xff0c;玩。 学生一但远离学校&#xff0c;就会碰到许多学习的阻力&#xff0c;有来自外界的&#xff0c;家里有活要干&#xff0c;有亲戚要访&#xff0c;有同学邀约&…

linux_check

linux_check echo "********CPU****************" echo 总核数 物理CPU个数 X 每颗物理CPU的核数 echo " 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数"echo 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| un…

Unity3D学习笔记之四完善Prefab并添加First Person Controller

好久没学东西并用博客记录了&#xff0c;这个年过的很懒散&#xff0c;慢慢临近开学了&#xff0c;也要提前适应一下&#xff0c;写写东西&#xff0c;这样开学才能更好的进入状态呀&#xff5e;&#xff5e;本次笔记中&#xff0c;我们将来雕琢一个更加完善的Prefab&#xff0…

高精度(压位+判负数+加减乘+读写)

本算法目前属于还处于测试状态&#xff0c;欢迎Hack&#xff01; struct gj{bool fu; //是否是负数int tt,mod; //高精的长度int s[40005]; //压位用的数组inline gj(){ //整体初始化fu0; tt0; mod1e9;memset(s,0,sizeof(s));}inline gj read(){ register char ch; //高精度读…

Hadoop从安装Linux到搭建集群环境

简介与环境准备  hadoop的核心是分布式文件系统HDFS以及批处理计算MapReduce。近年&#xff0c;随着大数据、云计算、物联网的兴起&#xff0c;也极大的吸引了我的兴趣&#xff0c;看了网上很多文章&#xff0c;感觉还是云里雾里&#xff0c;很多不必要的配置都在入门教程出现…

git推送本地分支到远程分支

场景 有时候我们开发需要开一个分支,这样可以有效的并行开发. 开分支有两种方式: 一种是在远程开好分支,本地直接拉下来;一种是本地开好分支,推送到远程.远程先开好分支然后拉到本地 git checkout -b feature-branch origin/feature-branch //检出远程的feature-branch分支到…

delphi 函数内创建对象 释放_JavaScript 的函数底层运行机制

▲ 点击上方蓝字关注我 ▲文 / 景朝霞来源公号 / 朝霞的光影笔记ID / zhaoxiajingjing图 / 自己画目录0 / 题(1)第一题(2)第二题1 / 引用数据类型&#xff1a;object2 / 引用数据类型&#xff1a;function(1)第二题&#xff0c;简图(2)创建函数(3)执行函数(4)闭包3 / 练习题(1)…

Unity3D学习笔记之五为Prefab添加材质

本次笔记中&#xff0c;我们将利用unity来创建并使用材质&#xff0c;把材质添加到我们的Prefab中去。这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程《Unity游戏引擎的基础入门视频教程》&#xff0c;下载链接附在第二篇学习笔记中。继续上次笔记中所记录的东西&a…

分布式版本控制系统之Git

Git Git 是目前世界上最先进的分布式版本控制系统&#xff08;没有之一&#xff09;作用 源代码管理为什么要进行源代码管理? 方便多人协同开发方便版本控制Git的诞生 作者是 Linux 之父&#xff1a;Linus Benedict Torvalds当初开发 Git 仅仅是为了辅助 Linux 内核的开发&…

oo第三次博客-JML规格

这三周的作业主要是围绕以JML来约束代码开发&#xff0c;以确保程序的正确性与鲁棒性。 Part 1&#xff1a;三次作业的实现与bug 第一次作业没有任何算法和数据结构上的难度&#xff0c;对于Path和PathContainer的各个方法的实现按照给出的规格复读即可。唯一的难点&#xff08…

Kinect开发笔记之一Kinect详细介绍

毕业设计的课题我选择了结合Kinect和Unity3D开发体感游戏&#xff0c;这是我十分感兴趣的一个课题&#xff0c;所以做好当然责无旁贷。准备再写一系列Kinect的学习笔记&#xff0c;记录自己毕设一步一个脚印的历程。1、Kinect背景介绍众所周知&#xff0c;Kinect是一款集成了很…

获取2个地址之间的距离(高德API)

2019独角兽企业重金招聘Python工程师标准>>> string startLonLat SiteHelper.GetLonLat("大连"); //获取起始地经度纬度 string endLonLat SiteHelper.GetLonLat("沈阳"); //获取目的地经度纬度 int distance SiteHelper.GetDistance(star…