Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Scripting issue with the render (Shader/Material)

Discussion in 'Getting Started' started by aMIGA_dUDE, Apr 5, 2021.

  1. aMIGA_dUDE

    aMIGA_dUDE

    Joined:
    Oct 12, 2019
    Posts:
    21
    Trying to work out how to get render to work as I would expect. There got be something that im not doing correctly. It only changes once press arrow on Shader Material.
    The sprite that generated on the right should look like one on left.
    This is the material file that use on the left

    %YAML 1.1
    %TAG !u! tag:unity3d.com,2011:
    --- !u!21 &2100000
    Material:
    serializedVersion: 6
    m_ObjectHideFlags: 0
    m_CorrespondingSourceObject: {fileID: 0}
    m_PrefabInstance: {fileID: 0}
    m_PrefabAsset: {fileID: 0}
    m_Name: InspectorMaterial
    m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
    m_ShaderKeywords: ETC1_EXTERNAL_ALPHA _ALPHABLEND_ON
    m_LightmapFlags: 4
    m_EnableInstancingVariants: 0
    m_DoubleSidedGI: 0
    m_CustomRenderQueue: 3000
    stringTagMap:
    RenderType: Transparent
    disabledShaderPasses: []
    m_SavedProperties:
    serializedVersion: 3
    m_TexEnvs:
    - _BumpMap:
    m_Texture: {fileID: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    - _DetailAlbedoMap:
    m_Texture: {fileID: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    - _DetailMask:
    m_Texture: {fileID: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    - _DetailNormalMap:
    m_Texture: {fileID: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    - _EmissionMap:
    m_Texture: {fileID: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    - _MainTex:
    m_Texture: {fileID: 10307, guid: 0000000000000000f000000000000000, type: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    - _MetallicGlossMap:
    m_Texture: {fileID: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    - _OcclusionMap:
    m_Texture: {fileID: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    - _ParallaxMap:
    m_Texture: {fileID: 0}
    m_Scale: {x: 1, y: 1}
    m_Offset: {x: 0, y: 0}
    m_Ints: []
    m_Floats:
    - _BumpScale: 1
    - _Cutoff: 0.5
    - _DetailNormalMapScale: 1
    - _DstBlend: 10
    - _GlossMapScale: 1
    - _Glossiness: 0.48
    - _GlossyReflections: 1
    - _Metallic: 0.46
    - _Mode: 2
    - _OcclusionStrength: 1
    - _Parallax: 0.02
    - _SmoothnessTextureChannel: 0
    - _SpecularHighlights: 1
    - _SrcBlend: 5
    - _UVSec: 0
    - _ZWrite: 0
    m_Colors:
    - _Color: {r: 0.3764706, g: 0.05911155, b: 0.039215695, a: 0.49019608}
    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
    m_BuildTextureStacks: []



    This is the code I am using to create the sprite on the left
    Code (CSharp):
    1. using UnityEngine;
    2.  
    3. public class SpriteMatShader : MonoBehaviour
    4. {
    5.     public GameObject parentGameObject;
    6.  
    7.     public Material material;
    8.     public Texture2D texture2D;
    9.     Sprite sprite;
    10.  
    11.     public string naming = "Script";
    12.  
    13.     void Start()
    14.     {
    15.         parentGameObject = new GameObject();
    16.         parentGameObject.name = $"{naming} Parent GameObject";
    17.         Transform transformX = parentGameObject.transform;
    18.         transformX.position = new Vector3(5f, 0f, 0f);
    19.         transformX.eulerAngles = Vector3.zero;
    20.         transformX.localScale = new Vector3(5f, 5f, 1f);
    21.         BuildTheBox(parentGameObject, "", Vector3.zero, Vector3.zero, Vector3.one, 10);
    22.     }
    23.  
    24.     private void BuildTheBox(GameObject parentObject, string notUsed, Vector3 localPosition, Vector3 localEulerAngles, Vector3 localScale, int sortOrder)
    25.     {
    26.  
    27.         GameObject gameObject = new GameObject();
    28.  
    29.         gameObject.transform.parent = parentObject.transform;
    30.         gameObject.name = $"{naming} Child GameObject";
    31.         gameObject.transform.localPosition = localPosition;
    32.         gameObject.transform.localEulerAngles = localEulerAngles;
    33.         gameObject.transform.localScale = localScale;
    34.  
    35.         SpriteRenderer spriteRenderer = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer;
    36.  
    37.         texture2D = MakeTexture();
    38.         sprite = MakeSprite(texture2D);
    39.         material = MakeMaterial();
    40.  
    41.         spriteRenderer.sprite = sprite;
    42.         spriteRenderer.material = material;
    43.         spriteRenderer.sortingOrder = sortOrder;
    44.     }
    45.  
    46.     private Texture2D MakeTexture()
    47.     {
    48.         Texture2D texture2dX = new Texture2D(1, 1, TextureFormat.RGB24, false);
    49.         texture2dX.name = $"{naming} Texture2D";
    50.         return texture2dX;
    51.     }
    52.  
    53.     private Sprite MakeSprite(Texture2D texture2dX)
    54.     {
    55.         Sprite spriteX = Sprite.Create(texture2dX, new Rect(0, 0, 1, 1), new Vector2(0.5f, 0.5f), 1f);
    56.         spriteX.name = $"{naming} Sprite";
    57.         return spriteX;
    58.     }
    59.  
    60.     private Material MakeMaterial()
    61.     {
    62.         Material materialX = new Material(Shader.Find("Standard"));
    63.         materialX.name = $"{naming} Material";
    64.         materialX.renderQueue = 3000;
    65.         materialX.SetColor("_Color", new Color(0.3764706f, 0.05911155f, 0.039215695f, 0.49019608f));
    66.  
    67.         materialX.SetFloat("_Mode", 2f);
    68.  
    69.         return materialX;
    70.     }
    71. }







     
  2. aMIGA_dUDE

    aMIGA_dUDE

    Joined:
    Oct 12, 2019
    Posts:
    21
    Managed to solve it. It now working as I expect it should. It was rendering issue with the material. I found this random website and gave clues I needed and put correct location of where to start looking, there talking about meshrender and I am using a spriterender
    http://gyanendushekhar.com/2018/09/16/change-material-and-its-properties-at-runtime-unity-tutorial/


    Code (CSharp):
    1. using UnityEngine;
    2.  
    3. public class SpriteMatShader : MonoBehaviour
    4. {
    5.     public GameObject parentGameObject;
    6.  
    7.     public Material material;
    8.     public Texture2D texture2D;
    9.     Sprite sprite;
    10.     SpriteRenderer spriteRenderer;
    11.     Shader shader;
    12.  
    13.     public string naming = "Script";
    14.  
    15.     void Start()
    16.     {
    17.         parentGameObject = new GameObject();
    18.         parentGameObject.name = $"{naming} Parent GameObject";
    19.         Transform transformX = parentGameObject.transform;
    20.         transformX.position = new Vector3(5f, 0f, 0f);
    21.         transformX.eulerAngles = Vector3.zero;
    22.         transformX.localScale = new Vector3(5f, 5f, 1f);
    23.         BuildTheBox(parentGameObject, "", Vector3.zero, Vector3.zero, Vector3.one, 10);
    24.     }
    25.  
    26.     private void BuildTheBox(GameObject parentObject, string notUsed, Vector3 localPosition, Vector3 localEulerAngles, Vector3 localScale, int sortOrder)
    27.     {
    28.  
    29.         GameObject gameObject = new GameObject();
    30.  
    31.         gameObject.transform.parent = parentObject.transform;
    32.         gameObject.name = $"{naming} Child GameObject";
    33.         gameObject.transform.localPosition = localPosition;
    34.         gameObject.transform.localEulerAngles = localEulerAngles;
    35.         gameObject.transform.localScale = localScale;
    36.  
    37.         spriteRenderer = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer;
    38.  
    39.         texture2D = MakeTexture();
    40.         sprite = MakeSprite(texture2D);
    41.        
    42.         shader = MakeShader("Standard");
    43.         //Debug.Log($"name {spriteRenderer.material.shader.name}");
    44.         material = MakeMaterial(shader);
    45.        
    46.         spriteRenderer.sprite = sprite;
    47.         spriteRenderer.material = material;
    48.         spriteRenderer.sortingOrder = sortOrder;
    49.     }
    50.  
    51.     private Texture2D MakeTexture()
    52.     {
    53.         Texture2D texture2dX = new Texture2D(1, 1, TextureFormat.RGB24, false);
    54.         texture2dX.name = $"{naming} Texture2D";
    55.         return texture2dX;
    56.     }
    57.  
    58.     private Sprite MakeSprite(Texture2D texture2dX)
    59.     {
    60.         Sprite spriteX = Sprite.Create(texture2dX, new Rect(0, 0, 1, 1), new Vector2(0.5f, 0.5f), 1f);
    61.         spriteX.name = $"{naming} Sprite";
    62.         return spriteX;
    63.     }
    64.    
    65.     private Material MakeMaterial(Shader materialType)
    66.     {
    67.         Material materialX = new Material(materialType);
    68.  
    69.         //Keywords must be done first!!
    70.         materialX.EnableKeyword ("ETC1_EXTERNAL_ALPHA");
    71.         materialX.EnableKeyword ("_ALPHABLEND_ON");
    72.         materialX.SetOverrideTag("RenderType", "Transparent");
    73.  
    74.         materialX.name = $"{naming} Material";
    75.         materialX.renderQueue = 3000;
    76.  
    77.         materialX.SetFloat("_DstBlend", 10f); // This makes trasnparent happen
    78.         materialX.SetFloat("_Mode", 2f); // This says make it transparent
    79.         materialX.SetFloat("_SrcBlend", 5f);
    80.         materialX.SetFloat("_ZWrite", 0f);
    81.        
    82.         materialX.SetColor("_Color", new Color(0.3764706f, 0.05911155f, 0.039215695f, 0.49019608f));
    83.  
    84.         return materialX;
    85.     }
    86.    
    87.     private Shader MakeShader(string shaderType)
    88.     {
    89.         Shader shaderX = Shader.Find(shaderType);
    90.         /*
    91.         Debug.Log($"makeshader 1: {shaderX.name}");
    92.         shaderX.name = $"{naming} Shader";  // I can not rename a shader, no idea why?
    93.         Debug.Log($"makeshader 2: {shaderX.name}");
    94.         */
    95.         return shaderX;
    96.     }
    97. }


    PS I have no idea why I can not get images to upload correctly on Unity forum