unity关联vs
vscode直接加载文件夹,不要使用unity右键打开项目,unity2019bug导致vscode打开后没有界面,后才占用项目,不能右键打开。
找不到ms-vscode.csharp依赖
unity插件版本太老,可以修改extension目录中的package.json依赖
.vscodeextensionsunity.unity-debug-2.7.2
查看c#版本名称
修改package.json
vscode安装vscode-solution-explorer管理项目
unity安装cinemachine
asset store搜索cinemachine插件,import后确认导入后,可以在packages节点(library/packagecache中代码)找到
Cinemachine如果报错(确保没有io错误): Windows > Package Manager > in project依赖项,删除后,重新安装
unity内部错误,编译不通过,删除assets中自动生成的cinemachine文件夹,重新安装package manager中的包(之前是app store中的生成错误了,不删除不会刷新代码) 菜单栏出现cinemachie才能算成功
IO错误
权限问题,换个文件夹(c盘权限问题)
异常捕获
vscode设置常用的nullReference异常,可以在资源为空的地方停止运行
package
unity运行错误,提示文件asmdef文件找不到 在package中搜索,找到后双击导入
asmdef文件:文件的方式定义程序集,package右键文件夹import(源码在libraryPackageCache下,生成的程序集在libraryScriptAssemblies下),unity中的adf资源 unity中菜单:Assets > Create > Assembly Definition创建(可以提高编译效率)
name即项目名称,references依赖项
package compile error
选择package下文件夹,右键reimport
导入成功packages文件夹下,可以找到:
设置vscode调试
项目不要通过unity右键的方式打开,可找到文件夹打开 添加日志:Debug.LogError,Unity及时编译,unity > console点击后,出现错误自动暂停
the reference script on this behaviour missing.删除脚本组件后,重新拖动脚本到节点上
组件引用搜索
节点列表里面搜索,t:名称 tag:每个节点可以绑定标签,一个标签对应多个节点。layer(勾选后显示层) static:静止物体不可以tansform移动,渲染特殊处理
Copying assembly from ‘Temp/Assembly-CSharp.dll’ fail
project栏下packages/textmesh pro,右击reimport
ui穿透
代码语言:javascript复制protected virtual bool IsClickUI()
{
if (EventSystem.current!=null)
{
PointerEventData eventData = new PointerEventData(EventSystem.current);
eventData.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
List<RaycastResult> results = new List<RaycastResult>();
EventSystem.current.RaycastAll(eventData, results);
return results.Count > 0;
}
return false;
}
unity插件编辑模型
三大神器ProBuilder、Polybrush、ProGrids
对象查找
- UnityEngine.Object.FindObjectsOfType搜索节点
- GameObject.Find通过名字查找
- GameObject.GetComponent查找同一对象的组件
- Resources.Load资源加载(assetsresources目录中,相对路径)
- Resources.GetBuiltinResource内部资源加载
- AssetBundle.Load加载Assetbundle资源
render对象有layer属性,设置显示层级和节点的层级不同
动画
骨骼动画、关节动画、关键帧动画
- Animation:关键帧设置,可以设置对象的所有组件动画
- Animator:由Animation组成,不同的状态包含不同的Animation(animation编辑器在节点中打开才能编辑,场景中可以预览)
动画之间通过transition转换(转换控制时间轴),通过参数判断状态转换
- TimeLine:时间轴,多元素
元素
- 节点,Gameobject,使用transform属性可以设置子节点
- TileMap绘制图层,通过tile palette绘制
- prefab对象集(gameobject嵌套),prefab可以点击去单独编辑的集合,gameobject拖到文件夹中自动生成预制件
参考:https://www.jianshu.com/p/283752d80737
- Assetbundle压缩打包资源,支持热更新
- cs脚本,脚本pulic成员unity editor component可见
- GUI,通过unity的Ongui事件函数
- UGUI,canvas元素上拖放的gui
- UWidget,unity插件封装了flutter高效的app开发模式
unity界面OnGUI、NGUI下载插件、UGUI 自带
assembly definition
打包脚本到dll,减少代码修改后的项目编译时间
资源
- resource,
- asset(AssetDatabase.LoadAllAssetsAtPath展开文件的所有object,AssetDatabase.LoadAssetAtPath打开特定对象)
- assetbundle,edit中管理asset资源
参考:https://blog.csdn.net/u014230923/article/details/51433455 https://www.jianshu.com/p/2e5b1b14c276
组件事件函数
- 加载第一个场景 Awake
- 第一帧更新之前 Start
- 插值帧 OnApplicationPause
- 更新顺序 FixedUpdate、Update、LateUpdate游戏交互、动画和相机位置等操作
- 渲染 OnRenderObject、OnPreCull、OnBecameVisible
- 协同程序 yield
- 对象 (Object) 被销毁时 OnDestroy
参考:file:///D:/Program Files/Unity3d/2018.4.13f1/Editor/Data/Documentation/en/ScriptReference/MonoBehaviour.html
协程设计
unity中为了增加稳定性,使用协程实现异步(应用层级别的线程控制) StartCoroutine、StopCoroutine(以函数名开启的协程)、StopAllCoroutines 协程需要主动关闭 yield return相当于阻塞等待,yield break终止协程(内部退出)
协程的调用和帧率相关
射线检测
Physics.Raycast
插件
Editor,MenuItem等属性设置插件的显示方式 Script/Editor目录下的文件,自动添加到插件项目中
ab打包,resource目录是默认的ab包,inspector中new assetbundle,相同的名称在同一个包中
代码语言:javascript复制[MenuItem("Assets/Build AssetBundles")]
static void BuildAllAssetBundles()
{
string assetBundleDirectory = "Assets/AssetBundles";
if (!Directory.Exists(assetBundleDirectory)) Directory.CreateDirectory(assetBundleDirectory);
BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
}
fbx
3d模型fbx,包含动画,在unity中分解为animation、resource、material、texture绑定到gameobject中使用
GUI
RectTransform组件: 锚点(透明三角):四个三角符号到窗口四个角距离固定,三角符号可以在一个点上 轴点(空心小圆圈):旋转的中心 strech模式下长宽高无法获取,
gui顶点创建的ui、guilayout自动创建 button事件绑定:添加EventTrigger组件、射线检测、button绑定button对象和函数
排版,多个控件选中后设置大小,和整体大小拖动可以控制间距 Gizmos:选中效果设置可扩展,相机选中效果显示区域 相机叠加:相机的depth only模式和don’t clear模式配置depth顺序配置渲染先后顺序,depth小的先渲染
脚本OnGUI只能创建,操作在Update中进行
打包
UnityEditor不能在打包项目中使用,否则无法打包 Unity中使用System.IO中的DirectoryInfo打包会找不到路径
android目录
application.datapath unity的资源目录,权限导致写入数据容易失败 temporaryCachePath 系统临时缓存目录
unity3d播放卡死
vs tool>setting>实时>全部勾选 或者建议使用vscode
场景间传递数据
SceneManager.LoadScene //场景名称或者build setting中的编号
- start函数中GameObject.DontDestroyOnLoad(gameObject); //设置场景切换不销毁的对象
- PlayerPrefs.SetFloat、getfloat保存数据
- 静态成员变量
目录结构
特殊目录:EidtorResource
参考:https://blog.csdn.net/u013628121/article/details/53377372