Hey I Have been searching all Night, for something to help me and have tired about a million combinations and i cannot seem to get what i am looking for.. Please mind that i am also new to C#, but any help will be appreciated. ugh alright I have a Script Player.cs. Code (CSharp): using UnityEngine; using System.Collections; public class Player : MonoBehaviour { public string username; public bool human; public Color userColor = new Color(1,1,1,1); // Use this for initialization void Start () { PlayerColor(); } //PlayerColor void PlayerColor() { } } alright its using color picker to choose a color which ill get the player to choose. but i have created a Material called. "PlayerColor" I created A simple shader Called "S_PlayerColor" and assigned the Material "PlayerColor" to use "S_PlayerColor" Just Incase you wanted to see the shader Code. Code (CSharp): Shader "Custom/S_PlayerColor" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // 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 _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness; half _Metallic; fixed4 _Color; void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; // Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } basically I want the Color Value only nothing else so a simple diffuse to be controlled by the player and placed on this material. then i can use this material for all 3d models where i have player Color places.
Hey, I have been searching and funneling out but seems i got one thats close.. the only issue is the shader Disconnects on Runtime.. Code (CSharp): using UnityEngine; using System.Collections; public class Player : MonoBehaviour { public string username; public bool human; public Color userColor = new Color(1,1,1,1); // Use this for initialization void Start () { PlayerColor(); } //PlayerColor void PlayerColor() { Renderer rend = GetComponent<Renderer>(); rend.material.shader = Shader.Find("PlayerColor"); rend.material.SetColor("_Color", userColor); } } This is before i run... you can see everything is assigned.. At Runtime the S_player Color Disappears.. But if i drag it back on it is picking up the color that the player selected..
Oh sorry I must Correct myself. Its Only Changing the Color that the material is assigned to if that material is on another Object it does not change it at all. so back tooo square one
You can use renderer.sharedMaterial to change the colors for all objects using the same material. However this also permanently changes the default material color in your project, so you need to add extra code to reset the colors to default at beginning of scene. Code (CSharp): //PlayerColor void PlayerColor() { Renderer rend = GetComponent<Renderer>(); rend.sharedMaterial.shader = Shader.Find("PlayerColor"); rend.sharedMaterial.SetColor("_Color", userColor); } }
hey bud, thanks for the reply so sharedMaterial is used for everything using that material while material is just the game object applied to it? thank you i can see it starts Wow thanks Bud i found the problem with the shader... Code (CSharp): using UnityEngine; using System.Collections; public class Player : MonoBehaviour { public string username; public bool human; public Color userColor = new Color(1,1,1,1); // Use this for initialization void Start () { PlayerColor(); } //PlayerColor void PlayerColor() { Renderer rend = GetComponent<Renderer>(); rend.sharedMaterial.shader = Shader.Find("Custom/S_PlayerColor"); // this is where the issue was had to add custom. rend.sharedMaterial.SetColor("_Color", userColor); } }
If this object already has the S_PlayerColor material applied to it, why are you doing a shader find at all?
well im new to coding so i assumed it needed it. from what i read on unity help site.. basic idea is just ill have 10 players max.. each will have a username and pick a team and then finally a color.. the models i have created... i have 2 materials set one is the texture and the other is the player color which i want to place this one material controlled by the Player and all units will be the same color.