UdonSharp icon indicating copy to clipboard operation
UdonSharp copied to clipboard

Code that uses Color32 does not compile unless specifically using byte variables as arguments

Open poi-vrc opened this issue 4 years ago • 1 comments

Describe the bug in detail: Consider the following code that is expected to compile correctly:


using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;

public class TestScript : UdonSharpBehaviour
{

    private Color32 color;

    void Start()
    {
        color = new Color32(0xC0, 0xD6, 0xDF, 0xFF);
    }
}

UdonSharp throws the following error stating the constructor cannot be found and fails the compilication:

[<color=#FF00FF>UdonSharp</color>] Assets\poiOS\Scripts\TestScript.cs(15,46): System.Exception: Could not find valid method for given parameters!

However, by specifically declaring byte variables and supplying into the constructor, the error no longer exists:


using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;

public class TestScript : UdonSharpBehaviour
{

    private Color32 color;

    void Start()
    {
        byte r = 0xC0;
        byte g = 0xD6;
        byte b = 0xDF;
        byte a = 0xFF;
        color = new Color32(r, g, b, a);
    }
}

I think C# seems to consider those hard-coded bytes as type Int32 instead of Byte and then auto-cast back to byte while compilication. UdonSharp seems trying to find the constructor Color32(Int32, Int32, Int32, Int32) which does not exist and fails the complication.

Expected behavior: What was the expected result? To compile

poi-vrc avatar Jan 22 '21 09:01 poi-vrc

Known issue that will be fixed eventually, but it's complicated. Using an explicit cast in the constructor like new Color32((byte)0xC0, (byte)0xD6, (byte)0xDF, (byte)0xFF) also works as a workaround.

MerlinVR avatar Jan 22 '21 09:01 MerlinVR