-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathNode.cs
50 lines (42 loc) · 1.61 KB
/
Node.cs
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Node : MonoBehaviour
{
GameObject epf;
List<GameObject> edges = new List<GameObject> ();
List<SpringJoint> joints = new List<SpringJoint>();
void Start(){
transform.GetChild(0).GetComponent<TextMesh>().text = name;
}
void Update(){
int i = 0;
foreach (GameObject edge in edges){
edge.transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);
SpringJoint sj = joints[i];
GameObject target = sj.connectedBody.gameObject;
edge.transform.LookAt(target.transform);
Vector3 ls = edge.transform.localScale;
ls.z = Vector3.Distance(transform.position, target.transform.position);
edge.transform.localScale = ls;
edge.transform.position = new Vector3((transform.position.x+target.transform.position.x)/2,
(transform.position.y+target.transform.position.y)/2,
(transform.position.z+target.transform.position.z)/2);
i++;
}
}
public void SetEdgePrefab(GameObject epf){
this.epf = epf;
}
public void AddEdge(Node n){
SpringJoint sj = gameObject.AddComponent<SpringJoint> ();
sj.autoConfigureConnectedAnchor = false;
sj.anchor = new Vector3(0,0.5f,0);
sj.connectedAnchor = new Vector3(0,0,0);
sj.enableCollision = true;
sj.connectedBody = n.GetComponent<Rigidbody>();
GameObject edge = Instantiate(this.epf, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity);
edges.Add(edge);
joints.Add(sj);
}
}