查看: 2906|回复: 7
打印 上一主题 下一主题

[其他] 2D纹理和Movie纹理 (转载)

[复制链接]

711

主题

10

听众

5805

积分

高级设计师

Rank: 6Rank: 6

纳金币
2954
精华
3

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-7-23 00:32:17 |只看该作者 |倒序浏览

使用GUI的方式来显示纹理。在《Unity权威指南》中,脚本使用的是JS脚本。现在这篇文章中主要是给出C#的脚本。
下面是代码:

  • using UnityEngine;
  • public class showTexture : MonoBehaviour {
  • private Texture2D oneTexture;
  • private Texture2D[] allTexture; //这里可以写成和书上一样的Obeject[],但是要在后面的GUI.DrwaTexture方法中使用强制转换
  •     void OnGUI()
  •     {
  •         //和JS代码不同,这里需要new一个Rect对象
  •         if (GUI.Button(new Rect(0,20,100,60),"loadOneTexture"))
  •         {
  •             if (oneTexture == null)
  •             {
  •                 oneTexture = Resources.Load("oneTexture/Grass") as Texture2D;
  •             }
  •         }
  •         if (GUI.Button(new Rect(0, 140, 100, 60), "loadAllTexture"))
  •         {
  •             if (allTexture == null)
  •             {
  •                 //这里需要这是泛型为Texture2D
  •                 allTexture = Resources.LoadAll<Texture2D>("allTexture");   //如果上面定义的是Object[]则不需要使用泛型
  •             }
  •         }
  •         if (oneTexture != null)
  •         {
  •             GUI.DrawTexture(new Rect(110, 20, 120, 120), oneTexture, ScaleMode.StretchToFill, true, 0);
  •         }
  •         if (allTexture != null)
  •         {
  •             for (int i = 0; i < allTexture.Length; i++)
  •             {
  •                 GUI.DrawTexture(new Rect(110 + i * 120, 140, 120, 120), allTexture, ScaleMode.StretchToFill, true, 0);//如果上面定义的是Object[]在这里要进行强制转换成Texture2D
  •             }
  •         }
  •     }
  • }

以上代码中,用红笔标出的地方就是C#脚本和JS脚本所不同的地方。

总结:
1、第5行代码,需要声明一个类型为Texture2D的数组allTexture。这里和JS脚本不同的地方是JS脚本中用的是Object数组。

2、第8、15、24、30中都需要使用new关键字实例化一个Rect(矩形)。JS脚本中则不需要new。

3、第19行代码,需要使用LoadAll<T>()方法,在尖括号中指定泛型的类型为Texture2D。

4、第12行代码,需要使用as Texture2D来把加载到得数据执行转换成Texture2D。

5、在上面的代码中,关键的方法主要有三个。这里要先说明一下Resource类,Resource类允许我们去发现和获取一个包含资源中的对象。
第一个方法Resource.Load(string path),用于加载一个存储在Resource文件路径下的资源。参数为目标文件的路径名。
第二个方法Resource.LoadAll<T>(string path),用于加载所有储存在Resource文件路径下的资源或文件。参数同样为目标文件的路径名。
第三个方法GUI.DrawTexture(Rect positon, Texture image, ScaleMode scaleMode, bool alphaBlend, float imageAspect),用于在一个矩形的范围内绘制一个纹理。第一个参数用于设置一个矩形的x坐标,y坐标,宽,高。第二个参数用于设置一个纹理去展示。第三个参数用于怎么去按比例排列(缩放)这个纹理当它的宽高比不能够适应这个绘制的范围时。第四个参数是布尔类型,表示是否应用alpha blending(α混合 我也不知道这样子翻译准不准确,这个是一种让3D物件产生透明感的技术)来绘制这个图片。第五个参数表示图片的宽高比,0是默认值,表示使用图片的宽高比。

6、还有一个方法GUI.Button(Rect positon,string text)。该方法用于产生一个按钮,单击它会立即发生一些事件。第一个参数和GUI.DrawTexture的第一个参数表示的相同,第二个参数表示的是显示在按钮上的文字。这个方法还有另外4中重载,具体的内容需要参考官方的文档。

7、最有一点要注意的就是,我们要显示的纹理需要放到指定的Resource文件夹中。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

7

主题

1

听众

715

积分

初级设计师

Rank: 3Rank: 3

纳金币
259
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-7-23 02:05:31 |只看该作者
谢谢分享! C#
回复

使用道具 举报

115

主题

3

听众

5676

积分

高级设计师

Rank: 6Rank: 6

纳金币
7268
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2014-7-23 09:56:32 |只看该作者
谢谢分享!
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-7-23 16:00:18 |只看该作者

谢谢分享!
回复

使用道具 举报

7

主题

0

听众

2518

积分

中级设计师

Rank: 5Rank: 5

纳金币
317
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2014-7-23 16:25:01 |只看该作者
感謝刀鋒狼大人教學
回复

使用道具 举报

wucnj    

1

主题

1

听众

3160

积分

中级设计师

Rank: 5Rank: 5

纳金币
1065
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2014-7-23 16:38:38 |只看该作者
感谢分享!!!
回复

使用道具 举报

16

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2014-7-25 22:15:45 |只看该作者
学习了, 多谢俄
回复

使用道具 举报

0

主题

2

听众

3482

积分

中级设计师

Rank: 5Rank: 5

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2014-7-25 23:06:21 |只看该作者
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-15 20:51 , Processed in 1.543021 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部