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

public class PanoramaGenerator : ScriptableWizard
{
    [Header("360 全景相机")]
    public Camera panoramaCamera;
    string[] skyBoxImage = new string[] { "_back", "_right", "_front", "_left", "_up", "_bottom"};
    Vector3[] skyDirection = new Vector3[] {new Vector3(0, 0, 0), new Vector3(0, -90, 0), new Vector3(0, 180, 0), new Vector3(0, 90, 0), new Vector3(-90, 0, 0), new Vector3(90, 0, 0)};
    [Header("截取图片尺寸,最好为 2的N次方")]
    public int ScreenSize = 1024;
    [Header("SkyBox")]
    public Cubemap cubemap;

void OnWizardUpdate()
    {
        helpString = "Select transform to render from";
        isValid = (panoramaCamera != null);
    }

void OnWizardCreate()
    {
        panoramaCamera.backgroundColor = Color.black;
        panoramaCamera.clearFlags = CameraClearFlags.Skybox;
        panoramaCamera.fieldOfView = 90;
        panoramaCamera.aspect = 1.0f;
        panoramaCamera.transform.rotation = Quaternion.identity;

for (var orientation = 0; orientation < skyDirection.Length; orientation++)
        {
            renderSkyImage(orientation, panoramaCamera.gameObject);
        }
        if (cubemap)
        {
            panoramaCamera.RenderToCubemap(cubemap);
        }

}

[MenuItem("360 全景/ 渲染6张图", false, 4)]
    static void RenderSkyBox()
    {
        ScriptableWizard.DisplayWizard<PanoramaGenerator>("Render SkyBox","渲染!");
    }

void renderSkyImage(int orientation, GameObject go)
    {
        try
        {
            go.transform.eulerAngles = skyDirection[orientation];
            var screenSize = ScreenSize;
            RenderTexture rt = new RenderTexture(screenSize, screenSize, 24);
            go.GetComponent<Camera>().targetTexture = rt;
            var screenShot = new Texture2D(screenSize, screenSize, TextureFormat.RGBA32, false);
            go.GetComponent<Camera>().Render();
            RenderTexture.active = rt;
            screenShot.ReadPixels(new Rect(0, 0, screenSize, screenSize), 0, 0);
            RenderTexture.active = null;
            var bytes = screenShot.EncodeToPNG();
             var directory = "Assets/Skyboxes";
            if (!System.IO.Directory.Exists(directory))
                System.IO.Directory.CreateDirectory(directory);
            System.IO.File.WriteAllBytes(System.IO.Path.Combine(directory, skyBoxImage[orientation] + ".png"), bytes);
            DestroyImmediate(rt);
        }
        catch(System.Exception ex)
        {
        }
    }

}

Unity3D 截取6面图 做全景图脚本的更多相关文章

  1. Unity3D ShaderLab 静态贴图光照模型

    Unity3D ShaderLab 静态贴图光照模型 其实在unity的光照模型中,我们可以把光照讯息烘培进入一个2D贴图,来实现着色器的光照效果. 下面是在unity中关闭灯光和打开灯光的对比效果. ...

  2. Unity3D ShaderLab 使用贴图对模型的高光进行遮罩

    Unity3D ShaderLab 使用贴图对模型的高光进行遮罩 前面研究了高光效果的实现,再说说现很多游戏用到的高光贴图技术,因为它可以让3D美工更容易控制最终的视觉效果. 这也就为我们提供了另外的 ...

  3. Unity3D ShaderLab法线贴图

    Unity3D ShaderLab法线贴图 说到法线贴图,应该算是我们最常使用的一种增强视觉效果的贴图.将法线贴图的各个像素点座位模型的法线,这样我们的光照可以模拟出高分辨率的效果, 同时也保持较低的 ...

  4. wordpress调用文章摘要,若无摘要则自动截取文章内容字数做为摘要

    以下是调用指定分类文章列表的一个方法,作者如果有填写文章摘要则直接调用摘要:如果文章摘要忘记写了则自动截取文章内容字数做为摘要.这个方法也适用于调用description标签 <ul> & ...

  5. Win10系统Edge浏览器怎么截取网页长图?

    有时我们在工作演示时会需要截取网页上的图片,不过简单的截图可以,但如果需要截取超过屏幕大小的整个网页,你是不是就有些束手无策了.虽然拼接图片也是种方法,但毕竟还是不方便,下面好系统重装助手就教你在Wi ...

  6. css中用一张背景图做页面的技术有什么优势?

    css中用一张背景图做页面的技术有什么优势? 简单介绍一下 CSS Sprites 的优点: 当用户往U盘中拷200张图片,会等很久.但是如果弄成一个文件,再拷贝就会快很多. CSS Sprites ...

  7. Unity3D研究院之动态修改烘培贴图的大小&脚本烘培场景

    Unity默认烘培场景以后每张烘培贴图的大小是1024.但是有可能你的场景比较简单,用1024会比较浪费.如下图所示,这是我的一个场景的烘培贴图,右上角一大部分完全是没有用到,但是它却占着空间.  有 ...

  8. Unity3D中的第三人称镜头的脚本控制

    原地址:http://blog.csdn.net/mobanchengshuang/article/details/27591271 好久没有敲Blog了,谢谢大家的留言.关注.私信等支持,但是我好像 ...

  9. Unity3D用vistual studio打卡C#脚本卡死解决

    小黑已经跟我3年了,不仅很喜欢他方正酷黑的外表,而且稳定性绝对没的说.我已经3年没有重装过系统了,而且现在装了3个系统!虽然小黑很适合程序员,但是他最大的缺点就是做设计比较吃力,显卡512M.像uni ...

随机推荐

  1. Python多版本管理器pyenv

    查看Linux版本 [root@web ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@web ~]# uname -a L ...

  2. 【docker】Dockerfile

    [docker]Dockerfile 转载: ============================================================= =============== ...

  3. MySQL的安装、启动和基础配置 —— mac版本

    安装 第一步:打开网址,https://www.mysql.com,点击downloads之后跳转到https://www.mysql.com/downloads/选择Community选项 第二步: ...

  4. 【ES6】函数的扩展

    1.函数参数默认值[详情例子参照ESMAScript 6入门 (阮一峰)] 允许为函数的参数设置默认值,即直接写在参数定义的后面.[例子1] 参数变量是默认声明的,所以不能用let或const再次声明 ...

  5. 《Dotnet9》建站-建站20天感悟

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  6. hadoop伪分布模式的配置和一些常用命令

    大数据的发展历史 3V:volume.velocity.variety(结构化和非结构化数据).value(价值密度低) 大数据带来的技术挑战 存储容量不断增加 获取有价值的信息的难度:搜索.广告.推 ...

  7. ABAP基础语法

    1.数据类型及属性 类型 说明 C N 0到9之间字符组成的数字字符串 D 日期格式必须为 YYYYMMDD T 格式为 24-hour的 HHMMSS I -2.147.483.648 to +2. ...

  8. MESSAGE_TYPE_X dump in RSM_DATASTATE_CHECK -6-

    DTP抽数时系统Dump 参考sapnote:2398760 - MESSAGE_TYPE_X dump in RSM_DATASTATE_CHECK -1- to -12- RSM_DATASTAT ...

  9. React-Native三种断点调试方式的流程和优缺点比较

    RN的调试和web端的调试虽然相似,但是也有一些不同,下面就来比较一下三种断点调试方法的差异 总结: 感觉还是第一种好一些 1.React-Native-Debugger工具调试法 1.1 首先我们得 ...

  10. 比较3个开源数据库:PostgreSQL,MariaDB和SQLite

    在现代企业技术世界里,开源软件已牢固地确立了自己作为不可忽视的,最大力量之一的地位.由于开源运动的出现,推动了几十年来的一些最著名的技术发展. 不难理解为什么:尽管基于Linux的开源网络标准可能不像 ...