using TMPro; using UdonSharp; using UnityEngine; using VRC.SDK3.Image; using VRC.SDKBase; using VRC.Udon; using VRC.Udon.Common; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class MissingPoster : UdonSharpBehaviour { [SerializeField] private TextMeshProUGUI _LootName; [Space] [SerializeField] private MeshRenderer _MissingPosterMesh; [SerializeField] private Texture _DefaultPortrait; [SerializeField] private string _DefaultLootName; [UdonSynced] private VRCUrl _LootImageURL; [UdonSynced] private string _Name = ""; private VRCImageDownloader _LootImageDownloader; private Material _PortraitMaterial = null; private void Start() { _LootImageDownloader = new VRCImageDownloader(); _PortraitMaterial = _MissingPosterMesh.materials[2]; } void OnDestroy() { _LootImageDownloader.Dispose(); } public override void OnDeserialization(DeserializationResult Result) { _ApplyNewConfiguration(); base.OnDeserialization(Result); } public void SetNewLoot(VRCUrl LootImage, string Name) { _LootImageURL = LootImage; _Name = Name; _ApplyNewConfiguration(); RequestSerialization(); } private void _ApplyNewConfiguration() { TextureInfo AdditionalTextureInfo = new TextureInfo(); AdditionalTextureInfo.WrapModeU = TextureWrapMode.Clamp; AdditionalTextureInfo.WrapModeV = TextureWrapMode.Clamp; AdditionalTextureInfo.GenerateMipMaps = true; _LootImageDownloader.DownloadImage( _LootImageURL, _PortraitMaterial, null, AdditionalTextureInfo); _LootName.text = _Name; } }