【Unity3d】Resource文件夹优缺点

resource 文件夹

强烈不建议使用Resources系统,原因如下:

1 使用Resources文件夹将会使细粒度的内存管理变得更难
2 对Resources文件夹的不恰当使用会导致应用程序构架和启动时间变长
  随着Resources文件夹数量的增加,在这些文件夹中管理Asset将会变得越来越难
3 使用Resources系统会降低项目向不同平台提供定制内容的能立,并且导致项目无法进行增量内容更新 
  AssetBundle变体是Unity用来在设备层面调整内容的首选工具

在下面两种特殊情况中,Resources系统会很有用,而且不会影响开发体验:

1. Resources系统简单易用的特点使其非常适合用于快速开发原型。不过,当项目进入正式开发阶段时,应该停止使用Resources文件夹。
2. Resources文件夹可以用于处理一些简单的内容: 
	 在项目的整个生命周期中都被使用的内容
	 非内存密集型内容
	 不太可能添加补丁或者不受平台和设备影响的内容
	 用于最小化引导的内容 
  • 当项目被构建时,所有名为Resources的文件夹中的所有Asset和Object都会合并到同一个序列化文件中。

  • 这个序列化文件中还含有元数据(Metadata)和索引(Indexing)信息,类似于AssetBundle。

  • 正如AssetBundle文档中所描述的那样,这个索引中包含了一个用于将给定Object名称转换为恰当的File GUID和Local ID的序列化查找树,同时它也用于定位在序列化文件中偏移了指定字节数的Object。
    在大多数平台上,用于查找的数据结构是平衡查找树,其时间复杂度为O(nlog(n))。因此,索引加载时间随Resources文件夹内Object数量而增长的速度高于线性增长。

  • 加载Resources文件这一操作无法跳过,它会在应用程序启动显示不可交互的启动画面(Splash Screen)时执行。

  • 在一台低端设备上,初始化一个包含10000个资源文件的Resources系统要花费几秒的时间,然而在Resources文件夹中的这些Object很多都不会在应用程序的第一个Scene中使用到,完全没有必要加载。

在Unity中,从Resource文件夹加载游戏物体并排列它们通常涉及序列化资源、读取数据以及使用Transform组件。下面是一个简化的步骤说明: 1. **序列化资源**:假设你已经将需要的对象保存在一个prefab中(.prefab格式),或者直接是在Resources文件夹下的Prefab或Model asset。你可以使用Unity内置的序列化工具或第三方库将多个游戏物体的数据存储在一个单独的文件中。 2. **加载游戏物体**:在你的C#脚本中,使用`Resources.Load<GameObject>` 或 `Instantiate(Resources.Load("YourPrefabPath"))` 来从Resource文件夹加载prefab。这会返回一个GameObject实例。 3. **排列游戏物体**:加载后,遍历所有游戏物体,对每个物体应用相同的变换,例如在X轴上均匀分布。这里可以用到`transform.position = new Vector3(xValue, 0, zValue)`,其中xValue表示沿X轴的距离,zValue是初始Z轴位置。 ```csharp List<GameObject> gameObjects = InstantiateGameObjectsFromPrefab(); foreach(GameObject obj in gameObjects) { obj.transform.position = new Vector3(index++ * spacing, 0, initialDepth); // 确保index初始化为0,spacing是对象之间的间隔 } ``` 4. **发射游戏物体**:在物体的Start或Update方法中,可以通过`rigidbody.AddForce(Vector3.forward * speed, ForceMode.Impulse)` 添加沿着Z轴的力,使物体朝正前方飞出。这里的speed是物体的速度。 ```csharp rigidbody.velocity = new Vector3(0, 0, speed); ``` 注意:在实际项目中,你可能还需要处理碰撞检测、生命周期管理等其他细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值