blob: 62d333a1051eb09f6695c5f923653cd0896a7018 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
namespace Pathfinding.Examples.RTS {
[HelpURL("https://arongranberg.com/astar/documentation/stable/rtsworldspaceui.html")]
public class RTSWorldSpaceUI : VersionedMonoBehaviour {
public Camera worldCamera;
List<Item> items = new List<Item>();
public class Item {
public RectTransform transform;
public Transform tracking;
public Vector3 worldOffset;
public Vector2 screenOffset;
public Item (Transform tracking) {
this.tracking = tracking;
}
public virtual void SetUIRoot (GameObject root) {
transform = root.GetComponent<RectTransform>();
}
public virtual bool valid {
get {
return tracking != null;
}
}
public virtual void Update (Camera cam) {
var p = cam.WorldToScreenPoint(tracking.position + worldOffset) + (Vector3)screenOffset;
p.z = 0;
transform.anchoredPosition = p;
}
}
public void Add (Item item, GameObject prefab) {
var go = GameObject.Instantiate(prefab);
go.transform.SetParent(transform, false);
item.SetUIRoot(go);
items.Add(item);
}
void LateUpdate () {
for (int i = items.Count - 1; i >= 0; i--) {
if (items[i].valid) {
items[i].Update(worldCamera);
} else {
GameObject.Destroy(items[i].transform.gameObject);
items.RemoveAt(i);
}
}
}
}
}
|