unity3d 入门[通俗易懂]

2022-09-22 09:34:46 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169328.html原文链接:https://javaforall.cn

0 人点赞