Unity
Scene场景面板
- 按下鼠标拖动场景,滑动滚轮缩放场景。
- Q:切换移动按钮 W:上下左右按钮 E:旋转按钮 R:缩放按钮
- 鼠标右键选择场景,点击左上方小手按钮后,通过左键移动场景。
- 点击右键同时按下WSADQE可以实现场景漫游。
- 在Scene面板选中物体后按F键,或者在Hierarchy面板双击物体,可将物体设置为场景视图的中心。
- 按照alt键同时通过鼠标左键围绕某物体选择场景,鼠标右键缩放场景。
- 按住v进行顶点吸附,两个物体拼接在一起。
- 轴心点不同,放大缩小旋转不一样。Center or Pivot
- Ctrl + N 建立新场景
- 插件代码对于父类进行操作,创建空容器做父类,将组件拉入空容器。(因为组件多且杂,容易更改)
相机
-
天空盒子 SkyBox:围绕整个场景的包装器,用于模拟天空的材质。常用:6Sided , Procedural -
添加天空盒方法:摄像机添加组件Skybox,方法二:Window-Lighting-Environment Lighting --Skybox–可作为反射源将天空色彩反射到场景中 (2019为:Window–Rendering–Lightning settings) -
摄像机快速定位当前视角 Ctrl+shift+f -
地图相机最好选择2d模式! 深度必须比主摄像机大,然后选择 显示地图,单单只有地图 -
地图相机看地图人物头顶加一个平面进行层设计,然后显示平面层,人物层不显示,而看人物摄像机则选择屏蔽平面设计!
渲染管线
渲染剔除:当物体被送进渲染流水线之前,摄像机视角内看不到的物体进行剔除,从而减少了每帧渲染数据量,提高渲染性能。适用于密集物体被遮挡的场景!!!!
LOD:多细节层次Levels of Detail,根据物体模型的节点在显示环境终所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。(即距离摄像机越近,渲染越细,物体看起来越精细)
unity特有的鼠标控制的函数
? void OnMousXXX(){}
//鼠标点击物体时执行
private void OnMouseDown()
{
print("OnMouseDown");
}
//鼠标在物体上点击但没有抬起时一直执行
private void OnMouseDrag()
{
print("OnMouseDrag");
}
//鼠标点击物体后抬起时执行
private void OnMouseUp()
{
print("OnMouseUp");
}
//鼠标点击物体后抬起时执行(需要在原物体抬起时触发)
private void OnMouseUpAsButton()
{
print("OnMouseUpAsButton");
}
//鼠标移到物体上面执行
private void OnMouseEnter()
{
print("OnMouseEnter");
}
//鼠标悬浮在物体上时一直执行
private void OnMouseOver()
{
print("OnMouseOver");
}
//鼠标移出物体时执行
private void OnMouseExit()
{
print("OnMouseExit");
}
unity怪物控制AI之一
定义一个三维向量用于确定怪物和Player直接的位置关系也就是Player对于怪物在哪个方向是。用Player的 坐标减去怪物坐标即可。
定义一个步数:步数等于转向速度*持续时间(每一帧)。(角速度 * 时间= 新角度)再定义一个新三维向量,新向量的方向在怪物当前的面向和怪物与Player确定的向量之间,新向量的具体方向由步数对应的角度(角速度 * 时间= 新角度)决定。让怪物的面向等于刚刚得到的新三维向量。怪物速度等于其面向 * 速度 * 持续时间。具体实现例子如下:
void Update()
{
//追踪
Vector3 targetdir = player.position - transform.position;
float step = rotspeed * Time.deltaTime;
Vector3 newdir = Vector3.RotateTowards(transform.forward, targetdir, step, 0.0F);
//此函数作用是生成一个四元数表示的三维朝向,然后可以直接把这个朝向赋给游戏对象来变更其朝向
transform.rotation = Quaternion.LookRotation(newdir);
transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
public static Vector3.MoveTowards(Vector3 current,Vector target,float maxDistanceDelta) current: 当前位置 target: 将要移动到的位置 maxDistanceDelta: 移动速度
public static Vector3.RotateTowards(Vector3 current, Vector3 target, float maxRadiansDelta, float maxMagnitudeDelta) current: 当前位置 target: 将要移动到的位置 maxRadiansDelta: 角速度 maxMagnitudeDelta: 变换幅度
unity碰撞判定逻辑
OnTriggerEnter函数是每一帧进入碰撞体积的物体都会予以判定。通过标签判断碰撞需要销毁的物体,不发生销毁就返回空值即可。
|