Unity3D 创建动态的立方体图系统
Unity3D 创建动态的立方体图系统
这一篇主要是利用上一篇的Shader,通过脚本来完成一个动态的立方体图变化系统。
准备工作如下:
- 创建一个新的场景、一个球体。提供给场景一个平行光,准备2个立方体图。
- 添加两个空对象,并分别命名为Empty1和Empty2,给他们分配不同的位置。
- 给球体添加一个新的材质,并使用FresnelReflection Shader(上一篇)。
- 最后,创建一个脚本,并命名为CubeDynamic.cs,把它赋给球体。
A:下面开始编写脚本:
//2个立方体图;
- public Cubemap cubeMapA;
- public Cubemap cubeMapB;
//2个参考位置Empty1,2;
- public Transform posA;
- public Transform posB;
- private Material tempMat;
- private Cubemap tempCubeMap;
- private int times = ;
B:为了方便观测Empty1,2的位置,我们使用OnDrawGizmos函数来绘制对象:
- void OnDrawGizmos() {
- Gizmos.color = Color.green;
- if(posA){
- Gizmos.DrawWireSphere(posA.position,);
- }
- if(posB){
- Gizmos.DrawWireSphere(posB.position,);
- }
- }
C:创建一个新的函数来决定在不同的位置我们应该使用哪个Cubemap
- private Cubemap GetUseCubeMap() {
- float lengthA = Vector3.Distance(transform.position,posA.position);
- float lengthB = Vector3.Distance(transform.position,posB.position);
- if(lengthA>lengthB){
- return cubeMapB;
- }
- else if (lengthA < lengthB)
- {
- return cubeMapA;
- }
- else {
- return cubeMapA;
- }
- }
D:在Update函数中进行赋值
- void Update () {
- times++;
- if(times%==){//避免每一帧都计算;
- tempMat = renderer.sharedMaterial;
- if (tempMat)
- {
- tempCubeMap = GetUseCubeMap();
- tempMat.SetTexture("_CubeMap", tempCubeMap);
- }
- times = ;
- }
- }
保存脚本,返回Unity编辑器。点击Play按钮,并前后左右移动球体。你将会看到类似下面的效果:
通过上面简单的代码,我们可以看出程序会固定帧数为一个时间段来判断球体和2个参考位置的间距来计算自身使用哪一种cubemap,再把cubemap赋值给自己。这样就完成了简单的变换。
Unity3D 创建动态的立方体图系统的更多相关文章
- Unity3D ShaderLab 简单的立方体图反射
Unity3D ShaderLab 简单的立方体图反射 反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境, 让着色器反射外界的场景信息并将 ...
- Unity3D ShaderLab 立方体图的菲涅尔反射
Unity3D ShaderLab 立方体图的菲涅尔反射 菲涅尔反射是反射类型中比较常见的一种类型,当我们的视线正对物体表面,那么反射量会明显增加, 我们几乎可以在任何支持反射类型的物体表面看到这种情 ...
- Unity3D ShaderLab 立方体图的反射遮罩
Unity3D ShaderLab 立方体图的反射遮罩 上一篇,简单的介绍了立方体图的反射,那么我们能不能使用一张纹理对其进行指定遮罩呢?这样美工可以更好的控制图像的效果. 我们接着使用上一篇的sha ...
- Unity3D ShaderLab立方体图的法线渲染
Unity3D ShaderLab立方体图的法线渲染 某些情况下,我们希望立方体图的材质球上产生法线效果,来更多的表现细节,比如菱形花纹的玻璃,冰块的表面. 在帧数的协调下,我们可以通过input结构 ...
- unity3d教程动态创建简单平面地形
unity3d创建地形是不须要usingUnityEditor的.这里使用了AssetDatabase.所以需using UnityEditor; 创建三步: 1.TerrainData terrai ...
- Ribbon2: 创建动态的Ribbon库
Sam Radakovitz曾在Excel团队博客中发表过一篇文章,介绍了如何创建动态的Ribbon库,即如何通过RibbonX和VBA放置动态的图形图像到功能区库中,在该文中,作者创建了两个库:一个 ...
- 【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
原文:[ASP.NET Web API教程]2.3.5 用Knockout.js创建动态UI 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容 ...
- python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))
昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据. StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对 ...
- EntityFramework4.5使用Expression类创建动态查询及动态查询导航属性
创建动态查询 想在项目中实现一个灵活的动态查询类,参考http://www.cnblogs.com/lyj/archive/2008/03/25/1122157.html和http://www.cnb ...
随机推荐
- 课堂练习&课下作业
设计思路: 列举出买十本的所有情况:1.一本的时候不打折扣 2.两本的时候买两本价最低 3.三本的时候买三本价最低 4.四本的时候买四本价最低 5.五本的时候买五本价最低 6.六本的时候分一本和五本价 ...
- vsto publish后无法弹出winform窗口
http://www.cnblogs.com/xiyang1011/archive/2011/06/07/2074025.html - - 没有调用form.show()...
- NetworkComms框架介绍 完美支持TCP/UDP协议
NetworkComms网络通信框架序言 英文文章地址 :http://www.networkcomms.net/tcp-udp-connections/ NetworkComs.Net无缝的支持TC ...
- PHP分页类库
<?php /** * @title: Ekcms page分页类库 * @version: 1.0 * @author: perry <perry@1kyou.com> * @pu ...
- php中文汉字截取函数
public function substrgb($in,$num) { //$num=16; $pos=0; $bytenum=0; $out=""; while($num){ ...
- 为什么要使用 F#?
对于小部分 .NET 程序员来说,学习一门 .NET Framework 函数化语言无疑将使自己在编写功能强大软件方面前进一大步.而对其他程序员来说,学习 F# 的理由就因人而异了.F# 能为开发 ...
- web开发常用的js验证,利用正则表达式验证邮箱、手机、身份证等输入
正则表达式验证 //邮箱 \-])+\.)+([a-zA-Z0-]{,})+$/; email = document.getElementById("email").value; ...
- 一个QQ木马的逆向分析浅谈(附带源码)
程序流程:首先注册自己程序的窗口以及类等一系列窗口操作,安装了一个定时器,间隔为100ms,功能搜索QQ的类名,如果找到就利用FindWindow("5B3838F5-0C81-46D9-A ...
- wcf精通1-15
随笔- 197 文章- 0 评论- 3407 十五天精通WCF——第一天 三种Binding让你KO80%的业务 转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是 ...
- closeChrome
function closeChrome(){ var browserName=navigator.appName; if (browserName=="Netscape") { ...