private void OnEnable() { part = target as MonoPart; if (part.RootPort.IsExists()) { rootPort = (MonoPort)part.RootPort; } else // 如果该部件没有根接口.. { Debug.Log("Adding root port"); // 尝试在其子对象中寻找根接口 rootPort = part.transform.Find("RootPort")?.GetComponent <MonoPort>(); // 如果没有.. if (rootPort == null) { // 新创建一个 rootPort = new GameObject("RootPort").AddComponent <BasicPort>(); rootPort.transform.parent = part.transform; rootPort.transform.localPosition = Vector3.zero; } // 将根部件加入到部件上 part.AddPort(rootPort, true); } }
public override void OnInspectorGUI() { DrawDefaultInspector(); if (GUILayout.Button("添加接口")) { var count = part.PortCount; var port = new GameObject($"Port{count}").AddComponent <BasicPort>(); port.transform.parent = part.transform; port.transform.localPosition = Vector3.zero; if (!part.AddPort(port)) { Debug.LogWarning("添加新接口失败!"); DestroyImmediate(port.gameObject); } } if (GUILayout.Button("添加辅助接口")) { var count = part.PortCount; var port = new GameObject($"AsstPort{count}").AddComponent <AssistantPort>(); port.transform.parent = part.transform; port.transform.localPosition = Vector3.zero; if (!part.AddPort(port)) { Debug.LogWarning("添加新接口失败!"); DestroyImmediate(port.gameObject); } } if (selectedPort != null && selectedPort.IsExists()) { if (GUILayout.Button("移除接口")) { if (!part.RemovePort(selectedPort)) { Debug.LogWarning("移除接口失败!"); } else { DestroyImmediate(selectedPort.gameObject); selectedPort = null; } } else { if (!serializedPort.IsExists()) { GetSelectedPortInfo(); } DrawSelectedPortInspector(); } } }
/// <summary> /// 绘制端口 /// </summary> /// <param name="port"></param> void DrawPort(MonoPort port, Color color) { if (port == null) { return; } Handles.color = color; Vector3 position = port.transform.position; //float size = HandleUtility.GetHandleSize(position); DrawDirectionArrow(position, port.transform.rotation, 0.1f); if (Handles.Button(position, Quaternion.identity, kPortSize, kPortPickSize, Handles.DotHandleCap)) { selectedPort = port; GetSelectedPortInfo(); Repaint(); } if (selectedPort == port) { var rotation = port.transform.rotation; if (selectedPort.IsAssistantPort) { Handles.Label(position + new Vector3(-0.05f, 0.05f), $"接口名称:{port.name}"); } else { Handles.Label(position + new Vector3(-0.05f, 0.05f), $"接口名称:{port.name}\n可接纳部件类型:{portAcceptedType}"); } EditorGUI.BeginChangeCheck(); rotation = Handles.DoRotationHandle(rotation, position); position = Handles.FreeMoveHandle(position, rotation, kPortPickSize, Vector3.one * 0.1f, Handles.DotHandleCap); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(port, "Move port"); EditorUtility.SetDirty(port); port.transform.position = position; port.transform.rotation = rotation; position = part.transform.InverseTransformPoint(position); position.z = rotation.eulerAngles.z; port.Position = position; Repaint(); } } }
protected override void Awake() { base.Awake(); if (asstPortList.Count <= 0) { Debug.LogError($"该枪管 {PartName} 需要至少一个辅助接口作为射弹口."); return; } foreach (MonoPort p in asstPortList) { if (p != null) { FirePort = p; break; } } }