unity 实习记录——包含众多天坑bug(随便写写无排版)

demo1非实习(前夕)

一·下载安装

  1. 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线段渲染器
  1. 可以在物体上挂组件/直接创建实例
  2. 添加position点的位置,以第一个点为000,也可以手动添加点(原理在摄像机中心),或调整点的位置(线段宽的话看不见,可以矩形的选取阔上点)
  3. 宽度在图标的左边图标数值可设置
  4. loop首位是否相连,Simplify Preview简化预览,alignment是否面向视角(始终)
  • 后处理
  1. Post Processing后置处理,
  2. Post Process layer(组件)(通常放在摄像机,可以不放在摄像机,当tigger要设置为摄像机),tigger对哪个目标使用(通常摄像机),layer可后处理的层(通常想要渲染的要和layer可渲染的层一致)
  3. Post Process volume(组件,放在任何物体都可)(后处理范围)is global(通常勾选,才能显示)
  4. 在project创建Post Process profile,将其拖放到Post Process volume的profile中,
  5. 才可在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个实例)

  1. mask:为要遮罩的图片创建父物体,父物体上挂组件mask,父物体选择图片(根据a值决定显示)
  2. rect make 2d:只能为方形,不用添加图片,可以设置边缘虚化
  3. 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天

  • 子物体旋转形变https://zhuanlan.zhihu.com/p/345372712

  • OnPointerEnter触发,或者事件触发,必须在第一层,考虑(画布overlay和ui的顺序(在前面放,越先绘制,越在后面)),前面的才能被检测,这

  • 图片设置为填充,更改旋转轴,填充方式,填充起点,控制填充值
  • 对于模型,新建正交摄像机,并且摄像机不要改变位置,depth only
  • 20天

  • 莫名奇妙bug:需要homepage激活,其余隐藏
  • ui不触发80%是层级问题绘制顺序,注意层级面板
  • XCharts图表插件各种地址
  •  RectTransform 用于管理和调整Canvas中UI元素的位置和大小。
  • 无论改game摄像机图像分辨率(摄像机宽高比),还是摄像机缩放,画布(特性)都会占摄像机可渲染区域的全部,有三种方法让画布不占全部区域
  1. 改相机view rect
  2. 改画布为world(摄像机旋转功能,画布不能跟随)
  3. 改画布图片大小(画布子物体被缩放)
  1. 不改变画布(画布改不了,改变子物体背景图片),改变view rect,画布跟随这个尺寸,模型想要显示在摄像机范围外,用常规overlay摄像机添加到base摄像机的stack栈上无法做到,因为overlay的范围为base的范围
  2. 同时base无法做到,只有skybox,color的清理(显示这两个),还有不清理(显示所有),选择显示的层,它是两个屏幕的摄像机,渲染不会彼此穿透
  3. 解决:将一个base相机渲染到纹理,另一个渲染模型和这个摄像机,调整在scene中ui与模型位置,即可
  4. psd可以以图片形式打开
  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值