2013-03-18 19:28:43 TinyHum 阅读数 9472

出于各种原因,我们有可能会遇上需要卸载unity3d,重新安装一个不同版本的licence。这个时候,新unity3d会在重新安装后出现无法激活的现象。下面是相关的步骤,能解决这个问题:


1,卸载unity

2,删除这个文件夹

  • WinXP/Vista: C:/Documents and Settings/All Users/Application Data/Pace Anti-Piracy/License Files
  • Win7: C:/ProgramData/PACE Anti-Piracy/License Files (2014年2月29日更新,现在的位置在C:/ProgramData/Unity下,如果前面的路径没有,看这个路径)
  • Mac: HD/Library/Application Support/PACE Anti-Piracy/License File
然后重启动,安装新的unity3d,用上新的licence就可。

2013-03-13 14:16:25 AnYuanLzh 阅读数 2628

通常在变换场景后,上个场景中除了使用 DontDestroyOnLoad() 保留的物件,将会被释放掉,但如果在没有变换场景的情形下,想把未使用的资源卸载掉,该如何做呢?

一般情况下,我们会利用 Unity 的编辑器来部属每个关卡或场景中的物件,这些物件在载入场景后都是必要的,也不太会持续增加物件数,在关卡结束后即转换到下个场景,所以原本场景中的物件 将不再需要,所以 Unity 将会自动将前一场景的物件都销毁掉,所以我们通常不太需要去管理记忆体的使用或是否释放,但如果你的游戏全部是在单一个场景中运行的,那麼物件的產生、销 毁、释放资源等等的动作就变得格外重要。

我做了一个宝石类型的游戏,画面上除了 GUI 及背景外就只有宝石,所以我事先将宝石做成 Prefabs ,在需要时利用 Instantiate() 產生,我在不同的关卡利用 renderer.material.mainTexture 变更背景图,利用 GetComponent(MeshFilter).sharedMesh 变更宝石的形状以及利用 renderer.material.color 变更宝石顏色,如此一个Prefabs 可以重复无限使用,所以在游戏场景中只设置了简单几个场景物件,在这种场景不需要变化太多的情况下,每个关卡都换场景重新配置一样的物件似乎有点多餘,所 以这个游戏便只有一个场景,在需要时產生宝石,然后再视情况使用 Destroy() 销毁掉,这样看起来只要在產生宝石时控制画面上的物件数量,那麼也就不用担心记忆体使用过量或没释放掉的问题。

但是,这个游戏在连续玩好几个关卡后,也就是连续玩一段时间后,会发生停顿或画面变慢的问题,游戏刚开始玩时是相当顺畅的,但长时间执行将使效能降低,直 觉上的判断应该是记忆体累积到一定程度造成的,每个物件在不使用时都使用 Destroy() 销毁掉,那麼,堆积的记忆体是从哪裡来的呢?
打开 Profiler 视窗看看,会发现其中的 Memory 的 Total Object Count 数值,不断的增减变化,但随着时间的增加会慢慢的往上累积,查看官网 (http://unity3d.com/support/documentation/Manual/Profiler.html) 是这样说的 “If this number rises over time then it means your game is creating some objects that are never destroyed.”,有些物件未销燬,很奇怪吧!都有使用 Destroy(),那為何还有未销毁的物件?其实,主要是因為我这裡有对 renderer.material 设置改变其内容,在这个执行时期并不会真的去改变 Project 中的 material,而是產生这个物件实例(instance) 的材质实例以供该物件使用,所以如果只是 Destroy(gameObject) 的话,将会残留部份物件数,每个產生的物件都残留一点点的话,慢慢的长时间下来将会累积相当多,记忆体将会不敷使用,所以在 Destroy(gameObject) 的同时,应该也要 Destroy(renderer.material) 才行。

如果程式结构简单,给物件使用的 Script 档案也不多的话,也许多加一句并不困难,但我们有时候无法确定是否有在适当时机為每个物件做到完整的销毁,也许还有残留别的东西也会有这种情形持续累积记 忆体,这时又该寻找更简单统一的方法了,於是我们可以在每个关卡开始前或结束时执行一句 Resources.UnloadUnusedAssets() ,让 Unity 自行去卸载掉不使用的资源,如此在平时物件销毁时,我们已经先行释放掉大部份不使用的资源,然后再由 Resources.UnloadUnusedAssets() 卸载我们未清理掉的部份,如此的话查看 Profiler 视窗的 Memory 的 Total Object Count 数值就可以维持在一定范围内起伏,而不再随着时间增加,当然我们在关卡设置上都会有难度上的差异,在某些关卡裡,玩家可能必须花较多时间才能完成关卡,所 以如果我们只在关卡开始或结束时使用 Resources.UnloadUnusedAssets() 也许会不够,此时也可另外定义每过一段时间就执行 Resources.UnloadUnusedAssets() ,如此将可避免掉系统资源不足的问题。



来处:http://www.comedreams.com/index.php/archives/41105

2019-09-22 14:05:19 fengliaoai 阅读数 12194

每周更新unity3d视频教程,从入门到就业,官方unity3d培训,上千门实时更新课程,供学员在线观看学习,unity3d游戏开发,可以让学员随时随地学习!
免费网上学习unity3d自学教程,国内名师机构专业授课,O基础快速学习,1小时快速入门,7天unity3d自学教程学习,能力快速提升,优质作品随手呈现!

unity3d菜鸟自学教程介绍

unity3d难学吗?

unity3d自学教程目录

unity3d视频教程百度网盘下载

unity3d难学吗?
学习unity3d特效,多来学习路线网看教程,一线游戏特效老师,游戏特效就业安排!学习unity3d特效入门+进阶+精通选择专业才能学得专业!

unity3d自学教程目录
课程介绍:
Unity3d史诗 MMO ARPG 课程《泰斗破坏神》,精心设计将包含200+课时,由视频课时+直播课时+测试课时混合组成。最重头unity3d ARGP课程,完整的 ARPG 网络游戏开发教学。包含多人合作,在线多人游戏开发,角色创建系统,作战系统,RPG系统,技能系统,任务系统,商店系统。

课程大纲:

单机版功能实现

项目概要
登录系统
角色创建、选择、自定义系统
场景加载与游戏存储记录
角色控制
聊天通讯
游戏AI
战斗系统
游戏角色与玩家信息系统
商店系统
道具系统
装备系统
装备与道具掉落
仓库与背包系统
副本系统
任务系统
地图与寻路系统

网络版功能实现

服务端搭建
登录系统
角色选择
游戏场景
聊天功能
角色具体信息
商店系统
道具系统
装备系统
仓库和背包
副本系统
任务系统

unity3d视频教程百度网盘下载
http://www.xuexiluxian.net/unity3d-cainiao-zixue.html

2018-12-17 19:12:13 tubugs 阅读数 107

自学笔记,仅供参考。



		string path = "AssetBundles/cubewall.unity3d";

		//本地同步加载
		AssetBundle ab = AssetBundle.LoadFromFile ("AssetBundles/share.unity3d"); //要先加载所依赖的资源
		AssetBundle ab2 = AssetBundle.LoadFromFile (path);
		//本地异步加载,需要协程
		AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync (path);
		yield return request;
		AssetBundle ab = request.assetBundle;

		//内存异步加载,需要协程
		AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync (File.ReadAllBytes (path));
		yield return request;
		AssetBundle ab = request.assetBundle;
		//内存同步加载
		AssetBundle ab = AssetBundle.LoadFromMemory (File.ReadAllBytes (path));

		//通过WWW加载,已被Unity弃用
		while (!Caching.ready)
			yield return null;
		WWW www = WWW.LoadFromCacheOrDownload (@"file:///G:\unity\Project\AssetBundleLearn\AssetBundles\CubeWall.unity3d",1);
		WWW www = WWW.LoadFromCacheOrDownload (@"http://localhost/AssetBundles/CubeWall.unity3d",1);
		yield return www;
		if (!string.IsNullOrEmpty (www.error))
		{
			Debug.Log (www.error);
			yield break;
		}
		AssetBundle ab = www.assetBundle;

		//使用UnityWbeRequest加载
		string uri = @"file:///G:\unity\Project\AssetBundleLearn\AssetBundles\CubeWall.unity3d";
		//服务器端地址
//		string uri = @"http://localhost/AssetBundles/CubeWall.unity3d";
		UnityWebRequest request = UnityWebRequest.GetAssetBundle (uri);
		yield return request.SendWebRequest ();
		//两种方法
//		AssetBundle ab = DownloadHandlerAssetBundle.GetContent (request);
		AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;

		//实例化资源
		GameObject wallPrefab = ab.LoadAsset<GameObject> ("CubeWall");
		Instantiate (wallPrefab);

                //通过Manifest加载依赖资源
		AssetBundle manifestAB = AssetBundle.LoadFromFile ("AssetBundles/AssetBundles");
		AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest> ("AssetBundleManifest");

		string[] strs = manifest.GetAllDependencies ("cubewall.unity3d");
		foreach (string name in strs)
		{
			print (name);
			AssetBundle.LoadFromFile ("AssetBundles/" + name);
		}
		foreach (string name in manifest.GetAllAssetBundles())
			print (name);

没有更多推荐了,返回首页