登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [u3d]动态修改天空盒和天空盒的颜色     [回主站]     [分站链接]
[u3d]动态修改天空盒和天空盒的颜色
clq
浏览(314) - 2020-04-18 23:56:49 发表 编辑

关键字: u3d

[2020-04-18 23:59:49 最后更新]
[u3d]动态修改天空盒和天空盒的颜色

update 函数中
//----------------------------------------------------------------
//动态天空盒颜色//效果非常酷,可以用来做闪电
Color colorStart = Color.blue;
Color colorEnd = Color.green;
float duration = 1.0F;

float lerp = Mathf.PingPong(Time.time, duration) / duration;
//Debug.Log(RenderSettings.skybox); //这个可能是 null,所以后面要再取
//RenderSettings.skybox.SetColor("_Tint", Color.Lerp(colorStart, colorEnd, lerp));

//参考 http://blog.okbase.net/haobao/archive/4537.html
var box = screen.GetMainCamera().GetComponent();

box.material.SetColor("_Tint", Color.Lerp(colorStart, colorEnd, lerp));

----------------------------------------------------------------
http://blog.okbase.net/haobao/archive/4537.html

Unity3D如何用脚本动态更改Skybox颜色和材质
unity3d 2014-9-5 23:00:00 阅读(15804) 评论(1)

修改天空盒颜色的例子(C#):


using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
public Color colorStart = Color.blue;
public Color colorEnd = Color.green;
public float duration = 1.0F;
void Update() {
float lerp = Mathf.PingPong(Time.time, duration) / duration;
RenderSettings.skybox.SetColor("_Tint", Color.Lerp(colorStart, colorEnd, lerp));
}
}

修改天空盒材质的例子(C#):


// 加载所有 skybox 纹理
Texture2D sbFront = Resources.Load("Texture/Skybox/skybox_Front") as Texture2D;
Texture2D sbBack = Resources.Load("Texture/Skybox/skybox_Back") as Texture2D;
...

// 创建新的 SkyBox 材质
Material mySkyBoxMat = new Material(Resources.Load("Shaders/myOwnSkyboxShader") as Shader);

// 将所有纹理添加到材质中
mySkyBoxMat.SetTexture("_FrontTex", sbFront);
mySkyBoxMat.SetTexture("_BackTex", sbBack);

// 设置RenderSettings skybox 变量
RenderSettings.skybox = mySkyBoxMat;

稍微完整些的例子(C#):


using UnityEngine;
using System.Collections;

public class SkyboxSetter : MonoBehaviour
{
// 创建Skybox材质
public static Material CreateSkyboxMaterial(SkyboxManifest manifest)
{
Material result = new Material(Shader.Find("RenderFX/Skybox"));
result.SetTexture("_FrontTex", manifest.textures[0]);
result.SetTexture("_BackTex", manifest.textures[1]);
result.SetTexture("_LeftTex", manifest.textures[2]);
result.SetTexture("_RightTex", manifest.textures[3]);
result.SetTexture("_UpTex", manifest.textures[4]);
result.SetTexture("_DownTex", manifest.textures[5]);
return result;
}

public Texture2D[] textures;

void OnEnable()
{
SkyboxManifest manifest = new SkyboxManifest(textures[0], textures[1], textures[2], textures[3], textures[4], textures[5]);
Material material = CreateSkyboxMaterial(manifest);
SetSkybox(material);
enabled = false;
}

// 材质加到天空盒
void SetSkybox(Material material)
{
GameObject camera = Camera.main.gameObject;
Skybox skybox = camera.GetComponent();
if (skybox == null)
skybox = camera.AddComponent();
skybox.material = material;
}
}

public struct SkyboxManifest
{
public Texture2D[] textures;

public SkyboxManifest(Texture2D front, Texture2D back, Texture2D left, Texture2D right, Texture2D up, Texture2D down)
{
textures = new Texture2D[6]
{
front,
back,
left,
right,
up,
down
};
}
}

代码测试结果:

按照RenderSettings.skybox = mySkyBoxMat;方式设置并没有成功,用下面例子中的SetSkybox运行成功。



需要注意的是,Texture目录需要放在Resources目录下,最终的目录结构是这样的:

项目主目录/Assets/Resources/Textures/Skybox/skybox_Front.jpg



clq  2020-04-18 23:57:20 发表 编辑

https://blog.csdn.net/SanShanYaoWuYue/article/details/39895861

Unity 动态改变天空盒 材质
原创 yyyyyaoyue 最后发布于2014-10-08 17:02:18 阅读数 3445 收藏
展开

关于Unity3d中天空盒的动态变更,

也就是根据不同的场景信息,使得天空盒的效果换成不同的材质

只需要在想换的时候调一下就可以,这个只是改变天空的材质,就是变一片天,不是让天空动起来

public Material MateSunny1;

RenderSettings.skybox = MateSunny1;



总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1