unity中能用代码修改unity shader代码吗

unity中能用代码修改shader吗_百度知道
unity中能用代码修改shader吗
我有更好的答案
很简单的,举个例子: 修改shader中 对应的颜色_Color属性:代码如下: gameObject.renderer.material.SetVector(&_Color&,new Vector4 (1,1,1,1)); 就完成了,其他属性依葫芦画瓢就会改了。
采纳率:100%
为您推荐:
其他类似问题
您可能关注的内容
shader的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。6135人阅读
定义一个材料,放在Resources文件夹中
然后贴上Shader代码
Shader "Custom/ScriptControlShader" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
SubShader {
Tags { "RenderType"="Opaque" }
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainT
struct Input {
float2 uv_MainT
void surf (Input IN, inout SurfaceOutputStandard o) {
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _C
o.Albedo = c.
o.Alpha = c.a;
FallBack "Diffuse"
}定义了两个属性 _Color 、 _MainTex
现在在脚本里控制者两个属性
using UnityE
using System.C
public class Main : MonoBehaviour {
public Vector4
public float val_1;
public float val_2;
public Matrix4x4
void Start(){
//获取图Texture2D和Material
earth = (Texture2D)Resources.Load("Earth");
earthcloud = (Texture2D)Resources.Load("EarthClouds");
mat = (Material)Resources.Load("02test");
green = Color.
void Update () {
mat.SetTexture("_MainTex",earthcloud);
mat.SetColor("_Color",green);
}将脚本绑在一个GameObject上,就可以看到效果的改变了unity中能用代码修改shader吗_百度知道
unity中能用代码修改shader吗
我有更好的答案
很简单的,举个例子: 修改shader中 对应的颜色_Color属性:代码如下:gameObject.renderer.material.SetVector(&_Color&,new Vector4 (1,1,1,1));
采纳率:72%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。1205人阅读
1. 创建或编辑usertype.dat文件(此文件在VS安装目录下的Common7\IDE下面,比如我的就在D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\usertype.dat),添加如下的关键字列表,每个单词占一行,如果你想添加你自己的关键字,也可以按照这种方式添加在usertype.dat文件中2. 在vs中打开Tools-&Options...-&TextEditor-&File Extension填写你想使用的着色器文件扩展名,如fx, hlsl, vs, ps等等,然后Editor选择Microsoft Visual C++3. 重新启动VS2005关键字列表:__global____host____device____constant____shared__gridDimblockIdxblockDimthreadIdxint1uint1int2uint2int3uint3int4uint4float1float2float3float4char1char2char3char4uchar1uchar2uchar3uchar4short1short2short3short4dim1dim2dim3dim4int2floatfloat2intasmasm_fragmentBINORMALBLENDINDICES0BLENDWEIGHT0COLOR0COLOR1COLOR2COLOR3column_majorcompilecompile_fragmentdiscarddecl1float2float3float3x3float3x4float4float4x4float4x3halfhalf2half3half4ininoutintint2int3int4matrixoutpass1pixelfragmentrow_majorsamplersampler1Dsampler2Dsampler3DsamplerCUBEsampler_statesharedstateblockstateblock_stateTANGENTtechniquetexturetexture1Dtexture2Dtexture3DtextureCUBETEXCOORD0TEXCOORD1TEXCOORD2TEXCOORD3TEXCOORD4TEXCOORD5TEXCOORD6TEXCOORD7uniformvectorvertexfragmentVPOS程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之自制批量修改Shader插件(五十七)
Unity3D研究院之自制批量修改Shader插件(五十七)
围观25800次
编辑日期: 字体:
美工兄弟创建FBX模型带了好几十个贴图,每一个贴图都需要手动设置一下Shader,美工兄弟显然Hold不住了,作为一个程序帮他想想办法把,嘿嘿。我用了一下午的时间帮他写了一小插件。 如下图所示,ChangerShader是插件的代码,shader.txt是配置文件,把它俩都放在Editor文件夹中。
先看看shader.txt的配置文件,它就是配置批量修改Shader的列表,这里可以选择系统自带的Shader,也可以选择你自己创建的Shader,只要名称选择对就可以。配置文件Shader的你也可以继续添加,只要资源中有就可以。记住中间用& 字符隔开就可以,
Diffuse&&Mobile/Diffuse&&Transparent/Diffuse&&Mobile/Transparent/Vertex Color&&Custom/NewShader
Custom/NewShader是我自己创建的Shader。如下图所示,Shader的名称可以由你任意配置。
用法非常的简单,如下图所,在Hierarchy视图中选择需要批量修改的对象,然后在Unity导航菜单栏中选择Window-&ChangerShader。你可以放心选择对象,程序会自动检测你选择的对象是否可以修改Shader。
如下图所示,然后点击需要批量修改的Shader吧。在看看模型材质上的Shader,是不是很神奇,哇咔咔。。
目前这个小插件我在我的工程中已经完美测试通过,但是不代表没有一点BUG,MOMO希望大家多多使用给我提点意见。
ChangeShader.cs 插件的源码。 比较简单,我就不注释了。 核心就是根据Hierarchy视图中的游戏对象找到它的材质组件,如果组件中使用过Project视图中的资源文件的Shader文件,然后在Project中找到该资源文件的路径,最后获取这个资源对象并且修改它。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
using UnityEngine;using System.Collections;using UnityEditor;&public class ChangeShader :&&EditorWindow {&&&static TextAsset textAsset;&&static&&string [] lineArray;&& [MenuItem ("Window/ChangerShader")] &&&&static void AddWindow () {&&&&&&
textAsset = Resources.LoadAssetAtPath("Assets/Editor/shader.txt",typeof(TextAsset))as TextAsset;&
lineArray = textAsset.text.Split ("&"[0]);&
Rect&&wr = new Rect (0,0,500,500);&&&&&&&&ChangeShader window = (ChangeShader)EditorWindow.GetWindowWithRect (typeof (ChangeShader),wr,true,"widow name");
window.Show();&&&&&}& private Shader shader;& void OnGUI () {
for(int i =0; i&lineArray.Length; i++)
string shaderName = lineArray[i].Trim();
if(GUILayout.Button(shaderName))
Change(Shader.Find(shaderName));
} }& void Change(Shader shader) {
if(Selection.activeGameObject != null)
foreach(GameObject g in Selection.gameObjects)
Renderer []renders = g.GetComponentsInChildren&Renderer&();
foreach(Renderer r in renders)
if(r&&!=&&null)
foreach(Object o in r.sharedMaterials)
string path = AssetDatabase.GetAssetPath(o);
Material m = Resources.LoadAssetAtPath(path,typeof(Material)) as Material;
m.shader = shader;
this.ShowNotification(new GUIContent("选择的对象批量修改shader成功"));
this.ShowNotification(new GUIContent("没有在Hierarchy视图中选择对象"));&
批量修改完毕啦。哇咔咔
最后是本文的下载地址 祝大家学习愉快,啦啦啦~~~
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!
Pingback 引用通告:
Pingback 引用通告:

我要回帖

更多关于 unity 代码设置shader 的文章

 

随机推荐