转自擅码网并修改
学习目的: 掌握Unity3D 常用的软件操作和一些基础脚本的使用
Unity3D 是什么?
一个软件,一个游戏开发引擎(工具)
别名:Unity3D Unity U3D
Unity3D 能做什么?
游戏开发(手游) ---- 60%
游戏开发(页游) ---- 10%
VR,AR,仿真— 30%
Unity3D 有哪些优势?
①学习成本较低,开发效率高。
②跨平台运行,只需要开发一次,稍加修改,就可以发布到20 多个平台运行,
比如:Windows,Android,IOS,Mac,Web…
为什么要学Unity3D?
①相对于其他编程,Unity3D 从业人数较少(物以稀为贵)。
②相对于其他编程,Unity3D 入门门槛较高(富有挑战性)。
其他编程:Web、IOS、Android 等等
学习Unity3D 需要哪些基础?
① 编程语言基础:C# (硬性) ----------- 60%
② 英语基础:初中高中(软性) ----------- 30%
③ 数学基础:初中高中(软性) ----------- 10%
下载与安装
官网:https://unity.com/
下载下来的是一个“下载器”,需要选择版本进行安装
注册Unity3D 账号
① 登录Hub
② 后期使用Unity3D 官网的相关服务
软件注册
Person
[友情提示:我们是为了更好的学习,研究,交流,使用Unity3D 才选择使用注
册机,如果是用于商业开发建议购买正版授权]
项目
项目:每一个游戏都是一个独立的项目。
项目存储结构
项目文件夹
文件夹名称 | Name | 作用 |
---|---|---|
Assets | 资源文件夹 | 保存游戏中所有的资源。 |
Library | 库文件夹 | 保存当前项目需要的库文件。 |
Logs | 日志文件夹 | Unity工作过程中的日志文件 |
Packages | 包管理文件夹 | 存放工程的包配置文件和development状态具体包 |
ProjectSettings | 项目设置文件夹 | 保存项目的设置信息。 |
Temp | 临时文件夹 | 保存项目的临时数据。 |
UPM用的,类似于隔壁nuget、npm、pip一样类型的东西,包管理工具。这个目录用来存放工程的包配置文件。和development状态具体包。(对于不知道这玩意干嘛的情况来说,只要知道它会存放当前工程的包配置信息就行了,可以粗略的理解为这是另一种projectsetting目录)
关于日志文件:https://baike.baidu.com/item/日志文件/1505348?fr=aladdin
面板布局
有多种布局方式,选择不同布局方式,界面显示效果不一样。
例如下面两个布局方式,分别是 default 与 2 by 3
新建场景
场景: 指场面,具有多种元素,游戏中的场景的元素则是有:游戏角色、建筑、生物等。
①File–>New Scene(Ctrl + N)新建场景;
②File–>Save Scene(Ctrl + S)保存场景。
场景的后缀为 “.unity”
两个面板
面版名称 | 作用 |
---|---|
Scene(场景)面板 | 用于预览当前的场景 |
Project(项目)面板 | 用于管理当前项目中所有的资源 |
其中Project面板内的 Assets:对应我们项目文件夹中的Assets 文件夹。
注意:
为了更好的管理我们的游戏资源,我们会在Assets 中建立不同的文件夹,用来存储不同的游戏资源。比如“Scenes”文件夹,用来存储游戏场景。
Assets 中创建文件夹步骤:
光标移至 Assets 上单击右键,会弹出菜单–>Create–>Folder,然后改名。
Hierachy 面板
Hierachy:层级面板,用于显示当前场景中有哪些资源。在这个面板中可以往
场景中添加资源。
创建基本3D 物体
创建基本3D 物体步骤:
Hierachy 面板的空白处单击右键–>3D Object–>Cube
常用的5 中3D 物体:
Cube(立方体),Sphere(球体),Capsule(胶囊体),Cylinder(圆柱体),Plane(平面)
在Hierachy面板中,双击某个物体,可以在Scene 面板(视图)中聚焦到该物体。
工具栏功能如下:
手型:平移场景的观察角度,左右上下
十字箭头:可以按某一轴或某一平面,移动物体的位置(箭头:固定方向移动; 面:平行于该面移动)
旋转:可以旋转物体
缩放:可以缩放物体(箭头:按某一轴缩放; 面:等比例缩放)
十字箭头与旋转结合:功能是两者的结合
鼠标功能演示
鼠标左键:选中场景中的物体
鼠标中键:按下–>平移场景的观察角度;滚动–>拉远拉近
鼠标右键:旋转场景的观察角度
鼠标与键盘组合操作演示
Alt + 鼠标左键:按照某一中心点,旋转观察角度
Alt + 鼠标右键:拉远拉近
尺寸
以Cube 作为参照,Cube 是长宽高都为1 米的参照物。
方向-世界坐标系
X(红色):右边
Y(绿色):上边
Z(蓝色):前边
世界坐标系可以理解为游戏场景中的方向,东南西北上下。
在游戏场景中世界坐标系是不变的。
方向-物体(自身)坐标系
X(红色):右边
Y(绿色):上边
Z(蓝色):前边
物体(自身)坐标系是以物体自身为参照,确定自身的右边,上边,前边。
可以通过工具栏上的“Local”、“Global”来切换物体身上的坐标系显示效果。
其中Local是切换成自身坐标系,Global则是切换成与世界坐标系重合。
快捷键
Ctrl + D:复制物体
左键单击物体 + F:快速聚焦某个物体
多个物体整体操作
在场景中左键选取或在Hierachy面板中 Ctrl 多选,然后就可以使用工具栏整体操作。
材质球与贴图介绍
材质球:Material
材质:物体的质地,物体看起来是什么做的。
贴图:Texture,用于材质球的显示,相当于给物体套层皮。
管理材质球与贴图
在Assets 中建立“Materials”文件夹,用于管理材质球。
在Assets 中建立“Textures”文件夹,用于管理贴图。
名称 | 作用 |
---|---|
Inspector:又称检视面板(属性面板)。 | 用于查看和编辑游戏物体和项目资源的具体信息。 |
编辑材质球
①在鼠标选中需要编辑的材质球物体;
②点击“Albedo”前的圆点,在弹出的“贴图选择界面”选择需要的材质;
Albedo: 纹理贴图(漫反射贴图)
使用材质球
①将材质球拖拽到 Hierarchy 面板上相应的物体上;
②将材质球拖拽到 Scene 面板上相应的物体上。
空物体
Hierarchy 面板create–>Create Empty 创建一个空物体。
空物体:好比就是电脑上的文件夹,可以用于管理资源。
右键点击rename可以改名。
父子关系
原则:移动父亲,儿子会跟着移动,就像移动电脑上的一个文件夹,文件夹中的资源会跟着一块移动一样的道理。
在 Hierarchy 面板中,任意两个物体都可以建立父子关系。
如何建立父子关系?
①在 Hierarchy 面板中,将选中的物体(子)拖到某一物体中(父)
②在 Hierarchy 面板中,选中物体右键create一个新物体,将自动建立父子关系
作用 | |
---|---|
预制体:Prefab | 预先准备好的物体,可以重复使用。 |
管理预制体
在Assets 中建立“Prefabs”文件夹,用于管理预制体。
创建预制体
直接将 Hierarchy 面板中的游戏物体拖拽到 Project 面板的Assets 中,即
可创建一个预制体。
预制体文件的后缀是“.prefab”
使用预制体
①将预制体直接拖拽到 Hierarchy 面板;
②将预制体直接拖拽到 Scene 面板;
都可以在场景中创建一个相应的物体。
预制体与非预制体的区别
①非预制体的名字是黑色,预制体名字是蓝色;
②在 Inspector 面板,非预制体是图标颜色是白色的,预制体的图标是蓝色的。
③在 Inspector 面板,预制体比非预制体多了一个 “Prefab 选项”。
预制体的好处
只要编辑其中的一个,然后在 Inspector 面板中的 Prefab 选项里的 Overrides–>“Apply All”一下,所有的预制体都会改变。
包括场景中的所有同类预制体和Perfabs文件夹内的预制体。
Tiling:贴瓷砖 | 使贴图分块显示。 |
Game:游戏视图 | 游戏的预览(运行)窗口 |
当点击“播放”按钮,视图会自动切换到 Game(游戏)视图 进行预览;再一次的点击“播放”按钮,就可以退出游戏的运行状态,回归到编辑(Scene)视图。
注意:游戏在运行状态时,做的任何操作都不会被保留。
摄像机的简介与作用
简介:Hierarchy面板中有一个摄像机(Camera),用于观察我们的游戏世界。摄像机有一个白线构成的观察区间,叫做 “视锥体” 。
所有在“视锥体”范围内的物体,我们都可以看到。
作用:在合适的位置和角度观察我们的游戏世界。
我们游戏中观看到的画面也是由摄像机的角度和位置决定的。
摄像机基本操作
① 在Hierarchy 面板上选中摄像机,再点击展开摄像机的Camera组件,Scene 视图右下角会出现预览窗口(Game Preview)。
② 根据轴向移动摄像机的位置,旋转摄像机的角度。
③ 创建摄像机: Hierarchy 面板右键–>Camera。
④ 选择物体或摄像机后,GameObject菜单–>Align With View或(Ctrl + Shift + F)对齐视图。
让摄像机对齐到当前视图,使 Scene 与 Game 中的观看角度和位置一致。
也可以选中物体使物体转移到 Scene 视图中的位置,并旋转成相同的角度
位置:选中 Camera 后 Inspector 面板里面,
Clear Flags[清除标记]
效果呈现在 Game 视图 里。
Skybox:天空盒
Solid Color:固定颜色(纯色)
Background[背景颜色]
当 Clear Flags 为Solid Color 时,Game 视图里 场景的背景颜色。
Projection[投影]
Perspective:透视模式,3D 游戏使用,近大远小。
Orthographic:正交模式,2D 游戏使用,无近大远小。
Clipping Planes[切割面]
Near:近平面,摄像机最近能看到的东西。
Far:远平面,摄像机最远能看到的东西。
灯光:light,用于照亮我们的游戏世界。
附加作用:烘托场景的氛围;使场景中产生阴影,增加真实感和立体感。
在我们创建一个新的Scene 场景时,场景中会默认带有两个游戏物体:
一个是摄像机(Camera),一个是灯光(Light)。
隐藏与显示游戏物体:物体 Inspector 面板上“图标”右侧的复选框。
属性 | 作用 |
---|---|
Type[类型] | 用于切换灯光的类型。比如方向光、聚光灯、点光源等 |
Color[颜色] | 设置灯光的颜色。 |
Intensity[强度] | 设置灯光的照射强度。 |
Shadow Type[阴影类型] | 设置方向光照射到的物体显示的投影效果。 |
Shadow Type[阴影类型]
1.No Shadows:无阴影
2.Hard Shadows:硬阴影,方格组成的阴影
3.Soft Shadows:软阴影,模糊的阴影
Unity3D 就是一款“组件式”游戏开发引擎,使用各种各样的组件拼装出我们
游戏物体,最终拼接出一款完整的游戏。
Unity3D 这款引擎提供了很多种类的组件,后期就需要学习这些组件的使用和特性,以及它们能实现的功能和效果。
在Unity3D 中,各种各样的组件,就是组成我们游戏世界最基本的元素。
Position:位置;
Rotation:旋转;
Scale:缩放;
组件的启用与关闭:
点击Inspector 面板上相应的组件图标右侧的复选项,来进行切换。
其中 Transform 组件是不可以关闭的。
何为脚本?
脚本:Scrpit,用于控制游戏的逻辑。
管理脚本
在Assets 文件夹中创建“Scripts”文件夹,管理脚本资源。
创建脚本
在Assets 文件夹上右键–>Create–>C# Script,马上改名。
C# 脚本文件的后缀是“.cs”。
双击脚本文件,就可以调用出“代码编辑器”进行代码的显示。
脚本代码简介
Start()方法: 当游戏运行起来,就会马上执行,且只执行一次。
Update()方法: 循环调用,每帧调用一次。一秒钟大概执行60 次。
帧:我们的游戏画面是在不停的刷新的,每刷新一次,就是一帧。
输出调试的方法:Debug.Log ();
Start()和Update()方法都是Unity3D 内部的“事件方法”,不需要我
们人工调用,系统会自动调用和管理这些“事件方法”。且返回值均为空(void)
使用脚本
①直接将脚本拖拽到 Hierarchy 面板上物体身上;
②直接将脚本游戏物体的 Inspector 面板上;
只要运行游戏,脚本就会执行。
Console 面板
Console:控制台。用于输出显示游戏运行过程中的调试信息。
功能按钮:
Clear:清除功能,清除控制台中的全部信息;
Collapase:折叠功能,将相同的内容合并到一条显示,更新后面的数字;
Clear on Play:游戏每次运行时清除上一次运行的内容;
方法 | 作用 |
---|---|
Input.GetKey(KeyCode.索引码); | 按下某键后,持续返回true |
Input.GetKeyDown(KeyCode.索引码); | 按下某键的一瞬间,返回true |
Input.GetKeyUp(KeyCode.索引码); | 抬起某键的一瞬间,返回true |
返回值:bool 类型
参数:KeyCode.索引码 比如KeyCode.A
键盘上的A
KeyCode是一个枚举类型(Enum)
KeyCode:键码,保存了键盘按键“索引码”。
方法 | 作用 |
---|---|
Input.GetMouseButton(值); | 按下某键后,持续返回true |
Input.GetMouseButtonDown(值); | 按下某键的一瞬间,返回true |
Input.GetMouseButtonUp(值); | 抬起某键的一瞬间,返回true |
返回值:bool 类型
参数:鼠标按键索引值,0->左键, 1->右键, 2->中键。
比如Input.GetMouseButtonDown(0);
表示左键按下时一瞬间返回true
方法 | 作用 |
---|---|
gameObject.GetComponent < 组件 >(); | 获取相应组件的引用。并返回该组件类型的值 |
Transform变量名.Translate(Vector3.方向, Space.坐标系); | 按照某一坐标系沿着某一方向移动物体的位置。通过修改位置,所以会发生穿模。 |
查找当前游戏物体身上的某个组件,然后返回该组件类型的字段,要用同类型字段保存。
注意: 该变量要先被赋值
Transform变量名 = gameObject.GetComponent
Vector3(构造体):三维向量。
向量,可以表示一个方向,也可以表示一个位置。
比如 Vector3.forward
向前走,速度为每秒一米
如何调整速度:在方向后加上* 几倍
,不允许使用 double类型,所以如果是0.5倍,就要写成 * 0.5f
,每秒半米。
Space[enum]:空间。
Space.Self:表示物体自身的坐标系。
Space.World:表示物体所在的世界坐标系。
备注:脚本是游戏物体的一部分,一般控制谁,脚本就挂载在谁的身上。
查使用键盘上的“W,A,S,D”来控制游戏物体的前后左右移动。
if (Input.GetKey(KeyCode.W))
{
m_Transform.Translate(Vector3.forward * 0.5f, Space.World);
}
if (Input.GetKey(KeyCode.S))
{
m_Transform.Translate(Vector3.back * 0.5f, Space.World);
}
if (Input.GetKey(KeyCode.A))
{
m_Transform.Translate(Vector3.left * 0.5f, Space.World);
}
if (Input.GetKey(KeyCode.D))
{
m_Transform.Translate(Vector3.right * 0.5f, Space.World);
}
使用Transform变量.Translate();
方法移动物体的位置,特点如下:
①移动的物体若没有刚体组件,则会 直接“穿透” 场景中其他的物体模型;
②移动的物体若没有刚体组件,则物体不会受重力影响(到达场景边缘外,不会下落)。
③移动的物体若有刚体组件,则物体会受重力影响,会发生不规则运动和碰撞, 也会直接“穿透” 场景中其他的物体模型。
Translate则是直接的位置position赋值,会破坏刚体环境。
刚体方法会模拟物理状态来达到一些接近于现实世界的物理效果。
刚体简介
刚体:Rigidbody,属于物理类组件。
作用: 添加了刚体组件的游戏物体,就有了重力,就会做自由落体运动。也就意味着可以像现实中的物体一样运动。
给物体添加刚体组件
先选中游戏物体–>菜单Component–>Physics–>Rigidbody
刚体组件属性
Inspector 面板中
属性 | 详情 |
---|---|
Mass[质量] | 设置物体的质量,也就是重量。质量单位是KG。 |
Drag[阻力] | 空气阻力,0 表示无阻力,值很大时物体会停止运动。 |
Angular Drag[角阻力] | 受到扭曲力时的空气阻力,0 表示无阻力,值很大时物体会停止运动。 |
Use Gravity[使用重力] | 是否使用重力。 |
角阻力测试方法:
将两个物体放置在空中,并且设置刚体,然后下方物体设置空气阻力为5,让其下降慢些。然后分两次设置角阻力为 0 和 10。会发现角阻力越大,碰撞后的物体旋转的速度越来越慢。
Rigidbody变量.MovePosition( Transform变量.position + Vector3.方向);
:使用刚体方法移动物体的位置。MovePosition直接改的是位置。所以速度过快还是会发生穿模。注意: 该变量要先被赋值
Rigidbody变量 = gameObject.GetComponent
其次
使用刚体移动物体,物体是只能根据世界坐标系的方向移动的。
使用刚体移动物体,物体会触发物理相关的事件。
Transform变量 = gameObject.GetComponent();
获取并储存组件信息,再使用Transform变量.position
——属性当前物体的位置。其中MovePosition()方法也可以用 Translate() 方法改变运动速度的格式来改变速度——*几倍
,其中 几倍 也不能为 double 。
Rigidbody变量.MovePosition( Transform变量.position + Vector3.方向);
移动物体,特点如下:移动方式最好用加力的方式
碰撞体可以理解为我们的模型的“外骨骼”,是由一条条绿线构成的碰撞框。在 Inspector 面板取消 Mesh Renderer 组件后,展开 XXX Collider 组件,即可看到绿线构成的碰撞框。
(我们在Unity 中创建的基本模型,比如Cude、Sphere等,都自带碰撞体组件)
简介
盒子碰撞体,形状是立方体形,用于包裹类似“立方体”的模型,比如:盒子,
箱子,门,房子等。
组件属性
属性 | 作用 |
---|---|
Center[中心点] | 设置Box Collider 的中心点 |
Size[大小] | 设置Box Collider 的大小 |
简介
球形碰撞体,形状是球形,用于包裹类似“球形”的模型。
组件属性
属性 | 作用 |
---|---|
Radius[半径] | 设置Sphere Collider 的大小 |
简介
胶囊碰撞体,形状是胶囊状,用于包裹“胶囊形”的模型。
组件属性
属性 | 作用 |
---|---|
Radius [半径] | 设置Capsule Collider 的半径 |
Height [高度] | 设置Capsule Collider 的高度 |
Direction [方向] | 设置Capsule Collider 的高度方向(Self的轴向):x、y、z |
简介
网格碰撞体,用于包裹复杂结构的模型。
组件属性
属性 | 作用 |
---|---|
Mesh[网格] | 根据指定的网格,生成碰撞体 |
作用
给 刚体 添加一个力,让刚体按 “世界坐标系” 进行运动。
代码
Rigidbody变量.AddForce(Vector3.方向,ForceMode.模式);
Vector3:力的方向和大小,也可以通过 * 几倍
改变力的大小;
ForceMode:力的模式[enum 类型]
枚举值说明:
枚举值 | 说明 |
---|---|
Acceleration | (加速度) |
Force:(力) | 这种模式通常用于设置真实的物理 |
Impulse:(冲击力) | 这种模式通常用于瞬间发生的力 |
VelocityChange | (速度的变化) |
作用
给刚体添加一个力,让刚体按 “自身坐标系” 进行运动。
代码
Rigidbody变量.AddRelativeForce(Vector3.方向,ForceMode.模式);
Vector3:力的方向和大小,也可以通过 * 几倍
改变力的大小;
ForceMode:力的模式[enum 类型]。
void Update()
{
m_Rigdbody.AddRelativeForce(Vector3.forward , ForceMode.Force);
}
因为物体是滚动前进的,所以自身坐标系会不断变化,使它来回滚动,由于力很小只有一倍,所以到最后几乎停止。(注意看蓝色的轴向最后垂直指向地板)
所有和物理相关的操作 ,代码都要写在 FixedUpdate() 方法体内。
固定默认的更新时间间隔是0.02 秒,1 秒执行50 次。
可以在 Fixed Timestep 中 修改, 步骤如下:
Edit–>Project Settings–>Time 面板中的Fixed Timestep 参数设置。
Update() 方法是每帧执行一次。
画面每渲染完一次,就是一帧,而每帧的时间是不固定的,因为画面渲染的速度是不固定的。
若在 Update() 方法中执行物理操作,会出现卡顿的情况。
方法 | 作用和调用次数 |
---|---|
OnCollisionEnter(Collision 变量) | 当碰撞开始时调用,只会调用该方法一次 |
OnCollisionExit(Collision 变量) | 当碰撞结束时调用,只会调用该方法一次 |
OnCollisionStay(Collision 变量) | 当碰撞进行中时,会持续调用该方法 |
Collision 类
作用: 用于传递 碰撞 信息。
Collision变量.gameObject
属性,对当前物体 所碰撞到的物体 的引用。
Collision变量.gameObject .name
属性,当前物体 所碰撞到的物体 的名字。
注意:
①这三个方法的级别与Start()、Update()和FixedUpdate()级别一样。
②且使用时,返回值也为空(void)。
③这三个方法都需要 一个类型为Collision 的参数
④ OnCollisionStay() :仅当其中一个Collider 还附加了非运动刚体时,才发送碰撞事件。碰撞停留事件不会发送给睡眠中的刚体。
触发器
选中某一物体后,将 Inspector 面板 里Collider 组件属性面板的 “Is Trigger” 选项选中,该物体的碰撞体就变成了触发器。
移动的刚体物体会 穿透 碰撞体勾选了“Is Trigger”的物体。
触发事件
当一个用刚体控制的物体进入到另外一个物体的触发器范围内,就是触发事件。
触发用途: 不与目标物体发生直接的碰撞(接触),而是只要进入目标物体的“触发范围”就能执行某些特定操作。
方法 | 作用和调用 |
---|---|
OnTriggerEnter(Collider 变量) | 当进入触发范围时开始时调用,只会调用该方法一次。 |
OnTriggerExit(Collider 变量) | 当离开触发范围时开始调用,只会调用该方法一次。 |
OnTriggerStay(Collider 变量) | 在触发范围内,会持续调用该方法。 |
Collider 参数
作用: 用于传递 触发 信息。
Collider变量.gameObject
属性,进入触发范围内的目标物体的引用。
Collider变量.gameObject.name
属性,当前物体的名字。
注意:
①这三个方法的级别与Start()、Update()和FixedUpdate()级别一样。
②且使用时,返回值也为空(void)。
③这三个方法都需要 一个类型为Collider 的参数
属性 | 选项与效果 |
---|---|
Cast Shadows [投射阴影] | On:开启自身阴影显示 ;Off:关闭自身阴影显示 ;Two sided:以允许表面的两面都投射阴影(此时,背面剔除被忽略);Shadows Only :只产生阴影,而游戏对象不可见。 |
Receive Shadows [接收阴影] | 选中就是接收别的物体照射到该物体身上的阴影,不选中就是不接收 |
Materials [材质球] | 用于设置用哪个材质球渲染当前的模型(Mesh) |
其中关于Two sided 选项的详细讲解转载自 百度网友654老四的回答
这个是针对半封闭的凹凸物体,比如茶杯,普通的光照渲染,都沿表面法线向里投射阴影。如果你选择two sided模式,同时会沿着法线的反向向内部投射阴影。
注:我们拖拽到游戏物体身上的材质球,其实就是赋予给了这个组件的Materials [材质球]属性上。
模型中心点
模型身上的坐标轴的中心点,也就是模型的中心点。
模型的的位置,旋转,缩放都是相对于模型的中心点来进行变化的。
改变物体中心点
①创建一个物体,一般都是空物体
②以该物体为父物体,创建父子关系,通过父物体来控制子物体。
此时父物体的中心点就是整个模型的中心点。 也就是说空物体间接的改变了物体的中心点。
但是有特殊情况如下,已验证:
注意:若这两个模型是父子关系,则 Pivot 显示的是父物体的中心点,同时这也是 其它子物体和整个父子物体的中心点。此时切换 Center 是不会改变该父子关系内任何物体的中心点。
因为父子物体可以看成是一个物体,而一个物体的中心点只有一个。
4. 使用键盘按键实现开关门
使用 Transform变量.Rotate(Vector3.方向,Float);
旋转模型。
注意:这只是 Rotate() 六个重载中的一个
相关参数:
Vector3:沿某个轴向旋转
Float:旋转的度数,同样不允许double,因为无法隐式转换
添加触发器
① 创建一个空物体,添加 “Box Collider” 组件,并设置大小和中心点;
② 将“Box Collider”勾选“Is Trigger”变成触发器;
代码实现触发器开关门
方法 | 作用 |
---|---|
OnTriggerEnter(Collider 变量) | 进入触发器时候执行,且只执行一次 |
OnTriggerExit(Collider 变量) | 退出触发器时候执行,且只执行一次 |
注意:
①这两个方法的级别与Start()、Update()和FixedUpdate()级别一样。
②且使用时,返回值也为空(void)。
③这三个方法都需要 一个类型为Collider 的参数
方法 | 作用 |
---|---|
GameObject.Find(string变量或常量) | 通过名字查找游戏物体(gameObject) |
string 该场景中要寻找的游戏物体的名字
然后就可以通过这样的方式找到gameObject身上的脚本
脚本名 变量A;//定义一个脚本名为class的变量用于储存查找到的gameObject
变量A = GameObject.Find (string变量或常量).GetComponent<脚本> ();
Tag 简介
Tag 标签——标签可以起到标识,区分的作用。
同一类的模型,我们可以根据需要给他们设置成统一的标签。
给模型添加Tag 标签
选中一个模型,在模型的Inspector 面板上的顶部位置,设置Tag 选项为一个
具体的标签。
如果说引擎提供的标签没有自己想要的标签,可以自己手动添加新标签,或者使用shift 和ctrl 多选添加。
通过Tag 标签查找N 个物体
GameObject.FindGameObjectsWithTag(string变量或常量);
//该方法也为[静态方法]
通过特定的标签,查找到所有“贴有”该标签的游戏物体,返回一个GameObject 数组。
string:标签名
还有一个FindGameObjectWithTag方法,区别是没有s。
FindGameObjectsWithTag()
方法返回的数组,输出创建触发器
在桌椅的范围内,创建一个空物体,然后添加Box Collider,并调整大小。
最后勾选“Is Trigger”属性。
使用触发器实现
OnTriggerEnter()
OnTriggerExit()