Life Archive

UnityEngine 내 Color를 사용할 때 주의해야할 점이 있다.

 

드로잉 월드를 제작하면서 로컬이 색깔을 선택하고 서버로 보낼 때, 선택한 색깔의 r,g,b,a 값을 number로 보냈다.

 

서버에서는 받은 data를 로컬을 제외한 다른 플레이어에게 보내며,

데이터를 받은 다른 플레이어들은 Color을 아래와 같이 설정했었다.

 

Connector.Instance.DrawStartRes = (data: {
            sessionId: string;
            lineWidth: number;
            color_r: number;
            color_g: number;
            color_b: number;
            color_a: number;
        }) => {
            const line = Manager.Resource.Instantiate("Prefabs\\Line");
            const lineDetail = line.GetComponent<LineRenderer>();
            lineDetail.startWidth = data.lineWidth;
            lineDetail.endWidth = data.lineWidth;
            lineDetail.startColor.r = data.color_r
            lineDetail.startColor.g = data.color_g
            lineDetail.startColor.b = data.color_b
            lineDetail.startColor.a = data.color_a

            const player = ZepetoPlayers.instance.GetPlayer(data.sessionId)
            line.transform.SetParent(player.character.gameObject.transform);
        };

startColor의 r, g, b값을 data의 r, g, b값으로 치환해주는 방법이었는데, 도통 적용이 되지 않아 해결방법을 찾아보았다.

 

답안은, r, g, b값을 위와 같이 따로 치환해주면 적용이 안된다는 것이며,

new Color(r, g, b, a), 즉 Vector4로 새로운 값을 만들어서 Color 자체에 치환해줘야 적용이 된다.

 

그래서 아래와 같이 코드를 수정하여 문제를 해결하였다.

Connector.Instance.DrawStartRes = (data: {
            sessionId: string;
            lineWidth: number;
            color_r: number;
            color_g: number;
            color_b: number;
            color_a: number;
        }) => {
            const line = Manager.Resource.Instantiate("Prefabs\\Line");
            let lineDetail = line.GetComponent<LineRenderer>();
            lineDetail.startColor = new Color(data.color_r, data.color_g, data.color_b, data.color_a);
            lineDetail.endColor = new Color(data.color_r, data.color_g, data.color_b, data.color_a);
            lineDetail.startWidth = data.lineWidth;
            lineDetail.endWidth = data.lineWidth;

            const player = ZepetoPlayers.instance.GetPlayer(data.sessionId)
            line.transform.SetParent(player.character.gameObject.transform);
        };