Advertisement
Pro_Unit

Billboard

Sep 16th, 2023
599
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.45 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Linq;
  3.  
  4. using UnityEngine;
  5.  
  6. namespace UIBillboard
  7. {
  8.     public class Billboard : MonoBehaviour
  9.     {
  10.         [SerializeField] private bool _sort = true;
  11.         [SerializeField] private Transform _holder;
  12.         [SerializeField] private BillboardItem _template;
  13.         [Space]
  14.         [SerializeField] private BillboardItem[] _items;
  15.        
  16.         private Transform _mainCameraTransform;
  17.         private Dictionary<string, BillboardItem> _billboardItems;
  18.  
  19.         public void SetItemValue(string item, string value) =>
  20.             _billboardItems[item].SetValue(value);
  21.  
  22.         public void CreateNewItem(string item, string startValue)
  23.         {
  24.             BillboardItem billboardItem = Instantiate(_template, _holder);
  25.             billboardItem.Name = item;
  26.             billboardItem.SetValue(startValue);
  27.             GetAllItems();
  28.         }
  29.  
  30.         private void GetAllItems()
  31.         {
  32.             _items = _holder.GetComponentsInChildren<BillboardItem>();
  33.  
  34.             if (_sort)
  35.             {
  36.                 _items = _items.OrderBy(ItemNameLength).ToArray();
  37.  
  38.                 foreach(Transform child in _holder)
  39.                     child.SetAsFirstSibling();
  40.             }
  41.  
  42.             _billboardItems = _items.ToDictionary(item => item.Name);
  43.         }
  44.  
  45.         private static int ItemNameLength(BillboardItem item) =>
  46.             item.Name.Length;
  47.  
  48.         private void Start() =>
  49.             _mainCameraTransform = Camera.main.transform;
  50.  
  51.         private void LateUpdate() =>
  52.             transform.LookAt(
  53.                 transform.position + _mainCameraTransform.rotation * Vector3.forward,
  54.                 _mainCameraTransform.rotation * Vector3.up);
  55.        
  56.     }
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement