在你藏着的那个角落,会有一束光照进来的。
地形绘制
1. 从资源商店里获取Mini First Person Controller、Terrain Sample Asset Pack和Realistic Tree 9 [Rainbow Tree]三个包。
2. 创建一个地形,将地形大小设置为200*200。
3. 利用后两个包的资源创建一个场景和地形,要求地形有起伏、有适当的地面纹理、有草和树。
4. 使用导入的第一个包中的First Person Controller Minimal预制体,实现场景的浏览。
5. 附件截图仅供参考,地形内容自由发挥。
先找到相应的包进行导入,然后在场景中新建一个地形。
点击这个地形,你会在inspector面板中发现地形组件。首先这个是用来扩展地形的。
接着这个用于设置地形的长度宽度等属性。
然后组件中间的带有笔刷的是用来绘制的, 分别为绘制地形、种树、种草。
这里是用paint texture点击edit layer,然后add layer选素材即可。接着tiling 中的size改一下贴图更明显。
然后选raise or lower terrain进行拉高或降低地形,选中你所需要的笔刷,调节大小及透明度等,在scene点击或拖动即可进行升高绘制,按住shift为降低。
还有一些刨洞及平滑山脉等,都是用笔刷绘制地形,方法差别不大。
点edit tree进行加树,然后笔刷大小、树的高度、密度这些调一下。
点击edit details选add grass texture,进行种草跟种花,注意颜色可以设置的。
通过地形组件进行摆放后,把下好的第一视角角色控制器放在场景中去。
然后点击运行即可漫游你设计的地形了。
光照系统
1. 新建一个场景,使用cube和plane创建一个四面墙的房子(有地板和天花板,只有一个方向无墙壁)。
2. 将全局光照菜单中的天空盒设置为None,并删除场景中的平行光。
3. 设置一个聚光灯,将附件中的校徽投影到正面墙上。
4. 将左边墙壁设置为自发光体,给右边墙壁加上合适大小的面光源实现照明,左右使用不同的颜色,然后给房间内加上light probe组并调节数量和位置,在房间中央放置一个球体,通过键盘控制球的左右移动来呈现灯光的变化。
简述几种不同的光源:
点光源: 点光源是从一个点向所有方向发射光线的灯光。它可以模拟球形光照效果,如电灯泡或蜡烛的光照。点光源的强度随着距离的增加而逐渐减弱。
平行灯: 平行灯是一种平行于某个方向发射光线的灯光,通常用于模拟太阳光。平行灯的光线是平行且不会随着距离的增加而减弱的,因此可以产生长距离的光照效果。
聚光灯: 聚光灯是一种具有可调节角度和强度的灯光,可以模拟手电筒或舞台聚光灯的效果。聚光灯可以投射锥形光束,光照范围内的物体会受到聚光灯的照射。
面光源: 面光源是一种模拟大面积光线的灯光,可以用来模拟窗户或灯带等广泛照明效果。面光源可以设置形状和大小,可以产生柔和、均匀的光照效果。
先搭建属于你的小房子,然后点击light面板中把默认的天空盒背景设置为none,接着把场景中的directional light删去,这时候,“天黑了,请闭眼”,看到黑色的盒子是正常的。
接着创建一个聚光灯,把图片改为cookie即剪影类型,然后在聚光灯的light组件设置好cookie及角度、亮度、范围等属性,移动位置,让它投到正面墙上。
然后就是设置自发光材质球,设置好emission跟hdr,把它拖到做左边墙。
再选中右边墙给它加面光源组件,调整光源属性。
然后光照烘培贴图是作用于静态物体,把现有场景内的物体都可勾选static。
那如果想让动态的物体也被烘培到怎么处理,这就要用到光照探针了。新建一个小球在你的小黑屋中央,这个不用勾选static。然后新建光照探针组,再选中它,在inspector面板可以选择编辑点移动等操作。
这里摆放的位置是有点说法的,但考虑到小白更想知道怎么发光,因此记一下,在明暗交界处放几个点,点越多越精确,但过多会影响性能,可以参考一下,这里用了三组探针。
看一下你的小黑屋吧。
然后进行灯光渲染,点击generate lighting。
通过键盘移动小球看小球灯光的变化,其实在scene面板手动拖也行,多移几下,你会发现小球受探针的影响也在不断发生变化,这个光照变化还是挺好看的。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class move : MonoBehaviour
{public float moveSpeed = 5.0f; // 移动速度void Update(){//默认全局坐标系float horizontalInput = Input.GetAxis("Horizontal");float verticalInput = Input.GetAxis("Vertical");Vector3 movement = new Vector3(horizontalInput, 0.0f, verticalInput);//默认局部坐标系transform.Translate(movement * moveSpeed * Time.deltaTime);}
}
实验心得
你的支持是更新的动力。