效果:用户可以自定义给天空盒更换自己喜欢的贴图
条件:场景天空盒的材质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);}}}
}

运行时更换天空盒材质的贴图相关推荐

  1. unity保存运行时的操作_Unity运行时保存prefab的方法一则

    unity编辑器在运行状态时,prefab的apply按钮就消失了,其实此时代码访问的话是有效的. 代码如下,将会给transform的右键增加一个save prefab的选项. using Unit ...

  2. Taro3.2 适配 React Native 之运行时架构详解

    导读 由 58 前端团队主导的 Taro 3 适配 React Native 工作已完成有一段时间了.目前发布了多个体验版,也将在3月底迎来正式版.基于 Taro 的良好架构演变,适配 React N ...

  3. JVM运行时数据区域——为什么jdk8用元空间替换了永久代

    以局部窥全局,这个问题其实很复杂,要弄清楚这个问题,首先要对JVM运行时数据区域划分以及各个数据区域的作用了和指掌. JVM运行时数据区域总览 JVM在执行Java程序的过程中(简称运行时)会把它所管 ...

  4. JVM学习(七):运行时数据区(精讲)

    目录 一.运行时数据区概述 1.1 概述 1.2 运行时数据区中的GC和OOM 二.程序计数器(PC寄存器,Program Counter Register) 2.1 介绍 2.2 作用 2.3 特点 ...

  5. Unity在运行时(代码中)设置材质的渲染模式(RenderingMode)

    在Unity中,有些少数情况下我们需要用代码来创建材质.比如说在材质非常多,而仅仅是纹理不一样的时候. 而用代码创建的材质是没有对应的资源文件的,我们也就无法使用Inspector来设置它的Rende ...

  6. JVM运行时结构、Java内存管理、JVM实例、HotSpot VM对象的创建、内存布局和访问定位

    1.JVM运行时结构 Java 运行时数据区域有程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区.其中前三个线程私有,随线程生而生,线程灭而灭:后面两个是线程间共享. 1.1 程序计数器 ...

  7. objective-c 编程总结(第六篇)运行时操作 - 方法交换

    objective-c 编程总结(第六篇)运行时操作 - 方法交换 后面主要介绍oc类的运行时行为.这里面包括运行时方法的更换,消息的转发,以及动态属性.这些对于面向方面编程AOP的热爱者还是很有用的 ...

  8. Dev C++可以编译但运行时提示Failed to execute且Error 0:操作成功完成。

    Dev C++可以编译但运行时提示Failed to execute且Error 0:操作成功完成. 问题 代码 现象 解决办法 更换GCC 可能和杀毒用软件有关系 问题 今天来复习C语言,写了简单几 ...

  9. java运行库一键修复_在运行时修补Java

    java运行库一键修复 本文将重点介绍如何解决与第三方库相关的问题 不能被规避 难以排除/绕过/更换 只需不提供错误修正 在这种情况下,解决问题仍然是一项艰巨的任务. 作为这种情况的诱因,请考虑对&q ...

最新文章

  1. SQL SERVER 架构管理
  2. 一文读懂Python版的十大经典排序算法(附动图演示)
  3. 开发网络爬虫应该怎样选择爬虫框架?
  4. python各个解释器的用途-常用的五种Python解释器|老男孩网络Python学习课程
  5. 在Jetson Xavier NX上安装torchvision编译报错:fatal error: libavcodec/avcodec.h: No such file or directory
  6. setTimeOut与 setInterval区别
  7. 谁说表单只能发get和post请求了?
  8. Chrome去广告插件-Adblock Plus
  9. wps目录怎么加一条_WPS中如何正确插入目录_WPS怎么做目录
  10. html中左三角怎么写,css3三角形怎么写?
  11. iOS时间戳与北京时间的转换
  12. 面试真题纠错(京东、爱奇艺)
  13. Java从零到企业级电商项目实战: linux环境配置
  14. nodejs负载均衡(一):服务负载均衡
  15. 棋盘放芝麻:有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量(代码)
  16. 不懂代码?没关系,照样可以做SaaS软件开发
  17. Python3初步实践教程概要
  18. RISC-V 架构指令集手册 第一册 无特权指令集 中文翻译
  19. jquery实现按钮倒数7秒后才可以点击
  20. 51单片机进阶案例(1)——基于MATLAB GUI的单片机串口与PC的通信实现实时时钟和双向可调时钟功能(利用DS1302时钟芯片和LCD1602液晶屏)

热门文章

  1. 微信小程序数据存储与取值
  2. SLIC superpixel算法
  3. c语言课程设计可以炒细面,二十五条药方头发浓密没问题.doc
  4. 内网穿透--DevOps学习番外
  5. linux系统下回收站,linux系统中有回收站吗
  6. 如何批量下载迪丽热巴图片
  7. 【TS系列】初识TypeScript
  8. excel建立层级_适合财务菜鸟看的Excel 教程? Excel 水平仅属于入门级。
  9. android手机网速,简单一步让你的手机网速至少提升2倍!
  10. c语言课程建设与改革,推进课程建设,助力教学改革