2014-07-04 11:27:23 hackdjh 阅读数 5169
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

Unity3D另类录制视频,每帧都截取屏幕的图片,可以用这种形式来录制

01 using UnityEngine;
02   
03 public class ScreenshotMovie : MonoBehaviour
04 {
05     // The folder we place all screenshots inside.
06     // If the folder exists we will append numbers to create an empty folder.
07     public string folder = "ScreenshotMovieOutput";
08     public int frameRate = 25;
09     public int sizeMultiplier = 1;
10   
11     private string realFolder = "";
12   
13     void Start()
14     {
15         // Set the playback framerate!
16         // (real time doesn't influence time anymore)
17         Time.captureFramerate = frameRate;
18   
19         // Find a folder that doesn't exist yet by appending numbers!
20         realFolder = folder;
21         int count = 1;
22         while (System.IO.Directory.Exists(realFolder))
23         {
24             realFolder = folder + count;
25             count++;
26         }
27         // Create the folder
28         System.IO.Directory.CreateDirectory(realFolder);
29     }
30   
31     void Update()
32     {
33         // name is "realFolder/shot 0005.png"
34         var name = string.Format("{0}/shot {1:D04}.png", realFolder, Time.frameCount);
35   
36         // Capture the screenshot
37         Application.CaptureScreenshot(name, sizeMultiplier);
38     }
39 }

当然了。其实还有一个插件可以录制视频

http://download.csdn.net/detail/hackdjh/7591423


2015-01-25 22:22:47 book_longssl 阅读数 4175
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚


2.制做一张灰度图:

需求:Photoshop 
          GIMP

先Google 搜 WorldMap-A_non-Frame.png  这个地图下载一张到你pc

然后gimp打开它, 右键图片,弹出菜单——选择——按颜色

这张图的好处在于海洋就是几种蓝色,按照颜色分别  左键 选取这几个蓝色,按下delete键删除颜色,清理干净后如图


然后 菜单栏 图像——模式——灰度
然后 菜单栏  颜色——反向
保存,用ps打开它,,,,用 滤镜——模糊——高斯模糊

有个问题需要注意!图像必须是边长相等的正方形!

做完,这个地图的灰度图一定要  点菜单栏 的编辑——变换——水平变换  (你肯定问为啥要这样!地图反了?对,反了,因为导入raw后会水平翻转,所以你要翻转高度图进引擎才是正的。)
保存为.raw

3.地形

运行,前面怎么可以找找教程,创建完工程后,新的场景里,我们开始地图工作, 左上角找到Create ,菜单里面选 Terrain.



于是我们得到了一个地形,如下图,找到那个齿轮图标

我们叫这个图标设置,其他我们不管,找下面的Resolution

然后Wides 宽度 Length长度 都设置为高度图的边长像素,也就是图片的长宽

Height可以随时调节,是地图的最大高度。

然后下面的Import raw...导入咱的高度图,然后弹出小窗口,其他别动,把默认的mac设置为windows.然后import,然后我们的地形就进去了。




调整到你认为合适吧,然后我们说下如何导出为 obj格式的。。。
这个我们需要导出脚本了:http://wiki.unity3d.com/index.php?title=TerrainObjExporter

用法我简单说下吧,懂英语的可以看懂上面网址里面说的用法。
如下图那是个管理资源的窗口,右侧那个大窗口的空白部分右键一下,菜单里点show in explorer  你发现资源管理器能打开一个文件夹,没错这是在你电脑文件夹里都有的(这一行文字只是让你了解构造。。。
so。。右键右侧空白部分,菜单里点 create....然后选 c# script 或  java script

然后如果你用c#了,刚才那个地址里的你就复制c的代码,往里面粘贴(新脚本都有几行代码,全删掉然后再粘贴。) JS 就粘贴JS的。




然后的菜单栏的就会多一个Terrain选项,点一下选 Export to obj....

然后没什么了。。。。
    export format  为Triangles    三角形默认的不用碰

    resolution 很重要: 
                           Full  当前地形网格的完整面数
                           Half 当前地形网格面数的一半
                           Quarter  四分之一
                           Eighth    八分之一
                           Sixteenth 十六分之一


注意: obj地图模型要先导入max,再往max导入一个native的地图的obj(别问我怎么把骑砍地图弄obj导出),对比着骑砍的地图obj旋转 移动 ,校准网格坐标。然后往编辑器导入才能正确。 

矫正坐标后导出obj到你的编辑器的map data里,然后编辑器就能导入了。。。。

一般导出后进max看看有几十万面以上的就不要导入编辑器了。。。。

细节大家自己摸索摸索吧

还有如果对手绘地图比较偏好的同学,你们可以结合着地图编辑器和unity用,具体你们看看。
但是纯属手绘的虽然细节你很爽,但是面数你会不爽。。。。


有些基础的东西我没说那么详细,不过摸索下就会了



补俩截图: 



2013-02-21 17:26:53 asd237241291 阅读数 11376
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

做PC端虚拟现实项目,build之后都会生成两个文件(一个exe文件和一个_data)文件,而且路径还不支持中文,很不方便。其实可以用window自带的压缩包的方法把这两个文件合并成一个文件。

首先选中这两个文件-->右键-->选择“添加到压缩文件”


”压缩文件格式“选择 --> ZIP 压缩选项选中 “创建自解压格式压缩文件” 。


选项卡中选择“高级”


选中“后台压缩” --> 打开“自解压选项”


1.常规:“解压后运行” 处填写 需要启动的exe文件名

2.模式:选中"全部隐藏"

3.更新:选中“仅更新已存在文件”和“跳过已存在的文件”

4.文本和图标:可更换ICON



然后就可以了~


2016-05-09 10:08:10 u014261855 阅读数 5198
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

Unity3d本地上传并且裁剪图片-----pc平台

注:引擎版本unity4.x

最近项目需求,需要做用户头像,要求:

1.  可以从本地上传

2.  本地裁剪

3.  压缩控制大小

4.  在三个平台实现PC/Android/IOS

弄了好几天总是搞完了总结一下

 

按照需求一步一步做

第一步:从本地上传

    从本地上传文件要用到winform库,从unity引擎安装目录下找到System.Windows.Form.dll导入到项目的Plugins目录下。

    通过以下几步实现打开文件夹并选择文件的功能:

//创建窗口对象

  OpenFileDialog ofd = newOpenFileDialog();

 

//操作设置----设置文件格式筛选
  ofd.Filter = "所有文件(*.*)|*.*|png文件|*.png|jpg文件|*.jpg";   

    

//操作设置----起始目录

ofd.InitialDirectory="d:\\";              

   

//打开文件夹目录,选择文件
  DialogResult resurt = ofd.ShowDialog();


  if (resurt == DialogResult.OK)
  {

//ofd.FileName是得到选择文件的地址 OpenFile是对它裁剪的入口
  OpenFile(ofd.FileName);

}

 

 

第二步:本地裁剪

裁剪分为两步,1.确定裁剪范围  2.截图

 

1. 确定裁剪范围

DataPath是文件操作路径

#if UNITY_STANDALONE_WIN

        DataPath = UnityEngine.Application.streamingAssetsPath;

#else

        DataPath =UnityEngine.Application.persistentDataPath;

#endif

 //得到文件路径后开始操作

publicvoid OpenFile(string filename) {

        // HeadTexture 是NGUI纹理对象UITexture

        byte[]texture = File.ReadAllBytes(filename);//读取图片字节流

        File.WriteAllBytes(DataPath+ "/temp.jpg", texture);//保存在项目目录下,这么操作是因为www读取项目目录外的文件报错

        WWWwwwTexture = newWWW("file://" + DataPath + "/temp.jpg");//读取文件

        HeadTexture.mainTexture =wwwTexture.texture;//得到读取的纹理

        int width =wwwTexture.texture.width;

        int height= wwwTexture.texture.height;

        //这里根据具体要求显示,太小的图片放大,太大的缩小

        if (width <= 800&& height <= 800)

        {

            if (height > width)

            {

                HeadTexture.height = 800;

                HeadTexture.width = width * 800/ height;

            }

            else

            {

                HeadTexture.width = 800;

                HeadTexture.height = height *800 / width;

              

            }

        }

        elseif (width <= 1000&& height <= 1000)

        {

            HeadTexture.width = width;

            HeadTexture.height = height;

        }  

        else

        {

            if (height > width)

            {

                HeadTexture.height = 1000;

                HeadTexture.width = width *1000 / height;

            }

            else

            {

                HeadTexture.width = 1000;

                HeadTexture.height = height *1000 / width;

           }

        }

}

在显示纹理的上,用户进行截图操作的功能比较简单,不涉及引擎外的功能,就在这写了

 

2.截图

选取好范围后把这个范围内的内容截屏,这个一定要开启协程,在每帧刷完之后开始截屏

用法:StartCoroutine(DoScreenShot());

IEnumeratorDoScreenShot()

    {

        Rect rect = newRect(left,Top, width, height);

/*

创建Rect对象,在cocos2d里的参数left和Top是截取点距离屏幕左边和顶部的距离,但我这样赋值的时候报错了,后来发现在unity3d里,left和Top就是起始点的坐标x和y,也就是距离左边和下边的距离,width和height是一样的,截取的范围,这里需要注意,这个坐标一定要转换成屏幕坐标,在NGUI是这样转换的

UICamera.currentCamera.WorldToScreenPoint(MaskTop.transform.position)

没用NGUI的话直接用Camera对象转换即可

*/

        //创建截屏纹理

Texture2D screenShot = newTexture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);

        yieldreturnnewWaitForEndOfFrame();

        //截图并保存为纹理

        screenShot.ReadPixels(rect, 0, 0); 

        screenShot.Apply();

        //转换成字节流并保存在本地

        byte[] bytes= screenShot.EncodeToJPG();

        stringfilename = DataPath + "/dlhead.jpg";

        File.WriteAllBytes(filename,bytes);

        //需要显示就用WWW加载显示

        //然后把这个字节流上传到服务器就行啦

    }

 

第三步:文件压缩

开始花了点时间做文件压缩,做好以后发现这个截图下来的文件大小很合适,就没用,而且压缩代码也很长就不这里写啦

 

Android和IOS我会分别写一篇博客的


2014-03-04 11:26:53 hackdjh 阅读数 10230
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

 一共有两种方法下载AssetBundles数据资源:

第一种是无缓存:这种方法直接使用WWW类,下载完的数据不会在本地unity3d的缓存目录中进行保存。

第二种有缓存:使用WWW.LoadFromCacheOrDownload的方法,下载完的数据将在unity3d的本地缓存目录中进行保存。

Web浏览器通常允许缓存大小达到50MB,PC和MAC的本地应用,IOS和Android应用都允许缓存达到4GB大小。

官方提供缓存的服务,需要RMB的。很贵。基本不会买的。


首先建立AssetBundles

下面是创建.assetbundle文件的脚本

using UnityEngine;
using System.Collections;
using UnityEditor;

public class AssetBundleTest : Editor
{
	
	[MenuItem("Custom Editor/Create AssetBunldes Main")]
	static void CreateAssetBunldesMain ()
	{
        //获取在Project视图中选择的所有游戏对象
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
 
        //遍历所有的游戏对象
		foreach (Object obj in SelectedAsset) 
		{
			//本地测试:建议最后将Assetbundle放在StreamingAssets文件夹下,如果没有就创建一个,因为移动平台下只能读取这个路径
			//StreamingAssets是只读路径,不能写入
			//服务器下载:就不需要放在这里,服务器上客户端用www类进行下载。
			string targetPath = Application.dataPath + "/StreamingAssets/" + obj.name + ".assetbundle";
			if (BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)) {
  				Debug.Log(obj.name +"资源打包成功");
			} 
			else 
			{
 				Debug.Log(obj.name +"资源打包失败");
			}
		}
		//刷新编辑器
		AssetDatabase.Refresh ();	
		
	}
	
	[MenuItem("Custom Editor/Create AssetBunldes ALL")]
	static void CreateAssetBunldesALL ()
	{
		
		Caching.CleanCache ();
 

		string Path = Application.dataPath + "/StreamingAssets/ALL.assetbundle";
 
		
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
 
		foreach (Object obj in SelectedAsset) 
		{
			Debug.Log ("Create AssetBunldes name :" + obj);
		}
		
		//这里注意第二个参数就行
		if (BuildPipeline.BuildAssetBundle (null, SelectedAsset, Path, BuildAssetBundleOptions.CollectDependencies)) {
			AssetDatabase.Refresh ();
		} else {
			
		}
	}
	
	[MenuItem("Custom Editor/Create Scene")]
	static void CreateSceneALL ()
	{
		//清空一下缓存
		Caching.CleanCache();
		string Path = Application.dataPath + "/MyScene.unity3d";
		string  []levels = {"Assets/Level.unity"};
    	//打包场景
    	BuildPipeline.BuildPlayer( levels, Path,BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);
		AssetDatabase.Refresh ();
	}
	
}




   下面是不含缓存的代码:

using System;
using UnityEngine;
using System.Collections; 
public class Example : MonoBehaviour {
  public string URL;
  IEnumerator Start() {
  	WWW www = new WWW(URL);
        yield return www;
        AssetBundle bundle = www.assetBundle;
        Instantiate(bundle.mainAsset);
        bundle.Unload(false);
  
  }
}


   下面是含缓存的代码,系统建议利用WWW.LoadFromCacheOrDownload类进行下载:

using System;
using UnityEngine;
using System.Collections; 
public class Example : MonoBehaviour {
  public string URL;
  IEnumerator Start() {
  	WWW www = WWW.LoadFromCacheOrDownload(URL, 1);
        yield return www;
        AssetBundle bundle = www.assetBundle;
        Instantiate(bundle.mainAsset);
        bundle.Unload(false);
  
  }
}

CSDN博客真搞不懂啊。

下面都是什么东西啊。


















                                

unity3d开发环境搭建

阅读数 3959

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