项目实训unity游戏场景的搭建
Posted 珍珠没有奶茶^_^
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目实训unity游戏场景的搭建相关的知识,希望对你有一定的参考价值。
文章目录
前言
`
unity场景的搭建
一、组件的介绍
首先对scene场景中的一些组件介绍:
常用快捷键
1.按下鼠标滚轮拖动场景(或者拖动小手),滑动滚轮缩放场景
2.选择十字标,选定物体,按下F:居中,ALT+鼠标左键:围绕旋转 ALT+鼠标右键:缩放=滑动滚轮
3.右键加ASDWQE场景漫游
4.按下十字标,选定物体,拖动轴:往前走=向着Z轴正方向,向右走=X轴正方向,向上走=Y轴正方向:反之负方向。拖动面:沿面移动。
5.按下双曲箭头标,是按轴旋转。
6.按下方框和四个箭头的标,是放大缩小,拖动中间白色小方框是整体按比例放大缩小。
7.inspector:检视面板(检查监视)显示的属性可能不准,在右上角static上边的小三杠选择Debug可以查看隐藏属性,在里面找到要修改的属性的真正名称
transform 变换组件 reset 重置
Position :位置 X 0 Y 0 Z 0 unity世界原点
Rotation :角度X 0 Y 0 Z 0 角度同世界一致
Scale: 比例 (一般X 1 Y 1 Z 1)
unity世界物体都是由小三角组成,物体越细腻小三角越多。
顶点吸附:按下V同时按下左键拖动,实现顶点吸附
视觉停留效应:0.02S以内视觉感受不到更新
2D视角:ISO正交模式3D视角:Persp 透视模式
8.Ctrl+1 切换到scene视图 Ctrl+2切换到Game视图 Ctrl+3切换到Inspector视图 Ctrl+4切换到Hierarchy视图
9.光照系统
GI(Global illumination),即全局光照。能够计算直接光、间接光、环境光(ambient)以及反射光(reflection)的光照系统。通过GI算法可以使渲染出来的光更加真是丰富。
直接光照
直接光照:directional平行光和位置无关和角度有关。point点光源相当于一个灯泡,range:范围。sport聚光灯:由一个点像一个椎体照射,相当于手电筒。
物体阴影在光源选项组件里。硬阴影性能比软阴影好。阴影很消耗性能,所以需要阴影剔除。
shadowdistance(阴影距离):如果等于40则等于距离摄像机40米以内渲染阴影,40米以外不渲染阴影。
选中个别物体,可以在组件中选择关闭阴影
环境光照
环境光照ambient source:所有物体都能感受到的光照。
作用于场景内所有物体的光照,通过EnvironmentLighting 中Ambient 控制。
•AmbientSource 环境光源
–Skybox 通过天空盒颜色设置环境光照
–Gradient 梯度颜色
Sky 天空颜色、Equator 地平线颜色、Ground 地面颜色
–Ambient Color 纯色
•AmbientIntensity 环境光强度
•AmbientGI 环境光GI模式
–Realtime实时更新,环境光源会改变选择此项。
–Backed 烘焙,环境光源不会改变选择此项。
反射光照
反射光照resolution source:从天空盒中取色。
根据天空盒或立方体贴图计算的作用于所有物体的反射效果,通过EnvironmentLighting 中Reflection 控制。
•ReflectionSource 反射源
–Skybox 天空盒
Resolution 分辨率Compression是否压缩
–Custom 自定义
Cubemap立方体贴图
•ReflectionIntensity 反射强度
•ReflectionBounces 使用ReflectionProbe 后允许不同游戏对象间来回反弹的次数。
间接光照
间接光照:物体表面在接受光照后反弹出来的光。(特别消耗性能)
通过Light 组件中BounceIntensity 反弹强度控制。
可以通过Scene 面板Irradiance 模式查看间接光照。
注意:只有标记Lightmaping Static的物体才能产生间接光。
10.声音
声音分为2D、3D两类
3D声音:有空间感,近大远小。
2D声音:适合背景音乐。
· 在场景中产生声音,主要依靠两个重要组件:
Audio Listener 音频监听器:接收场景中音频源Audio Source(音频源)发出的声音,通过计算机的扬声器播放声音。
音频监听器在摄像机组件中,场景中只能有一个音频监听器。如果有多个摄像机,那只能留一个,要把别的摄像机的音频监听器组件移除remove。
其实Audiosource 和 AudioListener 在游戏场景中的关系就是:一个用于播放声音,一个用于听(listen)声音,一个场景中只有一个 AudioListener 也很好理解,因为对于游戏来说一个客户端只针对一个玩家,所以一个玩家拥有一个 Listener 才符合实际。但是声音可以是多种多样的,所以 AudioSource 组件上可以有多个并且可设置声音的相关属性。
11.碰撞体
(1) Box Collider(盒碰撞体)。
盒碰撞体是一个立方体外形的基本碰撞体。该碰撞体可以调整为不同大小的长方体,可用作门、墙及平台等,也可用于布娃娃的角色躯干或者汽车等交通工具的外壳,当然最适合用在盒子或箱子上。
(2) Sphere Collider(球形碰撞体)。
球形碰撞体是一个基本球体的基本碰撞体。球形碰撞体的三维大小可以均匀地调节,但不能单独调节某个坐标轴方向的大小,该碰撞体适用于落石、乒乓球等游戏对象。
中的位置。
Radius:半径。球体碰撞体的半径。
(3)Capsule Collider(胶囊碰撞体)。
胶囊碰撞体由一个圆柱体和与其相连的两个半球体组成,是一个胶囊形状的基本碰撞体。胶囊碰撞体的半径和高度都可以单独调节,可用在角色控制器或与其他不规则形状的碰撞结合来使用。Unity中的角色控制器通常内嵌了胶囊碰撞体。
(4) Mesh Collider(网格碰撞体)。
网格碰撞体通过获取网格对象并在其基础上构建碰撞,与在复杂网格模型上使用基本碰撞体相比,网格碰撞体要更加精细,但会占用更多的系统资源。开启Convex参数的网格碰撞体才可以与其他的网格碰撞体发生碰撞。
(5)Wheel Collider(车轮碰撞体)。
车轮碰撞体是一种针对地面车辆的特殊碰撞体。它有内置的碰撞检测、车轮物理系统及有滑胎摩擦的参考体。除了车轮,该碰撞体也可用于其他的游戏对象。
(6)Terrain Collider(地形碰撞器)。
地形碰撞器是基于地形构建的碰撞体。
二.场景搭建
首先引入一个场景的资源,然后通过各种拖动,变换,复制,以及预制体的运用,新建一个空物体,把他们拖到同一个物体下,可多种整体运用。
制作预设:Prefab
要把素材整合包装成预设,以草地方块预设为例。
在Hierarchy视图空白处右键鼠标,点击菜单Create Empty,创建一个空物体,
重命名为grass,
再在它的子节点下创建一个空物体,重命名为mesh,
给mesh节点添加MeshFilter、MeshRenderer和MeshCollider组件,
给MeshFilter组件的Mesh赋值方块Mesh,给MeshRenderer组件的Material赋值草的材质球grass,如下
此时效果如下:
将其保存为预设,放在Prefabs目录中,同理制作其他方块预设
最终如下:
最终成果:
成果如下:
总结
以上就是今天要讲的内容,本文简单介绍了scene的一些组件以及场景如何做成自己需要的样子。
Unity游戏框架搭建 概述
??为了重构手头的一款项目,翻出来当时未接触Unity时候收藏的视频《Unity项目架构设计与开发管理》,对于我这种初学者来说全是干货。简单的总结了一下,以后慢慢提炼。
关于Unity的架构有如下几种常用的方式。
1.EmptyGO:
??在Hierarchy上创建一个空的GameObject,然后挂上所有与GameObject无关的逻辑控制的脚本。使用GameObject.Find()访问对象数据。
缺点:逻辑代码散落在各处,不适合大型项目。
2.Simple GameManager:
??所有与GameObject无关的逻辑都放在一个单例中。
缺点:单一文件过于庞大。
3.Manager Of Managers:
将不同的功能单独管理。如下:
- MainManager: 作为入口管理器。
- EventManager: 消息管理。
- GUIManager: 图形视图管理。
- AudioManager: 音效管理。
- PoolManager: GameObject管理(减少动态开辟内存消耗,减少GC)。
实现一个简单的PoolManager
// 存储动可服用的GameObject。
private List<GameObject> dormantObjects = new List<GameObject>();
// 在dormantObjects获取与go类型相同的GameObject,如果没有则new一个。
public GameObject Spawn(GameObject go)
{
GameObject temp = null;
if (dormantObjects.Count > 0)
{
foreach (GameObject dob in dormantObjects)
{
if (dob.name == go.name)
{
// Find an available GameObject
temp = dob;
dormantObjects.Remove(temp);
return temp;
}
}
}
// Now Instantiate a new GameObject.
temp = GameObject.Instantialte(go) as GameObject;
temp.name = go.name;
return temp;
}
// 将用完的GameObject放入dormantObjects中
public void Despawn(GameObject go)
{
go.transform.parent = PoolManager.transform;
go.SetActive(false);
dormantObject.Add(go);
Trim();
}
//FIFO 如果dormantObjects大于最大个数则将之前的GameObject都推出来。
public void Trim()
{
while (dormantObjects.Count > Capacity)
{
GameObject dob = dormantObjects[0];
dormantObjects.RemoveAt(0);
Destroy(dob);
}
}
缺点:
??(1)不能管理prefabs。
??(2)没有进行分类。
更好的实现方式是将一个PoolManager分成:
??若干个 SpawnPool。
??每个SpawnPool分成PrefabPool和PoolManager。
??PrefabPool负责Prefab的加载和卸载。
??PoolManager与之前的PoolMananger功能一样,负责GameObject的Spawn、Despawn和Trim。
要注意的是:
??(1)每个SpawnPool是EmeptyGO。
??(2)每个PoolManager管理两个List (Active,Deactive)。
讲了一堆,最后告诉有一个NB的插件叫Pool Manager- -。
*LevelManager: 关卡管理。
推荐插件:MadLevelManager。
GameManager: 游戏管理。
??C#程序员整理的Unity 3D笔记(十二):Unity3D之单体模式实现GameManager
SaveManager: 配置管理。
实现Resume,功能玩到一半数据临时存储。
推荐SaveManager插件。可以Load、Save均采用二进制(快!!!)
??所有C#类型都可以做Serialize。
??数据混淆,截屏操作。
MenuManager 菜单管理。
4.将View和Model之间增加一个媒介层。
MVCS:StrangeIOC插件。
MVVM:uFrame插件。
转载请注明地址:凉鞋的笔记
微信公众号:liangxiegame
以上是关于项目实训unity游戏场景的搭建的主要内容,如果未能解决你的问题,请参考以下文章