Advertisement
Guest User

Radial Menu

a guest
Jun 17th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.80 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Sirenix.OdinInspector;
  4. using UnityEngine;
  5.  
  6. public class RadialMenu : SerializedMonoBehaviour
  7. {
  8.     public int amountOfItems = 3;
  9.     public Vector2 outlineSize;
  10.     List<RadialMenuElement> radialElements;
  11.     public RadialMenuElement prefab;
  12.     [Range(0,30)]
  13.     public float elementOffset;
  14.  
  15.     [Button("Create New Radial Menu")]
  16.     public void CreateNewRadial()
  17.     {
  18.         DestroyElements();
  19.  
  20.         radialElements = new List<RadialMenuElement>();
  21.         float anglePerElement = 360f/amountOfItems;
  22.         for (int i = 0; i < amountOfItems; i++)
  23.         {
  24.             float angle = anglePerElement / 2 + i * anglePerElement;
  25.             Vector3 direction = Quaternion.Euler(0, 0, angle - anglePerElement/2) * Vector3.down;
  26.             RadialMenuElement newElement = InstantiateNewElement(angle, direction,anglePerElement);
  27.             radialElements.Add(newElement);
  28.         }
  29.     }
  30.  
  31.     void DestroyElements()
  32.     {
  33.         RadialMenuElement[] radialChildElements = GetComponentsInChildren<RadialMenuElement>();
  34.         if (radialChildElements != null)
  35.         {
  36.             foreach (RadialMenuElement radialMenuElement in radialChildElements)
  37.             {
  38.                 //todo need to change to regular destroy on deployment
  39.                 Destroy(radialMenuElement.gameObject);
  40.             }
  41.  
  42.             radialElements = null;
  43.         }
  44.     }
  45.  
  46.     public RadialMenuElement InstantiateNewElement(float zRot, Vector3 direction, float fillAmount)
  47.     {
  48.         RadialMenuElement newElement = Instantiate(prefab);
  49.         newElement.transform.SetParent(transform);
  50.         newElement.StartElement(outlineSize,zRot,transform.position + direction*elementOffset,fillAmount);
  51.         return newElement;
  52.     }
  53.  
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement