运行时更换天空盒材质的贴图
效果:用户可以自定义给天空盒更换自己喜欢的贴图
条件:场景天空盒的材质shader选择Skybox/Panoramic.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using VRM;
using System.Diagnostics;
using System.Threading;
using Debug = UnityEngine.Debug;
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenFileName
{public int structSize = 0;public IntPtr dlgOwner = IntPtr.Zero;public IntPtr instance = IntPtr.Zero;public String filter = null;public String customFilter = null;public int maxCustFilter = 0;public int filterIndex = 0;public String file = null;public int maxFile = 0;public String fileTitle = null;public int maxFileTitle = 0;public String initialDir = null;public String title = null;public int flags = 0;public short fileOffset = 0;public short fileExtension = 0;public String defExt = null;public IntPtr custData = IntPtr.Zero;public IntPtr hook = IntPtr.Zero;public String templateName = null;public IntPtr reservedPtr = IntPtr.Zero;public int reservedInt = 0;public int flagsEx = 0;
}public class LocalDialog
{//链接指定系统函数 打开文件对话框[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);public static bool GetOFN([In, Out] OpenFileName ofn){return GetOpenFileName(ofn);}//链接指定系统函数 另存为对话框[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]public static extern bool GetSaveFileName([In, Out] OpenFileName ofn);public static bool GetSFN([In, Out] OpenFileName ofn){return GetSaveFileName(ofn);}
}public class TestData : MonoBehaviour
{bool isLoadTexture = false;Texture2D texture;private void OnGUI(){if(GUI.Button(new Rect(0,0,400,60),"加载图片")){OpenFileName openFileName = new OpenFileName();openFileName.structSize = Marshal.SizeOf(openFileName);//openFileName.filter = "";openFileName.file = new string(new char[256]);//文件原始路径,格式(D:\3-图片-花.jpg)openFileName.maxFile = openFileName.file.Length;openFileName.fileTitle = new string(new char[64]);//文件名字(带格式后缀),格式(3-图片-花.jpg)openFileName.maxFileTitle = openFileName.fileTitle.Length;openFileName.initialDir = Application.streamingAssetsPath.Replace('/', '\\');//默认路径openFileName.title = "窗口标题";openFileName.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;if (LocalDialog.GetSaveFileName(openFileName)){Debug.Log(openFileName.file);Debug.Log(openFileName.fileTitle);StartCoroutine(DownloadAndSave(openFileName.file, ( progress,texture2d) => {texture = new Texture2D(4000, 2000);texture.LoadImage(texture2d);isLoadTexture = true;RenderSettings.skybox.mainTexture = (Texture)texture;DynamicGI.UpdateEnvironment();}));}}//if(isLoadTexture)//{// GUI.DrawTexture(new Rect(0, 0, texture.width, texture.height), texture);//}}public static IEnumerator DownloadAndSave(string url, Action< string, byte[]> Finish = null)//路径,名字{WWW www = new WWW(url);if (www.error != null){Debug.Log("error:" + www.error);}if (www.isDone){Debug.Log("完成了");byte[] bytes = www.bytes;Debug.Log(bytes.Length);if (Finish != null){Finish( Loading, bytes);}}}
}
运行时更换天空盒材质的贴图相关推荐
- unity保存运行时的操作_Unity运行时保存prefab的方法一则
unity编辑器在运行状态时,prefab的apply按钮就消失了,其实此时代码访问的话是有效的. 代码如下,将会给transform的右键增加一个save prefab的选项. using Unit ...
- Taro3.2 适配 React Native 之运行时架构详解
导读 由 58 前端团队主导的 Taro 3 适配 React Native 工作已完成有一段时间了.目前发布了多个体验版,也将在3月底迎来正式版.基于 Taro 的良好架构演变,适配 React N ...
- JVM运行时数据区域——为什么jdk8用元空间替换了永久代
以局部窥全局,这个问题其实很复杂,要弄清楚这个问题,首先要对JVM运行时数据区域划分以及各个数据区域的作用了和指掌. JVM运行时数据区域总览 JVM在执行Java程序的过程中(简称运行时)会把它所管 ...
- JVM学习(七):运行时数据区(精讲)
目录 一.运行时数据区概述 1.1 概述 1.2 运行时数据区中的GC和OOM 二.程序计数器(PC寄存器,Program Counter Register) 2.1 介绍 2.2 作用 2.3 特点 ...
- Unity在运行时(代码中)设置材质的渲染模式(RenderingMode)
在Unity中,有些少数情况下我们需要用代码来创建材质.比如说在材质非常多,而仅仅是纹理不一样的时候. 而用代码创建的材质是没有对应的资源文件的,我们也就无法使用Inspector来设置它的Rende ...
- JVM运行时结构、Java内存管理、JVM实例、HotSpot VM对象的创建、内存布局和访问定位
1.JVM运行时结构 Java 运行时数据区域有程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区.其中前三个线程私有,随线程生而生,线程灭而灭:后面两个是线程间共享. 1.1 程序计数器 ...
- objective-c 编程总结(第六篇)运行时操作 - 方法交换
objective-c 编程总结(第六篇)运行时操作 - 方法交换 后面主要介绍oc类的运行时行为.这里面包括运行时方法的更换,消息的转发,以及动态属性.这些对于面向方面编程AOP的热爱者还是很有用的 ...
- Dev C++可以编译但运行时提示Failed to execute且Error 0:操作成功完成。
Dev C++可以编译但运行时提示Failed to execute且Error 0:操作成功完成. 问题 代码 现象 解决办法 更换GCC 可能和杀毒用软件有关系 问题 今天来复习C语言,写了简单几 ...
- java运行库一键修复_在运行时修补Java
java运行库一键修复 本文将重点介绍如何解决与第三方库相关的问题 不能被规避 难以排除/绕过/更换 只需不提供错误修正 在这种情况下,解决问题仍然是一项艰巨的任务. 作为这种情况的诱因,请考虑对&q ...
最新文章
- SQL SERVER 架构管理
- 一文读懂Python版的十大经典排序算法(附动图演示)
- 开发网络爬虫应该怎样选择爬虫框架?
- python各个解释器的用途-常用的五种Python解释器|老男孩网络Python学习课程
- 在Jetson Xavier NX上安装torchvision编译报错:fatal error: libavcodec/avcodec.h: No such file or directory
- setTimeOut与 setInterval区别
- 谁说表单只能发get和post请求了?
- Chrome去广告插件-Adblock Plus
- wps目录怎么加一条_WPS中如何正确插入目录_WPS怎么做目录
- html中左三角怎么写,css3三角形怎么写?
- iOS时间戳与北京时间的转换
- 面试真题纠错(京东、爱奇艺)
- Java从零到企业级电商项目实战: linux环境配置
- nodejs负载均衡(一):服务负载均衡
- 棋盘放芝麻:有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量(代码)
- 不懂代码?没关系,照样可以做SaaS软件开发
- Python3初步实践教程概要
- RISC-V 架构指令集手册 第一册 无特权指令集 中文翻译
- jquery实现按钮倒数7秒后才可以点击
- 51单片机进阶案例(1)——基于MATLAB GUI的单片机串口与PC的通信实现实时时钟和双向可调时钟功能(利用DS1302时钟芯片和LCD1602液晶屏)