场景构建AB包的方法和资源类似:从AB中加载场景是不用把场景放到scene in Build中的,加载后读取即可。
using UnityEngine;
using System.IO;
using UnityEngine.Events;
using UnityEditor;
using System.Collections.Generic;
public class BuildAB
{
[MenuItem("Tools/BuildAssetbundle")]
static void BuildAssetbundle()
{
string outPath = Path.Combine (Application.dataPath, "StreamingAssets");
//如果目录已经存在删除它
if (Directory.Exists (outPath)) {
Directory.Delete (outPath,true);
}
Directory.CreateDirectory (outPath);
List builds = new List ();
//设置bundle名,和多少资源打在同一个Bundle内
builds.Add (new AssetBundleBuild (){assetBundleName="scene-ab.unity3d",assetNames =new string[]{"Assets/scene-ab.unity"}});
//构建Assetbundle
BuildPipeline.BuildAssetBundles (outPath,builds.ToArray(),BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows64);
//刷新
AssetDatabase.Refresh ();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.SceneManagement;
public class LoadABScene : MonoBehaviour {
void Start () {
string path = Path.Combine (Application.streamingAssetsPath, "scene-ab.unity3d");
//加载场景Bundle
AssetBundle.LoadFromFile (path);
SceneManager.LoadScene ("scene-ab");
}
}
转载的,写的十分详细1,当你给模型UVW处理完后保存UV为*.uvw文件.Create new uvw and change it to channel 2. Load the uvw you created earlier. This give you better result than using automatic uvw.2,创建一个新的uvw并改变它的通道为2.载入你刚才创建...
场景构建AB包的方法和资源类似:从AB中加载场景是不用把场景放到scene in Build中的,加载后读取即可。
1、通过打包工具将场景打包
2、使用
UnityWebRequest
API简单实现public class sceneABLoad : MonoBehaviour
{
//下载地址
private string loadPath = "";
void Start()
{
StartCoroutine(LoadAB());
}
void Update()
{
}
IEnumerator LoadAB()
{
UnityWebRequest assetBundle = UnityWebRequestAssetBundle.GetAssetBundle(loadPath);
yield return assetBundle.SendWebRequest() ;
AssetBundle ab = DownloadHandlerAssetBundle.GetContent(assetBundle);
//包中的场景名字
SceneManager.LoadScene("AB1");
}
}
首先创建场景scene_0,在上面创建一个按钮,保存scene_0
然后创建场景scene_1,保存scene_1
然后分别运行其场景,在运行的过程中,点击“File”->“Build Setting”
如图所示,点击“Add Current”,场景就会自动加进去了
给scene_0中的button加一个点击事件,代码如图
Application.LoadLevel ("scene_1");和Application.LoadLevel (1);这两种方法都可以.。一个是加载名“scene_1”的关卡,一个是加载索引为1的关卡
运行游戏,点击按钮,就会进入下一个场景了
1.创建Assetbundle
无论是模型资源还是UI资源,最好是先把他们放在Prefab中,然后在做成Assetbundle。我们以模型来举例,Assetbundle中可以放一个模型、也可以放多个模型,它是非常灵活了那么最需要考虑的就是模型空间占用的问题。
比如我们有两个完全一样的模型,但是他们身上绑定的脚本不一样,此时需要把这两个模型放在两个不同Prefab中。如下图所示,我们分别对这两个Prefab打包,我们可以清晰的看到两个相同的Prefab打包在一起只占1M空间,而将他们分别打包会占1 + 1 = 2M空间。 Prefab在打包的同时会把模型身上的所有材质、贴图、组件、脚本全部包含进去。
因为开发的一个插件需求,要在unity编辑模式下从ab包加载场景,而EditorSceneManager.OpenScene只能根据本地路径加载场景文件,有没有其他的方法,如果能够异步加载更好了
1,游戏启动,自定义版本管理器去安卓的持久化目录下查找我们自定久的版本管理文件 rep.db,若该文件不存在,说明这是游戏第一次启动,于是就把streammingAssets下的LUA文件夹和resoure文件夹及rep.db及版本号文件version.txt及资源列表文件resource_list.txt拷到持久化目录下。
若发现rep.db存在,则去WEB资源服务器上取资源版本号,并与version.txt中的版本号对比,如不一致,则去对比服务器与本地的resource_list.txt(每个文件对应一个MD5),少的删除,多的增加,将资源从WEB服务器上拉到持久化目录,并重新写一个rep.db,记录了LUA文件,资源文件的相对-绝对路径映射,相对路径就是资源打包时指定的资源名称,比如打一个资源包 assets/res/pictures,下面有一组图片,分别命名为 assets/res/pictures/grass.png,assets/res/pictures/stone.png等,并将资源名与资源包的对应关系写到一个配置文件 asset_2_bundle.txt中,以便加载时使用。
资源打包时,对AB包内的资源名称并没有什么限制条件,既可以使用带路径的名称,也可使用一个简单名称,但在游戏中,因为资源很多,为防止资源重名,我们要使用带路径资源名。
2,资源更新完毕,游戏运行,当需要加载" assets/res/pictures/grass.png"这张图片时,根据这个路径名去 asset_2_bundle.txt中去查找对应的AB包名,然后再根据AB包名去rep.db中查找AB包在安卓上的绝对路径名(持久化目录下),然后createBundleFromefile创建这个AB包,并缓存它。然后用AB.LOADASSET("assets/res/pictures/grass.png")加载资源,
因为assets/res/pictures/grass.png这个资源名是我们在打AB包时指定的,因此AB可以找到它
可以借助AssetBundle类中Load相关的方法,如下图所示,可以实现加载AB包。
相关问题推荐
很简单啊,勾选了静态属性的缘故!
Unity已经成为游戏程序员中越来越受欢迎的游戏引擎。这是因为Unity直接支持多种平台,如移动、桌面和控制台环境。此外,对于低收入开发者或工作室来说,它是免费使用的。Unity支持多种技术和组件。一些关键部件是灯光和照明技术。在Unity中,你可以通过模拟复...
修改Light组件中的Intensity的值即可.
1.在Asset store里选择一个skybox。 2.从素材库中选择一个人物角色,也可以自己建模或者在其他软件中做好再导进来。 3.想好角色如何运动,然后用自己比较熟悉的语言编写来作展示,这段代码可以实现当你按下键盘上的A/D/S/W的按键时,角色会向前后左右四个方向的...
开发是开发,美术是美术,不过一般情况下可以不精通,最好能熟练就行。要是想学习Unity3D游戏开发,可以没有美术功底,但要是会写语言就会好学些。
unity更容易上手一些,因为虚幻用的是C++,unity用的是C#,学习C#的成本比C++的成本要小一些,不过虚幻对一些功能封装的比较人性化一些.
在层级视图中点击右键,在Light菜单下选择所需要的灯光类型即可.给物体上添加灯光组件,选择所需要的灯光即可.
把场景中不参与运动的物体设置成静态的.点击window菜单下的Navigation界面,调整好参数,在场景中烘焙出可供行走的路面给场景中要使用导航的物体添面导航网格代理组件在脚本中获取导航风格代理组件对象,调用方法即可...
毕竟占领手游市场,还是挺好找工作的~
很简单,举个粒子,比如想要更改发射粒子范围的半径var mshape = particle .GetComponent ().shape;mshape.radius = 0.8f;这样赋值就可以更改了。
转载的,写的十分详细1,当你给模型UVW处理完后保存UV为*.uvw文件.Create new uvw and change it to channel 2. Load the uvw you created earlier. This give you better result than using automatic uvw.2,创建一个新的uvw并改变它的通道为2.载入你刚才创建...
每种类型的脚本,都有两种类型的参数:ReadOnly 和ReadWrite,在脚本中可以使用 this.Variables.VariableName 来获取或设置参数变量的值
1.创建test.sh 文件2.编辑test.sh 文件3.指定脚本执行的shell类型4.写入脚本内容,这里输出一段文字,保存退出编辑器5.执行脚本
Text控件主要的功能是用来显示文字的,游戏中的分数,等级等所显示的文字,都是用它显示的,另外它还支持富文本和格式化字符串.
脚本的名字要和脚本里面类的名字保持一致,否则添加不到物体上,另外当修改脚本里面代码的功能后,物体上的功能也会发生相对应的改变.