Unity 导入图片安卓和IOS自动转换格式ETC2或者ASTC

话不多说 直接上代码
原理就是 每次导入图片会触发OnPreprocessTexture() 做一次判断处理一下
但是每次图片改变都会调用 OnPreprocessTexture() 这个函数
如果防止频繁调用 自己加个标签记录一下吧(这里偷懒就不写了 (●’◡’●))

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Reflection;

public class TextureSetting : AssetPostprocessor {

	private void OnPreprocessTexture()
	{
		TextureImporter importer = (TextureImporter)assetImporter;
		SetPicFormat (importer);
	}

	public static void SetPicFormat(TextureImporter imp)
	{
		//判断图片大小
		int width = 0;
		int hight = 0;
		GetTextureSizeByImp (imp, out width, out hight);
		Debug.LogErrorFormat ("term test cur image  width: {0}  hight: {1}",width,hight);
		int sizeType = FitSize (Mathf.Max (width, hight));
		if (imp.DoesSourceTextureHaveAlpha ()) 
		{
			//ios
			imp.SetPlatformTextureSettings ("iphone", sizeType, TextureImporterFormat.ASTC_RGBA_6x6);
			//android
			imp.SetPlatformTextureSettings ("Android", sizeType, TextureImporterFormat.ETC2_RGBA8);
		} 
		else 
		{
			//ios
			imp.SetPlatformTextureSettings ("iphone", sizeType, TextureImporterFormat.ASTC_RGB_6x6);
			//android
			imp.SetPlatformTextureSettings ("Android", sizeType, TextureImporterFormat.ETC2_RGB4);
		}

	}

	static int[] formatSize = new int[]{ 32, 64, 128, 256, 512, 1024, 2048, 4096 };
	static int FitSize(int picValue)
	{
		foreach (var one in formatSize) 
		{
			if (picValue <= one) 
			{
				return one;
			}
		}

		return 1024;
	}


	static void GetTextureSizeByImp(TextureImporter imp, out int width,out int hight)
	{
		object[] args = new object[2]{ 0, 0 };
		MethodInfo mi = typeof(TextureImporter).GetMethod ("GetWidthAndHeight", BindingFlags.NonPublic | BindingFlags.Instance);
		mi.Invoke (imp, args);
		width = (int)args [0];
		hight = (int)args [1];
	}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity是一款跨平台的游戏引擎,也可以用于制作轮播图等应用。在Unity中,图片自动轮播可以通过使用Slider组件和Image组件实现。 首先,在Hierarchy中创建一个Slider对象,并将其命名为“ImageSlider”。然后,在Inspector中将Slider的Min Value和Max Value都设置为0,将Value设置为0.5。 接下来,在“Canvas”下创建一个Image对象,并将其命名为“Image”。在Inspector中,将Image的“Source Image”设置为需要轮播的第一张图片。 然后,在Script中使用InvokeRepeating函数实现自动轮播。定义一个数组存储需要轮播的图片,在Start函数中使用InvokeRepeating函数调用自定义的RotateImages函数,设置初始延迟为0,周期时间为2秒。 RotateImages函数中,每次调用改变ImageSlider的Value值,从而切换当前显示的图片。如果Value值为1,则将Value值重新设置为0,从而将轮播回到第一张图片。每次切换图片时都需要更新Image组件的“Source Image”属性,将其设置为当前需要显示的图片。 完成以上步骤后,保存脚本并运行程序即可实现图片自动轮播功能。 总之,Unity图片自动轮播功能可以通过Slider组件和Image组件的配合使用来实现。通过编写脚本完成轮播逻辑,同时设置周期时间,就可以方便地实现多张图片自动切换,从而让程序更加美观和实用。 ### 回答2: Unity是一款非常强大的游戏引擎,在实现Unity图片自动轮播的功能方面,可以通过以下步骤: 首先,需要导入图片资源,并将它们放置在一个空的GameObject上。 其次,需要使用Unity自带的InvokeRepeating函数来实现自动轮播的功能。该函数可以重复执行你所指定的方法,实现循环轮播的效果。在这个方法中,可以通过代码控制图片的切换,例如通过设置texture、sprite等方式实现。 另外,为了实现更加流畅的轮播效果,可以使用Lerp插值函数来过渡图片的切换过程。该函数可以让图片的过渡更加自然,避免了突兀的跳过效果。 在以上几个步骤的基础上,可以根据自己的需求和实际情况对Unity图片自动轮播做出更为细致的调整和优化。 需要注意的是,在实现Unity图片自动轮播的过程中,需要注意内存的使用以及图片资源的大小。为了避免内存溢出和程序崩溃的问题,建议尽可能地减小图片资源的大小,并进行必要的资源优化和管理。 ### 回答3: Unity是一个强大的游戏开发引擎,不仅可以制作游戏,还可以用来做多媒体展示等等。在Unity中,要实现图片自动轮播非常简单。本篇文章将为大家介绍Unity中如何实现图片自动轮播。 首先,在Unity中,我们需要一个图片容器,可以用RawImage来实现。然后,将需要轮播的图片打包成一个Texture,以便我们可以方便地进行控制。接着,我们需要在代码中实现对这些图片进行控制。我们可以用一个数组来存储图片,然后使用一个计时器来控制图片的显示。最后,我们将计时器的时间间隔调整到自己需要的时间,就可以实现图片的轮播了。 具体实现过程如下:创建一个新的Unity场景,将需要自动轮播的图片拖入到场景中。然后,在画布上添加一个RawImage用来显示图片。创建一个空的GameObject作为父物体,并将RawImage放置在父物体下。重复以上步骤来载入所需的图片。 现在开始编写脚本。首先,我们需要定义一个类来实现图片自动轮播的计时器。在这个计时器类中,我们声明一个数组用来存储所有要轮播的图片。我们还需要一个变量来存储当前显示的图片的索引。 接下来,我们需要编写代码来实现自动轮播的效果。在Start()函数中,我们将第一张图片设置为显示状态。在Update()函数中,我们将计时器时间增加。如果计时器时间大于我们设置的间隔时间,我们将当前的图片设置为隐藏状态,然后显示下一张图片的状态。 最后,我们需要在场景中添加一个空的GameObject,并将我们创建的脚本作为其组件。我们将所有要轮播的图片拖拽到该脚本的数组中,并将RawImage作为子物体放置在该空物体下。 这样,我们就完成了Unity图片自动轮播的功能实现了。虽然实现时需要定时器等一些技巧,但总体来说并不难。只要我们按照以上步骤进行,就能轻松实现图片自动轮播。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值