unity3d中c#如何修改物体局部的颜色

shader也都是改变整个的颜色,如果只是想改变一个局部范围内的颜色该如何做... shader也都是改变整个的颜色,如果只是想改变一个局部范围内的颜色该如何做 展开
 我来答
渴松丷Z
2017-07-08 · TA获得超过206个赞
知道小有建树答主
回答量:242
采纳率:50%
帮助的人:94.9万
展开全部
修改天空盒颜色的例子(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<Skybox>();
if (skybox == null)
skybox = camera.AddComponent<Skybox>();
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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
机械熊二
2018-11-06
知道答主
回答量:2
采纳率:0%
帮助的人:1586
展开全部
我现在也需要这样的效果,局部变色,请问你解决了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
奔跑d蜗牛go
2017-08-16
知道答主
回答量:12
采纳率:0%
帮助的人:3.2万
展开全部
答非所问的人能不能再少一点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式