using System.Collections.Generic; using System.Linq; using Unity.UIWidgets.foundation; using UnityEngine; namespace UIWidgetsSample.RaycastableScene { public class ItemInfo { public string itemObjName; public string itemDesc; public GameObject obj; public Vector3 position; public bool active; public Vector3 cameraPosition; public ItemInfo(string name, string desc, Vector3 cameraPosition) { itemObjName = name; itemDesc = desc; this.cameraPosition = cameraPosition; } } public class GameObjectManager : MonoBehaviour { public static ItemInfo[] itemInfos = new[] { new ItemInfo("Crane", "1", new Vector3(-5.69f, 2.38f, -1.36f)), new ItemInfo("Dog", "2", new Vector3(-2.44f, 1.31f, -2.96f)), new ItemInfo("Dragon", "3", new Vector3(-0.38f, 4.21f, -2.74f)), new ItemInfo("Goat", "4", new Vector3(-0.1f, 1.55f, -4.42f)), new ItemInfo("Horse", "5", new Vector3(-4.21f, 1.55f, -4.96f)), new ItemInfo("Monkey", "6", new Vector3(2.88f, 3.66f, -7.28f)), new ItemInfo("Ox", "7", new Vector3(1.08f, 1.23f, -1.86f)), new ItemInfo("Pig", "8", new Vector3(-4.2f, 0.95f, -2.49f)), new ItemInfo("Rabbit", "9", new Vector3(0.53f, 6.7f, -10.19f)), new ItemInfo("Rat", "10", new Vector3(-8.8f, 1.19f, -1.99f)), new ItemInfo("Rooster", "11", new Vector3(-13.71f, 6.8f, -9.48f)), new ItemInfo("Snake", "12", new Vector3(-6.88f, 4.9f, -9.6f)), new ItemInfo("Tiger", "13", new Vector3(-6.85f, 1.51f, -6.41f)) }; public Transform center; public static Transform centerInstance; public static List listItems => itemInfos.Select(x => new PickListItem(x.itemObjName, true, x.itemObjName)).ToList(); public static Dictionary objects = new Dictionary(); public static Vector3? cameraPosition; public static Camera cameraInstance; public Camera camera; private void OnEnable() { objects.Clear(); centerInstance = center; cameraInstance = camera; foreach (var item in itemInfos) { var newInfo = new ItemInfo(item.itemObjName, item.itemDesc, item.cameraPosition); newInfo.active = true; newInfo.obj = GameObject.Find(item.itemObjName); newInfo.position = newInfo.obj.transform.position; objects.Add(item.itemObjName, newInfo); } } void Update() { if (cameraPosition != null ) { var dif = cameraPosition.Value - camera.transform.position; if (dif.sqrMagnitude > RaycastableSceneConfig.delta) { camera.transform.position = dif.normalized * (RaycastableSceneConfig.cameraSpeed * Time.deltaTime) + camera.transform.position; } } } public static void FocusOnObject(string name) { var obj = objects.getOrDefault(name); if (obj != null && obj.active) { cameraPosition = obj.cameraPosition; } } public static void MoveCenter(string name) { var obj = objects.getOrDefault(name); if (obj != null) { obj.obj.transform.position = obj.position; obj.active = true; } } public static void MoveFar(string name) { var obj = objects.getOrDefault(name); if (obj != null) { obj.obj.transform.position = RaycastableSceneConfig.far; obj.active = false; } } } }