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 |