Files
BABA_YAGA/Assets/Scripts/Player/MeleeWeapon/Editor/vCreateMeleeWeaponEditor.cs
2026-06-04 10:42:23 +07:00

120 lines
4.3 KiB
C#

using UnityEngine;
using System.Collections;
using UnityEditor;
using System;
namespace Invector.vMelee
{
public class vCreateMeleeWeaponEditor : EditorWindow
{
GUISkin skin;
GameObject obj;
Vector2 rect = new Vector2(480, 210);
Vector2 scrool;
[MenuItem("Invector/Melee Combat/Create Melee Weapon")]
public static void CreateNewWeapon()
{
GetWindow<vCreateMeleeWeaponEditor>();
}
void OnGUI()
{
if (!skin) skin = Resources.Load("vSkin") as GUISkin;
GUI.skin = skin;
this.minSize = rect;
this.titleContent = new GUIContent("Melee Weapon", null, "Melee Weapon Creator Window");
GUILayout.BeginVertical("Melee Weapon Creator Window", "window");
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
GUILayout.BeginVertical("box");
EditorGUILayout.HelpBox("Make sure that your object doens't have any colliders or scripts, just the mesh", MessageType.Info);
obj = EditorGUILayout.ObjectField("FBX Model", obj, typeof(GameObject), true, GUILayout.ExpandWidth(true)) as GameObject;
if (obj != null && obj.GetComponent<vMeleeWeapon>() != null)
{
EditorGUILayout.HelpBox("This gameObject already contains the component vMeleeWeapon", MessageType.Warning);
}
GUILayout.EndVertical();
GUILayout.BeginHorizontal("box");
EditorGUILayout.LabelField("Need to know how it works?");
if (GUILayout.Button("Video Tutorial"))
{
Application.OpenURL("https://www.youtube.com/watch?v=1aA_PU9-G-0&index=3&list=PLvgXGzhT_qehtuCYl2oyL-LrWoT7fhg9d");
}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (obj != null)
{
if (GUILayout.Button("Create"))
Create();
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndVertical();
}
private GameObject InstantiateNewWeapon(GameObject selected)
{
if (selected == null) return selected;
if (selected.scene.IsValid()) return selected;
return PrefabUtility.InstantiatePrefab(selected) as GameObject;
}
/// <summary>
/// Created the Third Person Controller
/// </summary>
public virtual void Create()
{
// base for the character
GameObject newWeapon = InstantiateNewWeapon(obj);
if (!newWeapon)
return;
newWeapon.gameObject.name = obj.name;
var weaponObj = new GameObject(newWeapon.name);
weaponObj.transform.position = newWeapon.transform.position;
weaponObj.transform.rotation = newWeapon.transform.rotation;
weaponObj.gameObject.tag = "Weapon";
var components = new GameObject("Components");
components.transform.position = newWeapon.transform.position;
components.transform.rotation = newWeapon.transform.rotation;
components.gameObject.tag = "Weapon";
var hitBox = new GameObject("hitBox", typeof(BoxCollider), typeof(vHitBox));
hitBox.transform.position = newWeapon.transform.position;
hitBox.transform.rotation = newWeapon.transform.rotation;
hitBox.gameObject.tag = "Weapon";
var layer = LayerMask.NameToLayer("Ignore Raycast");
hitBox.gameObject.layer = layer;
components.transform.SetParent(weaponObj.transform);
hitBox.transform.SetParent(components.transform);
var weapon = weaponObj.AddComponent<vMeleeWeapon>();
weapon.hitBoxes = new System.Collections.Generic.List<vHitBox>();
weapon.hitBoxes.Add(hitBox.GetComponent<vHitBox>());
newWeapon.transform.SetParent(components.transform);
newWeapon.transform.localPosition = Vector3.zero;
newWeapon.transform.localEulerAngles = Vector3.zero;
newWeapon.gameObject.tag = "Weapon";
this.Close();
}
}
}