001
工程的创建和打开
打开已经存在的工程
Assets (资源目录)
Library (库文件夹) Unity开发游戏时生成的一些中间文件
ProjectSettings (工程设置文件夹)
Temp (临时文件夹)Unity打开时会自动创建,关闭时会自动删除此文件夹
002
工程目录
Assets:
Textures (贴图)
Models (模型)
Mats (材质)
Project面板中可以切换单列视图和双列视图
003
Unity中资源的导入方式
① Window -> Asset Store 如果无法打开,可以试试右上角的Reload(重新载入)
② 在Project面板中直接搜索Asset Store(资源商店),如果不显示,在Edit -> Preferences -> Show Assets Store Search Hits
③ 直接拖到Project面板下
④ 在Project面板下右键Import Package -> Custom Package(自定义资源)
⑤ 导入Unity的标准资源(前提是在Unity安装包中安装Standard Assets插件,然后在Project面板中 Import Package下面选择
004
Unity中的3D物体
3D GameObject : Cube 立方体
Sphere 球体
Capsule 胶囊体
Cylinder 圆柱体
Plane 平面 (单面大面片)
Quad 1*1的平面(单面面片) 之前是用这个这2D游戏
Ragdoll 布娃娃系统
Terrain 地形系统
Tree 枯萎的树干
Wind Zone (风系统) 它会模拟风区
3D Text 3D的文字
导入一棵树: Mesh(网格) 控制模型的一个形状和样子
Materials (材质) 控制它的外观 -> 贴图控制它的光滑度,反光等
005
菜单栏
Unity中可以添加同样的窗口 Add Tab
GameObject -> Align With View 使Game视图和Scene视图保持一致
GameObject -> Move To View 移动相机,向前聚焦
006
工具栏
T 调节游戏物体的大小,和缩放类似,常用于调节2D游戏的UI
Pivot点 原点
Center 整体的中心点(包含子物体)
※区别: 例如我们导入一颗树,它的Pivot点位置树根,而中心点是计算出模型的中心点。
Layers 层 显示与隐藏与锁定
007
窗口操作
窗口最大化:右上角的小列表里的Maximize
008
Scene窗口下视野控制
在Scene场景面板下按住右键可以围绕自身旋转,Q键向下移动,E键向上移动,W键向前移动,S键向后移动,可以在
视野中进行漫游
控制Main Camera的视野: Main Camera -> Camera -> Prejection,里面有Perspective(透视视图)和Orthographic(正交视野)。
009
Transform组件
Transform组件中修改Rotate中x,y,z的角度,x和z会围绕其自身的轴旋转,y轴会按照世界坐标的y轴旋转。
010
控制游戏物体移动的小技巧
按住Ctrl移动物体是以一米为单位的
移动物体的步长是可以修改的,默认为1.
Edit -> Snap Settings进行修改,里面的值都是在按住Ctrl移动才会生效
按下V可以吸附顶点,移动物体时可以和其他物体的顶点吸附
011
导入资源,Prefab预制体
在这里把Prefab(预制体)比作父亲,通过Prefab复制到Hierarchy面板下的物体比作儿子,他们的关系式:父拉子
,改变的子的不理父
如果将Hierarchy物体关联的Project下的Prefab删除掉,物体会曾红色,显示Missing,解决方法是:GameObject ->
Break Prefab Intance (删除关联的预制体)
Apply:Hierarchy面板中修改的物体,如果想要将通过Prefab复制的物体和Hierarchy中修改的物体保持一致,请点
击Apply (应用),就会应用到对应的Prefab
脱离Prefab: 同上 GameObject -> Break Prefab Instance
012
地形设计1
创建地形面片(Terrain)
选择Terrain组件,选择设置小按钮:Terrain Width(地形宽度)
Terrain Length (地形长度) T
Terrain Height (地形的最大高度)
选择地形升高降低按钮一: Brushes 笔刷
Brush Size 笔刷大小
Opacity 地形增高的快慢程度
包含20种不同的地形
按住Shift再进行粉刷会降低地形,最低为0
013
地形只升高按钮2:这个工具只能升高地形
Height可以设置所描绘地形的最大高度 -> 下面有一个Flatten按钮:只将地形粉刷到某个高度上
地形平滑按钮3:Smooth Height 用于平滑那些过于尖锐或缺乏真实感的地形
地形贴图工具按钮4: Paint Texture (绘制贴图)
Texture (贴图) -> Add Texture 添加贴图 -> 第二个是法线,可以让地形更加有质感
Edit Texture 编辑视图
Remove Texture 移除视图
※ 第一次添加贴图是给整个地形添加的,第二次则可以自己绘制
添加树按钮5: Place Trees (添加树) Shift 减少树
绘制细节按钮6:Paint Details (粉刷细节) 粉刷一些植被,草地等。
014
古迹探险地形设计1
实操
015
古迹探险地形设计2
实操
016
古迹探险地形设计3
实操
017
什么是刚体
Rigidbody刚体组件可以模拟物理效果,让物体拥有物体特性。
Mass 质量
Drag 摩擦力或阻力 下降和旋转都会变得缓慢
Angular Drag 只控制旋转的阻力
Use Gravity 是否使用重力
Constraints: 冻结选项 -> Freeze Position 冻结方向 :x y z
Freeze Rotation 冻结旋转方向 :x y z
018
如果禁用Box Collider(碰撞器),物体就可以被穿过。
编辑碰撞器(Box Collider):点击 Edit Collider
关于碰撞器的性能:Collider有Box Collider和Sphere Collider和Capsule Collider和Terrain Collider等等
其中Box Collider(顶点越多越耗费性能)最节约性能。
最耗费性能的碰撞器: Mesh Collider 最精准的碰撞器,也是最耗费性能的碰撞器。
取消勾选 Mesh Renderer 可以显示Mesh Collider的表格
019
碰撞检测函数
void On CollisionEnter (Collision collision){
print ("OnCollisionEnter"); //碰撞开始(接触)的那一刻,只会调用一次
}
void On CollisionExit (Collision collision) {
print ("OnCollisionExit"); //碰撞结束(离开)的那一刻,只会调用一次
}
void On CollisionStay (Collision collision) {
print ("OnCollisionStay"); //碰撞发生的时候,逐帧调用
}
020
如何取得碰撞函数
俩个物体碰撞的条件:①:双方身上都有Collider(碰撞器)
②: 其中一个身上有刚体组件(Rigidbody)
Static Collider(静态的碰撞器):物体身上只添加了一个Collider,没有Rigidbody组件
Is Kinematic :如果勾选上,相当于禁用Rigidbody组件
//该碰撞检测脚本位于主动方
void OnCollisionEnter (Collision collision) {
print(collision.collider); //取得被碰撞物体的碰撞器
print(collision.collider.name); //取得被碰撞物体的名称
print(collision.collider.tag); //取得被碰撞物体的标签
}
021
触发检测
在Box Collider中将Is Trigger勾选上,这个物体就成为了一个触发器
做触发检测:Mesh Filter (×) 可以删除
Mesh Renderer (×) 可以删除
Box Collider(Is Trigger) (√) 必须保留
※ 触发检测脚本可用于碰撞体和被碰撞体任何一方,都可以检测到碰撞和触发
void OnTriggerEnter (Collider other) { //other是触发器所在的游戏物体
print("OnTrigger"+other); //获取触发器的名称
print("OnTrigger"+other.name); //获取触发器所在游戏物体的名称
print("OnTrigger"+other,tag); //获取触发器所在游戏物体的标签
}
022
Unity中的四种灯光
Directional Light 平行光 可以改变光的照射位置,影子的方向也会改变,世界中的太阳会跟着平行光位移
Reset 复位后旋转可模拟日出和日落
Point Light 点光源 相当于一个电灯泡,由中心向四周发射,可改变其Range(范围)Color(颜色)Intensity(强度)
Spot Light 聚光灯 相当于一个手电筒,可以调节Spot Angle(角度)和Intensity(强度) (这里让我想到恐怖游戏)
Area Light 区域光 烘焙中用到吧,有待补充
023
给场景添加火堆
创建黄色点光源(Point Light),渲染火堆
024
如果不使用光照贴图的话,灯光它是实时计算的,这样会耗费性能
Mode : Realtime 实时计算
Baked 烘焙贴图 (选择Baked烘焙再Generate Lingting擦会有光照贴图)
Mix 混合(实时+烘焙) 用于火光
025
Lightingmapping补充
火堆的阴影:选择Point Light -> Inspector面板 -> Shadow Type(阴影类型): No Shadow (无阴影)
Hard Shadow (硬的阴影)
Soft Shadow (柔和的阴影)
※ 每次修改完灯光的Range和Shadow等需要重新渲染(Generate Lighting)才有效果
026
使用粒子系统创建火焰
① 在火堆(复制的一个Prefab)下面,右键Effects(特效)-> Particle System(粒子系统),调节好它的位置
② 点击粒子界面里的Shape(形状),在Scene视图调节它的缩口
③ 选择Start Lifetime(生命时间),比如火焰,数值越大,火焰越向上
④ 选择Statr Speed (速度),调节火焰的速度,也可以调节随机的速度,右键Random Between Two Constants,规定Min值和Max值
⑤ 在Project面板中选择动画,在这里是4*4帧的火焰动画,然后创建一个材质(Material),在材质球中的Shader(着色器)中选 择Particles -> Additive(添加物) -> 选择4*4帧的Texture(贴图) -> 选择颜色(可省略)->
⑥ 将材质指定给Particle System(粒子系统)。在Particle System中选择Renderer(渲染器)-> Material -> 指定之前创建的 火焰材质球
⑦ 此时动画没有播放,在Particle System中 -> Texture Sheet Animation(贴图纸张动画) -> Tiles(格式) 默认为1*1设置为4*4
⑧ Start Size 改小贴图,目的是让火焰变小
⑨ Emission(发射) -> Rate over TIme(速率) 右键也可以取一个范围 Random Between Two Constants 修改Min值和Max值
⑩ 往中间聚拢,缩小上边的口子 大小应该是慢慢变小的 选择Particle System -> Size over Lifetime (生命周期的规模)
-> Size 选择由大变小的曲线
最后修改Emission(发射)-> Rate over time 增加发射的速率
027
创建动画(火光闪烁)
① 选中要添加动画的灯光 -> Windows -> Animation -> 点击Create -> Add Property(添加性能) -> Light -> Intensity
② 打开红色录制按钮 一帧一帧编辑灯光的强度变化 点三角运行按钮观看效果
③ 添加火光的摇摆 Transform -> Position
④ 调节Samples的值可以改变速度快慢,越大越快
028
导航系统-导航网格生成
让主角自动寻找最短路径,并且避障
① 确定环境的Navigation都勾选上,全部勾选Static也行
② Windows -> Navigation -> Bake -> 点击Bake键进行导航网格的烘焙
③ 修改物体的不可靠近区域 减小Agent Radius(实体半径)
④ 草可以穿过去,将Inspector面板下的Static下的Navigation Static取消勾选,重新烘焙
⑤ 生成导航网格是根据Mesh Renderer生成的,双击物体显示Mesh Renderer,Navigation -> Object -> Navigation Area(导航区 域) -> Not Walkable
⑥ 选中Hero 给主角添加Nav Mesh Agent(导航网格代理) 修改半径(Radius)和高度(Height)
029
通过导航系统控制英雄移动
在主角身上创建脚本Hero
using UnityEngine.AI;
public NavMeshAgent agent; //通过拖拽方式赋值
void Update () {
if(GetMouseButtonDown(0)) //按下鼠标左键
{
Ray ray = Camera,main.ScreenPointToRay(Input.mousePosition); //鼠标位置转换为射线
RaycastHit hit; //保存碰撞信息
if(Physics.Raycast(ray, out hit) 射线检测(这里没细讲)
{
//hit.point
//print(hit.point); //在Console输出坐标点(x,y,z)
agent.SetDestination(hit,point); //设置目的地
}
}
}
Nav Mesh Agent: Angular Speed(旋转角度的速度) 这里讲Hero设置为500 数值越大转身越快
030
控制摄像机的跟随
public Transform hero;
private Vector3 offset;
void Start () {
offset = transform.position - hero.position;
}
void Update () {
transform.position = offset + hero.position;
}
031
控制角色的动画播放
① 创建一个Animation Controller(动画控制器)指定给Animator
② Idle Walk Run动画
③ Nav Mesh Agent : Speed(主角移动的最大速度)
④ Parameters -> 添加一个参数float Inspector面板 -> greater (相当于大于)
-> less (相当于小于)
⑤ 取消勾选 Has Exit Time(无结束时间,就是立即切换)
⑥ 在主角的脚本编辑
public Animator anim; //拖拽进行赋值
void Update (){
anim.SetFloat("Speed",agent.velocity.magnitude); //anim.SetFloat(名字,组件.速度.数值);
}
网友评论