首页
学习
活动
专区
圈层
工具
发布

Unity3D学习笔记(一)

描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件 本题目要求是把可视化图形编程界面与 Unity API 对应起来,当你在 Inspector...预设相当于一个对象的模板,当某个对象需要重复出现时,用预设可以提高效率,方便管理。...预设使得修改的复杂度降低,一旦需要修改所有相同属性的对象,只需要修改预设即可,所有通过预设实例化的对象都会做出相应变化。...修改预设会使通过预设实例化的所有对象都做出相应变化,而对象克隆本体和克隆出的对象是不相影响的。...制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象 void Start () { GameObject anotherTable = (GameObject

1.1K20

AssetBundle 详解

依赖包重复问题 图集重复问题 Android 贴图问题 Unity Asset Bundle Browser 工具 AssetBundle 的定义和作用 什么是 AssetBundle 它是一个存在于硬盘上的文件...加载依赖 如果 AssetBundle 中包含依赖项,则在加载尝试实例化的对象之前,务必加载包含这些依赖项的AB包。Unity 不会自动加载依赖项。...这不包括复制的游戏对象(例如实例化的游戏对象),因为它们不再属于 AssetBundle。...常见问题 依赖包重复问题 把需要共享的资源打包到一起 分割包,这些包不是在同一时间使用的 把共享部分打包成一个单独的包 图集重复问题 若不指定 Sprite 的 Packing Tag ,这些 Sprite...解决这个问题的一种方法是使用 Unity 5 的 AssetBundle 变体。(有关其他方案的详细信息,请参阅 Unity 的 Android 优化指南。)

3K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Unity基础(7)-GameObject类

    01-Unity下的GameObject类 引擎下的GameObject菜单 引擎下的GameObject菜单 02-Unity下的GameObjcet类属性 Name 对象名,可以重复,无限数量 Tag...只读属性,得到当前对象的状态(隐藏/启用) isStatic 是否静态对象(静态对象表明只有一个) transform 对象的位置,旋转,大小信息 scene 场景,获得当前对象的场景相关的信息 03-Unity...静态方法 静态方法 05-Unity下的GameObjcet类中的方法使用 静态方法 // 创建游戏对象 GameObject cube = GameObject.CreatePrimitive...(PrimitiveType.Cube); // 动态创建实例化游戏对象(针对预制物,资源包内模型等) GameObject sp = GameObject.Instantiate...ccc.tag = "Playwes"; } } // 查找某种类型,返回Object对象 // 注意:要查找具化的游戏对象

    2.4K20

    AssetBundle详解

    在加载过程中,unity会将AssetBundle中的数据流转变成unity可识别的信息类型,如:材质、纹理等。加载完成之后,我们就可以对其进行更多操作了,如:对象的实例化、材质复用、纹理替换等等。...如果一个 AssetBundle 存在依赖性,那么要注意的是,那些包含了被依赖对象的 AssetBundles,需要在你想要实例化的对象的加载之前加载。Unity 不会自动帮你加载这些依赖。...Unity5.4 以及更高的版本没有这个问题,可以正常的读取资源流。...下面有个例子展示:如何加载一个包含两个 GameObjects 的 AssetBundle,并实例化它们。...这样就可以避免应用出现重复对象的问题。 如果应用必须使用 AssetBundle.Unload(false) 方法,对象将只能在以下两种情况下被卸载: 消除对象的所有引用,包括场景中的和代码中的。

    2.5K10

    Unity2D开发入门-预制体

    前言 Unity中的预制体(Prefab)是可重复使用的游戏对象模板,可以帮助你在场景中快速创建多个相同类型的对象。...以下是使用预制体的步骤: 创建预制体:在Unity的Project窗口中,选择一个游戏对象(例如,一个模型、一个UI元素等),右键点击并选择”Create Prefab”(创建预制体)。...实例化预制体:在代码中,可以使用Instantiate函数来实例化预制体并在运行时动态创建对象的副本。...例如: public GameObject prefab; // 预制体引用 void Start() { GameObject instance = Instantiate(prefab);...// 实例化预制体 // 可以对实例化的对象进行进一步的设置和操作 } 修改预制体的属性:在Inspector(检视)窗口中,选中预制体的实例,可以修改其属性和组件。

    79320

    Unity3D学习笔记8——GPU实例化(3)

    概述 在前两篇文章《Unity3D学习笔记6——GPU实例化(1)》《Unity3D学习笔记6——GPU实例化(2)》分别介绍了通过简单的顶点着色器+片元着色器,以及通过表面着色器实现GPU实例化的过程...自动实例化 一个有意思的地方在于,Unity提供的标准材质支持自动实例化,而不用像《Unity3D学习笔记6——GPU实例化(1)》《Unity3D学习笔记6——GPU实例化(2)》那样额外编写脚本和Shader...Unity实现了自动实例化,绘制的批次明显减少,并且性能会有所提升: 可以看到确实是自动进行实例化绘制了,但是这种方式却似乎存在实例化个数的上限,所有的实例化数据还是分成了好几个批次进行绘制。...与《Unity3D学习笔记6——GPU实例化(1)》《Unity3D学习笔记6——GPU实例化(2)》提到的通过底层接口Graphic进行实例化绘制相比,效率还是要低一些。 2.2....参考 《Unity3D学习笔记6——GPU实例化(1)》 《Unity3D学习笔记6——GPU实例化(2)》 Creating shaders that support GPU instancing MaterialPropertyBlock

    1.6K10

    【Unity游戏开发】AssetBundle杂记--AssetBundle的二三事

    我们经常会把各种游戏对象做成一个Prefab,那么Prefab也会是我们Bundle中常见的一种资源,使用Prefab时需要注意一点,在Bundle中加载的Prefab是不能直接使用的,它需要被实例化之后...,才能使用,而对于这种Prefab,实例化之后,这个Bundle就可以被释放了 //需要先实例化 GameObject obj = GameObject.Instantiate(bundle.Load...("MyPrefab")) as GameObject;     对于从Bundle中加载出来的Prefab,可以理解为我们直接从资源目录下拖到脚本上的一个Public变量,是未被实例化的Prefab,...出现这种神奇的问题,首先是怀疑打包的问题,包太大了?删掉一些内容,不行!重新打一个?还是不行!然后发现来来回回,都是这一个GameObject报的错,难道是这个GameObject里面部分资源有问题?...对这个GameObject各种分析,把它大卸八块,处理成一个很简单的GameObject,还是不行!难道是名字的问题?把这个GameObject的名字改了一下,可以了!

    3.8K31

    使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    在Unity3D最常见的就是GameObject,而一个GameObject被实例化后确啥特性与行为都没有,只有当我们往其中拖拽了一个或多个组件(Component)后才会有行为。...本质上每个组件是一个类的实例。Unity3D常见的组件有:MeshFilter、MeshCollider、Renderer、Animation等等。...下面的代码则展示了在Unity3D中实现为GameObject加入刚体组件,可以看到GameObject提供了一个实例方法:AddComponent GameObject goCube = GameObject.CreatePrimitive...GameObject中定义所有Delegates中的委托为事件实例,并提供执行事件的公有方法。   ...  (1)创建一个游戏场景对象,传入主窗体实例与FPS帧率;   (2)创建一个GameObject作为游戏背景对象(GameObject最初都是空对象),然后加入BackgroundBehavior

    2.2K30

    零基础入门 36:代码控制预设

    之前一直有小伙伴问我一个问题,我们在Unity中,可以把一个GameObject从Hierarchy窗口拖动到Project窗口,这样就完成了对Prefab的创建或者更新,但是这一切的操作都依赖于手动拖动...这里的控制指的是将我们在Unity中选中的一个GameObject通过自定义菜单栏点击后,放到我们Project窗口中,从而形成一个Prefab,并且可以通过再次点击菜单栏实现更新操作,并且不改变原来选中的...我们分步拆开来看 1、有一个菜单栏可以实现对选中的控制对象进行操作 2、选中的GameObject可以实例化成一个预设文件到指定路径下 3、如果当前选中的GameObject在指定路径下已经存在,那么更新预设...当没有该预设的时候,通过PrefabUtility的Create接口直接创建,并且将选择的对象实例化,通过实例化的进行创建,这样做可以不影响之前选择的对象状态。...在创建成功后,删除这个实例化的对象即可。 如果存在则通过Replace接口进行替换,也是一样的道理。 下面把完整代码附上。

    77650

    用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析

    Unity工程部分 AS3Player   一个GameObject。它挂载了ActionScriptStartUp.cs 脚本。这个脚本承载了初始化脚本引擎的所有功能。...实际情况,可以定制 我们来看ActionScriptStartUp.cs脚本,它是如何初始化的。 在Start()函数中返回IEnumerator。通知Unity这个启动过程是一个协程。...已提供加载的进度条指示 指示Unity,本GameObject不要在切换场景时卸载。它保存了脚本引擎。 创建脚本引擎实例 读取脚本的字节码。...引擎创建字节码中某个类型的实例(Demo中为Main) 引擎获取实例的某个方法 (Demo中为update) ActionScriptStartUp的Update方法中,引擎驱动热更类型的update方法...现在在Unity中点击播放,可看到如下场景: 热更新脚本部分  现在切换到热更新工程,双击Main.as,打开热更新脚本代码: 1 package 2 { 3 import unityengine.GameObject

    1.6K100

    Unity 引擎资源管理代码分析 ( 1 )

    Unity C++ 类图 在分析Unity的资源管理机制之前,我们首先要从Unity引擎的代码层面去理解GameObject、Component、Asset、Prefab等不同类型对象的具体实现,以及它们之间的关系...但由于版权问题下文不会直接贴出Unity引擎源代码,只会对执行流程作大概的解释,敬请谅解。...因此我强烈建议大家不要让资源的命名重复,或在加载资源时不指定具体的类型。这不但会造成多余的资源加载操作,还有可能造成资源类型转换错误。...其反序列化的内部函数为PersistentManager::ReadObject。...Object基类的虚函数,负责检查在该对象中包含的所有可永续化的(代码原文Persistent,直白的说就是可通过文件存取。)

    9.4K52

    【100个 Unity小知识点】 | Unity中常用的几种单例写法

    ---- Unity 小知识点学习 Unity中常用的几种单例写法 单例模式(Singleton Pattern) 保证一个类仅有一个实例,并提供一个访问它的全局访问点 单例模式优点 单例模式核心在于对于某个单例类...,在系统中同时只存在唯一一个实例,并且该实例容易被外界所访问; 意味着在内存中,只存在一个实例,减少了内存开销; 单例模式的写法细分的话写法有很多种,但是核心都差不多,下面总结了几种最常用的单例模式提供参考...() { instance = this; } 第二种:持久化的写法,第一种的拓展,这种方法相比较第一种更可靠。...go = new GameObject("Singleton"); // 创建一个新的GameObject   DontDestroyOnLoad(go); // 防止被销毁   ..._instance = go.AddComponent(); // 将实例挂载到GameObject上 } return instance; }

    1.8K30

    Unity3D学习笔记7——GPU实例化(2)

    概述 在上一篇文章《Unity3D学习笔记6——GPU实例化(1)》详细介绍了Unity3d中GPU实例化的实现,并且给出了详细代码。不过其着色器实现是简单的顶点+片元着色器实现的。...Unity提供的很多着色器是表面着色器,通过表面着色器,也是可以实现GPU实例化的。 2. 详论 2.1....这样的关键字,可以编译实例化的着色器版本。...setup()函数的意思是通过实例化Id也就是unity_InstanceID,找到正确的实例化数据,并且调整Unity的内置变量unity_ObjectToWorld——也就是模型矩阵。...正如上一篇文章所言,GPU实例化的关键就在于模型矩阵的重新计算。在Unity API官方示例中,还修改了其逆矩阵unity_WorldToObject。 3.

    79720

    Unity3D学习笔记6——GPU实例化(1)

    GPU实例化用于解决这样的问题:对于像草地、树木这样的物体,它们往往是数据量很大,但同时又只存在微小的差别如位置、姿态、颜色等。如果像常规物体那样进行渲染,所使用的绘制指令必然很多,资源占用必然很大。...详论 首先,我们创建一个空的GameObject对象,并且挂接如下脚本: using UnityEngine; //实例化参数 public struct InstanceParam {...学习笔记3——Unity Shader的初步使用》的简单实例化着色器。...实例化绘制往往位置并不是固定的,这意味着Shader中获取的模型矩阵UNITY_MATRIX_M一般是不正确的。因而实例化绘制的关键就在于对模型矩阵的重新计算,否则绘制的位置是不正确的。...实例化的数据往往位置比较接近,所以可以先传入一个基准位置(矩阵ObjectToWorld),然后实例化数据就可以只传入于这个位置的相对矩阵(instanceToObjectMatrix)。

    1.4K10

    Unity性能调优手册12第三方插件:DOTween,UniRx,UniTask

    private void OnDestroy() { _tween.Kill(); } SetLink 调用SetAutoKill(false)或使用SetLoops(-1)无限重复的补间不会被自动销毁...建议这样的渐变在SetLink(GameObject)中与关联的GameObject相关联,这样当GameObject是破坏了,补间也被破坏了。...订阅时,将创建接收通知的对象实例、处理消息的回调等。为了避免这些实例在订阅方生命周期之后仍留在内存中,订阅方基本上有责任在不再需要接收通知时退订。...UniTask Tracker UniTask Tracker可以用来可视化等待的UniTask及其创建的堆栈跟踪。...随着越来越多的人在他们的项目中实践它,他们将能够更快地处理问题,并且他们的项目的稳定性将会增加。 您还可能遇到无法用本书提供的信息解决的复杂事件。但即使在这种情况下,你所做的也将是一样的。

    2.2K11

    Unity中巧用协程和游戏对象的生命周期处理游戏重启的问题

    主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题。 关于协程,这里有篇文章我觉得写的非常好,理解起来也很容易。...我在示例中使用的是点击按钮时,调用函数的重启方法(Restart) Restart方法只干了一件事,new一个GameObject对象出来,当这个GameObject被实例化时,该类的Start函数会被调用...,然后在Start函数中执行:销毁 –> 间隔一段时间(用上面的yield return null或者Unity提供的延时处理指令) –> 初始化 –> 销毁 new出来的GameObject对象。...的初始化、资源管理的初始化......(m_GameObject); } } } 参考资料: [1] Unity Coroutine 使用筆記 [2] 对Unity中Coroutines的理解 [3] Unity

    3.7K20
    领券