using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
[CustomEditor(typeof(PayloadRace))]
public class PayloadRaceEditor : Editor
{
private Vector3 position = Vector3.zero;
void OnSceneGUI()
{
var payloadRace = (PayloadRace)target;
var tracksParent = payloadRace.tracksParent;
if (tracksParent)
{
var childs = new List<Transform>();
for (int i = 0; i < tracksParent.childCount; i++)
{
childs.Add(tracksParent.GetChild(i));
}
foreach (var child in childs)
{
if (Vector3.Distance(payloadRace.transform.position, child.position) < 1)
{
//너무 가까우면 최상위 조작이 불가하므로
continue;
}
var newPosition = UnityEditor.Handles.PositionHandle(child.position, child.rotation);
if (newPosition != child.position)
{
UnityEditor.Undo.RecordObject(child, "Move Transform");
child.position = newPosition;
}
}
}
}
}
#endif
public class PayloadRace : MonoBehaviour
{
public int team = 0;
public GameObject payload;
public Transform tracksParent;
#if UNITY_EDITOR_WIN
void OnDrawGizmos()
{
var color = Color.red;
if (team == 0)
{
color = Color.blue;
}
Gizmos.color = color;
{
Gizmos.DrawWireSphere(transform.position,5);
}
Gizmos.color = Color.white;
if (tracksParent)
{
var childs = new List<Transform>();
for (int i = 0; i < tracksParent.childCount; i++)
{
childs.Add(tracksParent.GetChild(i));
}
foreach (var child in childs)
{
Gizmos.DrawSphere(child.position,0.1f);
if (Vector3.Distance(transform.position, child.position)<1)
{
continue;
}
}
for (int i = 0; i < childs.Count-1; i++)
{
Gizmos.DrawLine(childs[i].position, childs[i + 1].position);
}
}
}
#endif
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}