Get it on Google Play Get it on Google Play Get it on Google Play


Wm뮤 :: VRChat ImageLoader

블로그 이미지
가끔 그림그리거나 3D모델링하거나
취미로 로봇만드는
전자과 게임프로그래머 (퇴사함)
2022.3.22f1 주로 사용
모카쨩
@Ahzkwid

Recent Comment

Archive


2025. 1. 13. 23:46 게임/VRChat



공식자료는 여기

https://creators.vrchat.com/worlds/examples/image-loading/

https://creators.vrchat.com/worlds/udon/image-loading/

 

 

 

 

종각역에 적용되어 있고 부스에 배포할정도의 퀄리티는 아닌 개인용


https://gist.github.com/ahzkwid/c9498c95986d2b12cf6c65a576f8abd2

//v0.3

using UdonSharp;
using UnityEngine;
using UnityEngine.UI;
using VRC.SDK3.Image;
using VRC.SDKBase;
using VRC.Udon.Common.Interfaces;



[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class ImageLoader : UdonSharpBehaviour
{

    VRCImageDownloader imageDownloader;
    public VRCUrl[] urls;
    //public Material material;
    //public Texture2D[] textures;
    public RawImage[] rawImages;
    int textureIndex = 0;
    void Start()
    {
        /*
        foreach (var rawImage in rawImages)
        {
            rawImage.gameObject.SetActive(false);
        }
        */
        imageDownloader = new VRCImageDownloader();
        //textures = new Texture2D[urls.Length];
        LoadURL();
    }
    void LoadURL()
    {
        for (int i = 0; i < urls.Length; i++)
        {
            if (i>50)
            {
                continue;
            }
            var imageUrl = urls[i];
            var url = imageUrl.ToString();
            if (url.Length > 500)
            {
                continue;
            }
            if (URLSafeCheck(url))
            {
                var info = new TextureInfo();
                info.GenerateMipMaps = true;
                info.AnisoLevel = 1;
                imageDownloader.DownloadImage(imageUrl, null, (IUdonEventReceiver)this, info);
            }
        }
    }
    bool URLSafeCheck(string url)
    {
        if (url.StartsWith("https://raw.githubusercontent.com/"))
        {
            return true;
        }
        if (url.StartsWith("https://media.githubusercontent.com/"))
        {
            return true;
        }
        return false;
    }
    /*
    public override void OnImageLoadError(IVRCImageDownload result)
    {
        LoadURL();
    }
    */
    public override void OnImageLoadSuccess(IVRCImageDownload result)
    {
        if (rawImages.Length == 0)
        {
            return;
        }
        if (urls.Length== 0)
        {
            return;
        }
        if (textureIndex >= rawImages.Length)
        {
            textureIndex = 0;
        }
        var url = result.Url;
        if (url == null)
        {
            return;
        }
        if (URLSafeCheck(url.ToString()) == false)
        {
            return;
        }


        textureIndex = -1;
        for (int i = 0; i < urls.Length; i++)
        {
            if (urls[i].ToString()== url.ToString())
            {
                textureIndex = i;
                break;
            }
        }

        if (textureIndex == -1)
        {
            return;
        }
        //material = result.Material;

        //textures[textureIndex] = result.Result;
        var texture = result.Result;

        for (int i = 0; i < rawImages.Length; i++)
        {
            if (i % urls.Length == textureIndex)
            {
                var rawImage = rawImages[i];
                rawImage.texture = texture;
            }
        }
        /*
        foreach (var rawImage in rawImages)
        {
            rawImage.texture = texture;
            //rawImage.gameObject.SetActive(true);
        }
        */
        /*
        var rawImage = rawImages[textureIndex];
        rawImage.texture = result.Result;
        rawImage.gameObject.SetActive(true);
        textureIndex++;
        */
    }
}

 

 

 

'게임 > VRChat' 카테고리의 다른 글

VRChat 악질유저 적극적으로 친삭해야 하는 이유  (0) 2025.01.18
VRChat 무료 아바타 추천 2024  (0) 2024.11.03
VRChat 언어설정  (0) 2024.10.22
posted by 모카쨩

저사양 유저용 블로그 진입