UnityEditor扩展编辑器实现从场景中渲染得到Cubemap

(学习笔记,希望能帮助到有需要的人。)

在自定义的EditorWindow中定义2个变量,分别代表需要渲染的Cubemap 和 视点对象(通常是Camera对象)

private Cubemap cubemap;

private GameObject obj;

在OnGUI 函数中

<span style="white-space:pre">		</span>this.cubemap = (Cubemap) EditorGUILayout.ObjectField (this.cubemap, typeof(Cubemap), false);

		EditorGUILayout.Space ();

		if ( GUILayout.Button ("Select Camera Object in Scene")) {

			if (Selection.activeGameObject) {
				this.obj = Selection.activeGameObject;
			}

		}

		if (this.obj != null) {
			EditorGUILayout.HelpBox ("obj name : " + this.obj.name, MessageType.None);
		}

		EditorGUILayout.Space ();

		if (this.obj != null) {
			if (GUILayout.Button ("Render to Cubemap")) {

				this.renderToCubeMap();
			}
		}

从编辑窗口中得到 资源文件 Cubemap 和  Camera对象。

在renderToCubeMap函数中

<span style="white-space:pre">		</span>if (this.cubemap != null && this.obj.camera != null) {

			this.obj.camera.RenderToCubemap(this.cubemap);
		}

这样就从camera所处的位置,渲染生成了6张纹理图,并生成立方体贴图Cubemap。

至此,就得到了从场景中定制得到的Cubemap。

下面是整体代码

using UnityEngine;
using UnityEditor;
using System.Collections;

public class GenerateCubeMapTool : EditorWindow {

	private Cubemap cubemap;

	private GameObject obj;

//	// Use this for initialization
//	void Start () {
//	}

	// Update is called once per frame
	void Update () {

	}

	[MenuItem("Tools/GenerateCubeMapTool")]
	static void Init () {
//		GenerateCubeMapTool window = (GenerateCubeMapTool) EditorWindow.GetWindow(typeof(GenerateCubeMapTool));
		EditorWindow.GetWindow (typeof(GenerateCubeMapTool));
	}

	void OnGUI () {

		EditorGUILayout.Space ();

		this.cubemap = (Cubemap) EditorGUILayout.ObjectField (this.cubemap, typeof(Cubemap), false);

		EditorGUILayout.Space ();

		if ( GUILayout.Button ("Select Camera Object in Scene")) {

			if (Selection.activeGameObject) {
				this.obj = Selection.activeGameObject;
			}

		}

		if (this.obj != null) {
			EditorGUILayout.HelpBox ("obj name : " + this.obj.name, MessageType.None);
		}

		EditorGUILayout.Space ();

		if (this.obj != null) {
			if (GUILayout.Button ("Render to Cubemap")) {

				this.renderToCubeMap();
			}
		}
	}

	void renderToCubeMap() {

		if (this.cubemap != null && this.obj.camera != null) {

			this.obj.camera.RenderToCubemap(this.cubemap);
		}
		else if (this.obj.camera == null) {
			Debug.Log("Please make sure the gameObject has the camera component");
		}
		else if (this.cubemap == null) {
			Debug.Log("Please select the cubemap, and try again.");
		}
	}
}

时间: 2024-10-27 04:54:00

UnityEditor扩展编辑器实现从场景中渲染得到Cubemap的相关文章

(转载)强行在MFC窗体中渲染Cocos2d-x 3.6

强行在MFC窗体中渲染Cocos2d-x 3.6 GuyaWeiren2015-06-29 15:14:063696 次阅读 [前言] 把Cocos2d-x渲染到另一个应用程序框架中的方法,在2.x时代有很多大神已经实现了,而3.x的做法网上几乎找不着.这两天抽空强行折腾了一下,不敢独享,贴出来供大家参考. [已知存在的问题] 程序退出时会发生非常严重的内存泄漏,博主检查了很久,但技术不够暂时无法解决.如果有大神能搞定,求告知一下做法,谢谢! 在程序从开始运行到关闭期间,有且仅有一个Cocos2

Unity扩展编辑器1:Editor Windows

Extending the Editor Unity允许你使用自己定制的inspectors和Editor Windows扩展编辑器,并且你可以使用定制的Property Drawers定义属性集在inspector中如何展示,这一块讲述如何使用这些特性. Editor Windows 你可以在你的app中创建任意数量的定制窗口.它们的表现就像Inspector,Scene或者其它内置的窗口.这是给你的游戏添加一个子系统用户接口的绝佳方式.[比如地图编辑器] 做一个自定义的Editor Wind

游戏开发之UE4添加角色到场景中

接着上次继续学习,现在我们已经有了一个场景并且运行了,我们需要添加一个角色到场景中.要这样做,我们必须从UE4的GameFramework类继承它. 一. 创建一个从Character类继承的类 从基本框架类继承是很简单的: 1) 在项目中打开你的UE4编辑器. 2) 在文件,选择"新建C++类". 3) 这里你可以选择从Pawn类(Pawn类从控制器接收输入)继承或从Actor类继承.不过我们可以这里选择从Character类(角色)继承. 4) 点击继续,然后你可以命名这个类.这里

百度editor富文本编辑器在火狐浏览器中的兼容性

最近做项目的时候遇到了百度的一个神器:editor富文本编辑器.但是也遇到了很多兼容性的问题,现在写一段随笔一起分享一下: 第一:在火狐浏览器中,该编辑器部分的编辑功能按钮不能显示 可以看出,在火狐浏览器中只会显示编辑框,而上面的编辑按钮缺没有.(但是在IE7,IE8上不能显示的原因在于新版本中屏蔽了 anonymous()方法,可以通过修改eWebEditor的JS文件来修正错误) 解决方案:打开火狐-->工具栏-->“工具”-->"添加附件",使用搜索功能来搜索“

《Unity3D》通过对象池模式,管理场景中的元素

池管理类有啥用? 在游戏场景中,我们有时候会需要复用一些游戏物体,比如常见的子弹.子弹碰撞类,某些情况下,怪物也可以使用池管理,UI部分比如:血条.文字等等 这些元素共同的特性是:存在固定生命周期,使用比较频繁,场景中大量使用. 所以,我们就通过池管理思路,在游戏初始化的时候,生成一个初始的池,存放我们要复用的元素, 当要用到时,从池中取出:生命周期结束,放回到池中. 代码 这个池的参数有两个:1池中存放的元素 2 池的初始容量(如果池不够了,则会按照这个容量进行扩展) 代码如下 using S

解析OBJ模型并将其加载到Unity3D场景中

??各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是http://qinyuanpei.com.今天想和大家交流的是解析obj模型并将其加载到Unity3D场景中,虽然我们知道Unity3D是可以直接导入OBJ模型的,可是有时候我们并不能保证我们目标客户知道如何使用Unity3D的这套制作流程,可能对方最终提供给我们的就是一个模型文件而已,所以这个在这里做这个尝试想想还是蛮有趣的呢,既然如此,我们就选择在所有3D模型格式中最为简单的OBJ模型来一起探讨这个问题吧! 关于OBJ模

在WebGL场景中使用2DA*寻路

  这篇文章将讨论如何在一个自定义的地面网格上进行简单的2D寻路,以及确定路径后如何使用基于物理引擎的运动方式使物体沿路径到达目标地点.读者需要预先对WebGL和Babylonjs知识有一些了解,可以参考我录制的WebGL入门视频教程和翻译的官方入门文档,当然也可以用自己喜欢的其他方式来学习. 文章主要分成如下几部分: 1.自定义地面网格与寻路矩阵 2.生成Babylon格式3D模型 3.使用pathfinding库进行2D寻路 4.基于cannon.js物理引擎使物体沿路径移动 场景可以通过h

08.spritekit征程——场景中的动画

08.spritekit征程--场景中的动画 接着上文,显示静态的文字是否无法满足你的欲望,那么本文的内容绝对让你热血沸腾,记得小时候爱看动画,现在有这么一个机会让你来创作是不是想想都有点小激动呢. 动画的核心呢就是actions.在Sprite Kit 中的大多数action 其实就是改变节点(Node)的属性罢了.假如你还不了解节点是什么,建议好好谷歌百度下,虽说都是最基础的知识,但是我认为"万丈大楼平地起",打好基础很是关键,另外就是坚持. 关于节点: 节点是最简单也是最难理解的

Unity3D NGUI从背包中拖出并在场景中生成物体

http://www.cnblogs.com/zhanghaipeng-Unity3D/p/4732592.html 由于游戏需要从背包中拖出武器并在场景中相应的位置生成出来,所以研究了一下这个. 一般来说,在Unity3D开发中如果使用NGUI为游戏做UI,我们的场景和UI并不是使用一个相机进行渲染的,所以从背包中拖出物体并在场景相应的位置生成物体,就会涉及到UICamera和场景摄像机的转换.我在做这个时主要通过打射线来实现坐标转换. 如何创建一个可拖动的UI组件可以参考NGUI中的Exam