demo1非实习(前夕)
一·下载安装
- QGIS(模型地图的处理工具),blender, blenderGIS-master插件(负责将gis转化为模型),c4d,预制包替换,, unity, vscode
二·QGIS处理shp
- GIS,即地理信息系统
- shp文件拖入QGIS作为图层,依次另存为(防止更改原文件),坐标参考选择器3857(必须),格式ESPI
- 选中某图层(像ps,选中图层后操作),切换编辑模式,框选/点击所选要素删除,再次切换编辑模式保存
- 打开图层属性表,(非属性),可以查看要素总数18000,id为建筑索引,floor为楼层数
- 例子:矢量-》地理处理-》融合,目的将要素融合,-》融合字段(id,floor),选择floor,按照楼层进行融合,融合后要素数量46,
- 矢量-》几何图形工具-》多建筑变单建筑(目的打散,可以移动)13900要素
- 把另存的原shp文件替换为矢量处理的文件(依旧另存为)
三·blender处理gis导出fbx
- 将文件生成为模型-》安装插件后出现gis图标-》导入-》shapefile(即shp格式)-》建筑shp需要挤出
- 并调整模型,中键-》缩放,shift + 中键-》平移,中键-》旋转
- 没有高度的导入,不用挤出
- 对路网-》物体-》转换-》曲线
- 对路网-》添加-》曲线-》路径曲线
- 对路网-》拖动-》(添加宽度)
- 依次导出模型,勾选仅选定的物体
四·c4d处理ui&&材质
- 视图修建为极大,复制所有窗口到建筑中
- ctil +n在下方面板创建材质,并在右侧面板拖放材质
- 给颜色,渐变颜色投射改柱状,旋转90度,给贴图jpg,右边材质图标投射改为平直
- 整体导出fbx
五·unity摄像机脚本&&ui
- unpack解除模型预制
- Post Processing插件包,在空物体添加Post-process Volume,相机添加Post-process Layer,并设置层
- 定义变量,通过客户端拖放初始化变量
- public的变量可以在客户端展示,public的函数可以被component组件的event trigger添加事件中,选择实例上的脚本,调用函数
- 获取UI的fig格式
- 解析导出为png
- ui的Source Image中需要2d精灵,❌注意这两个设置才可,接着apply
- 设置可中文字体
- 在hierachy中左侧物体可见性
- line renderer线段渲染器
- 可以在物体上挂组件/直接创建实例
- 添加position点的位置,以第一个点为000,也可以手动添加点(原理在摄像机中心),或调整点的位置(线段宽的话看不见,可以矩形的选取阔上点)
- 宽度在图标的左边图标数值可设置
- loop首位是否相连,Simplify Preview简化预览,alignment是否面向视角(始终)
- 后处理
- Post Processing后置处理,
- Post Process layer(组件)(通常放在摄像机,可以不放在摄像机,当tigger要设置为摄像机),tigger对哪个目标使用(通常摄像机),layer可后处理的层(通常想要渲染的要和layer可渲染的层一致)
- Post Process volume(组件,放在任何物体都可)(后处理范围)is global(通常勾选,才能显示)
- 在project创建Post Process profile,将其拖放到Post Process volume的profile中,
- 才可在volume组件上添加effect效果(bloom泛光)
demo2
-
添加using UnityEngine.UI;注释掉//using Microsoft.Unity.VisualStudio.Editor;才可使用Image类型变量,
-
ToString();转化为字符串
-
用hub安装版本:Windows找不到文件‘C:\xxx\xxx.exe‘。,需要在网页下载unity版本
-
gameobject.SetActive(true)设置物体可见性
-
ui界面某个在上面,需要canvas组件,设置层级,并添加Graphic Raycast组件才可
-
GameObject obj = GameObject.FindWithTag("Player");返回第一个匹配且是激活状态的对象。
-
二天
-
x.GetComponent<temp>();获取x物体的组件
//找到所有子物体
int childCount = obj.transform.childCount;
for (int i = 0; i < childCount; i++)
{
GameObject childGameObject = 当前对象.transform.GetChild(i).gameObject;
…………
}
-
必须有CanvasGroup才能让画布包括子物体doface
-
必须先存在tag,才可以自动设置标签0(0,1,2……)
-
ui都可以执行dotween
-
粒子需要在画布外创建,再挂载到画布上才可
-
执行时必须ui.transform.DOScale加上ui才行
-
Transform.right为x轴
-
Time.deltaTime
是两个连续帧之间的时间差,以秒为单位 -
6天
-
Invoke("函数名", float 等待时间),停止执行等待中的内容CancelInvoke();
-
协程(不用等待函数执行完,就可执行之后的语句指令:IEnumerator 函数名(){可以加可以不加yield return new WaitForSeconds(等待时间);}
-
协程调用StartCoroutine(函数名)
-
Tweener
是DOTween库中的基础类,它代表一个单独的动画操作。Sequence
是一个组合类,它允许你将多个Tweener
对象串联在一起,形成一个按顺序执行的动画序列。 -
DoTween函数教程,DOTween.KillAll();将所有动画终止
-
unitypackage是可以导入的包,在assets导入
-
粒子勾选prewarm直接播放,没有喷发延迟
-
遮罩3个(2个组件,1个实例)
- mask:为要遮罩的图片创建父物体,父物体上挂组件mask,父物体选择图片(根据a值决定显示)
- rect make 2d:只能为方形,不用添加图片,可以设置边缘虚化
- sprite mask:为2d实例建立遮罩实例,
-
7天
-
mouseX += Input.GetAxis("Mouse X")(获取鼠标在水平方向上的移动量) * X_MouseSensitivity;
-
unity角度天坑,物体旋转超过范围卡死,:❌:并且RotateAround函数中不能出现负数,要是想要负数,需要在外面改变量
private float CheckAngle(float value)//将eulerAngles角度变为正常值
{
float angle = value - 180;
if (angle > 0)
{
return angle - 180;
}
return angle + 180;
}
- 画布旋转被拉伸,是因为画布父物体的scale不一致,必须为1,1,1的倍数
- ❌相机2的粒子大小位置,相机1的视角被意外改变,
-
9天
- 想要调整摄像机的远近平面内的视口大小,可以在camera组件下,viewport rect或game游戏窗口的大小上
-
屏幕/图像分辨率:横向和纵向上所拥有的像素数量,1920×1080,分辨率可以得出长宽比,并不是说大小,那么分辨率越高,像素越精细,当缩放的时候越清晰,
-
Center(中心坐标位置):由Unity根据模型的mesh计算出来的中心位置,是选择的所有物体的中心。Pivot(轴心坐标位置):模型的真实位置,
-
Global物体全局坐标模式,loacl局部坐标模式
-
画布中的anchors描点:物体对齐的位置,分辨率下物体以哪里为基准。
-
画布中的Pivot(按住shift,蓝色点表示在ui物体边框的哪个位置):设置物体轴心坐标位置
-
画布中的position,按住alt,直接设置位置
-
深度较低的摄像机在深度较高的摄像机之前渲染。
-
Clear Flags 中最常用的设置值,
Depth Only
就是仅清除缓存帧中的深度信息。 -
显示分辨率(ppi(像素每英寸))与图像分辨率(首先指出一个误解:通常我们会看到“分辨率1920*1080",此处分辨率=Resolution,是数码图像的分辨率,与屏幕分辨率ppi和打印机分辨率dpi无关,它表示的是“像素数量”不要理解为面积,)(unity默认100像素等于1单位)
-
Screen.currentResolution - 指的是设备分辨率,比如:电脑上指的就是电脑的屏幕分辨率,手机上指的就是手机的屏幕分辨率。
-
Screen.width,Screen.height - 指的是使用该值的窗口的宽高,比如:在Scene窗口使用指的就是Scene窗口的宽高,在Game窗口使用,即运行编辑器时使用,指的就是Game窗口的宽高,在自定义的Window使用指的就是自定义的Window的宽高。
-
14天
-
OnPointerEnter触发,或者事件触发,必须在第一层,考虑(画布overlay和ui的顺序(在前面放,越先绘制,越在后面)),前面的才能被检测,这
- 图片设置为填充,更改旋转轴,填充方式,填充起点,控制填充值
- 对于模型,新建正交摄像机,并且摄像机不要改变位置,depth only
-
20天
- 莫名奇妙bug:需要homepage激活,其余隐藏
- ui不触发80%是层级问题绘制顺序,注意层级面板
- XCharts图表插件各种地址,
-
RectTransform
用于管理和调整Canvas中UI元素的位置和大小。 - 无论改game摄像机图像分辨率(摄像机宽高比),还是摄像机缩放,画布(特性)都会占摄像机可渲染区域的全部,有三种方法让画布不占全部区域
- 改相机view rect
- 改画布为world(摄像机旋转功能,画布不能跟随)
- 改画布图片大小(画布子物体被缩放)
- 实现多屏 / 区域屏,upr的camera参考1 参考2,渲染到纹理,实现摄影机效果
- 不改变画布(画布改不了,改变子物体背景图片),改变view rect,画布跟随这个尺寸,模型想要显示在摄像机范围外,用常规overlay摄像机添加到base摄像机的stack栈上无法做到,因为overlay的范围为base的范围
- 同时base无法做到,只有skybox,color的清理(显示这两个),还有不清理(显示所有),选择显示的层,它是两个屏幕的摄像机,渲染不会彼此穿透
- 解决:将一个base相机渲染到纹理,另一个渲染模型和这个摄像机,调整在scene中ui与模型位置,即可
- psd可以以图片形式打开