public GameObject AddColliderComponentFromParam(KeyFrameCollider keyframe) { var ret = new GameObject("test"); var objtrans = ret.GetComponent <Transform>(); var colliderinfo = ret.AddComponent <ColliderInfo>(); colliderinfo.keyframecollider = keyframe; var param = keyframe.colliderParam; float sign = (direction == DirectionType.Forward) ? 1 : -1; if (param is RectColliderParam) { var rect = param as RectColliderParam; if (rect.is2d) { var col = ret.AddComponent <BoxCollider2D>(); col.offset = new Vector3(rect.rect.center.x * sign, rect.rect.center.y); col.size = new Vector3(rect.rect.size.x, rect.rect.size.y); col.tag = keyframe.tag; col.gameObject.layer = LayerMask.NameToLayer(keyframe.layer); col.isTrigger = true; var r2d = ret.AddComponent <Rigidbody2D>(); r2d.gravityScale = 0; r2d.isKinematic = true; } else { var col = ret.AddComponent <BoxCollider>(); col.center = new Vector3(rect.rect.center.x * sign, rect.rect.center.y, 0.0f); col.size = new Vector3(rect.rect.size.x, rect.rect.size.y, 0.2f); col.tag = keyframe.tag; col.gameObject.layer = LayerMask.NameToLayer(keyframe.layer); col.isTrigger = true; var rd = ret.AddComponent <Rigidbody>(); rd.isKinematic = true; rd.useGravity = false; } } else if (param is SphereColliderParam) { var sphere = param as SphereColliderParam; var col = ret.AddComponent <SphereCollider>(); col.center = new Vector3(sphere.position.x, sphere.position.y, 0.0f); col.radius = sphere.radius; col.tag = keyframe.tag; col.gameObject.layer = LayerMask.NameToLayer(keyframe.layer); col.isTrigger = true; var rd = ret.AddComponent <Rigidbody>(); rd.isKinematic = true; rd.useGravity = false; } else if (param is CapsuleColliderParam) { Debug.LogError("Not Implemented"); } else { Debug.LogError("Not Implemented"); } objtrans.SetParent(gameObject.transform, false); return(ret); }
private void DrawHitboxes() { traceAnimMode = (TraceAnimMode)EditorGUILayout.Popup("trace Animation Mode", (int)traceAnimMode, new string[] { "Off", "AnimationWindow", "Scene(PlayOnly)" }); targetComponents.inspectorTemp.traceAnimMode = (int)traceAnimMode; if (traceAnimMode == TraceAnimMode.AnimationWindow) { var currentFrame = AnimationHelper.GetCurrentFrame(); targetComponents.inspectorTemp.keyframeIndex = currentFrame; var AnimGuiClipname = AnimationHelper.GetCurrentClipName(); var preanimationindex = targetComponents.inspectorTemp.animationindex; targetComponents.inspectorTemp.animationindex = EditorGUILayout.Popup("AnimStateName", targetComponents.inspectorTemp.animationindex, targetComponents.GetStateNames().ToArray()); var selectedStateName = targetComponents.GetStateNames()[targetComponents.inspectorTemp.animationindex]; var selectedState = targetComponents.GetState(selectedStateName); if (AnimGuiClipname != selectedState.clip.name) { AnimationHelper.SetCurrentClip(selectedState.clip); Debug.Log("From HitBoxComponent: Now AnimationWindow is synchronized with HitBoxComponent. If you want to change AnimationClip of AnimationWindow, turn \"TraceAnimMode\" off on HitBoxComponent Inspector"); } EditorGUILayout.LabelField("Clipname", selectedState.clip.name); if (targetComponents.inspectorTemp.keyframeIndex >= targetComponents.hitboxes[selectedStateName].keyframes.Count) { return; } ; } if (traceAnimMode == TraceAnimMode.Scene) { if (!Application.isPlaying) { return; } var currentFrame = targetComponents.GetNowKeyFrame(); targetComponents.inspectorTemp.keyframeIndex = currentFrame; var nowstate = targetComponents.GetNowState(); EditorGUILayout.LabelField("NowStateName", nowstate.name); targetComponents.inspectorTemp.animationindex = targetComponents.GetStateNames().FindIndex(e => e == nowstate.name); EditorGUILayout.LabelField("Clipname", nowstate.clip.name); } if (traceAnimMode == TraceAnimMode.Off) { targetComponents.inspectorTemp.animationindex = EditorGUILayout.Popup("AnimStateName", targetComponents.inspectorTemp.animationindex, targetComponents.GetStateNames().ToArray()); var statename = targetComponents.GetStateNames()[targetComponents.inspectorTemp.animationindex]; EditorGUILayout.LabelField("ClipName", targetComponents.GetClipName(statename)); } EditorGUILayout.LabelField("Flip", targetComponents.direction.ToString()); if (Application.isPlaying && traceAnimMode == TraceAnimMode.Off) { if (GUILayout.Button("Show Now KeyFrame Data")) { var nowanim = targetComponents.GetNowStateName(); var keyframe = targetComponents.GetNowKeyFrame(); targetComponents.inspectorTemp.animationindex = targetComponents.GetStateNames().FindIndex(0, e => e == nowanim); targetComponents.inspectorTemp.keyframeIndex = keyframe; } } var animname = targetComponents.GetStateNames()[targetComponents.inspectorTemp.animationindex]; var keyframenum = targetComponents.hitboxes[animname].keyframes.Count; targetComponents.inspectorTemp.keyframeIndex = EditorGUILayout.Popup("KeyFrameIndex", targetComponents.inspectorTemp.keyframeIndex, Enumerable.Range(0, keyframenum).Select(e => e.ToString() + (targetComponents.hitboxes[animname].keyframes[e].colliders.Count > 0 ? " *" : "")).ToArray()); if (traceAnimMode == TraceAnimMode.AnimationWindow) { AnimationHelper.SetCurrentFrame(targetComponents.inspectorTemp.keyframeIndex); AnimationHelper.RepaintOpenAnimationWindow(); } var animationindex = targetComponents.inspectorTemp.animationindex; var keyframeIndex = targetComponents.inspectorTemp.keyframeIndex; for (int i = 0; i < targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.Count; i++) { GUILayout.BeginVertical(hitboxBackgroundStyle); GUILayout.Label("Hitbox " + i); var colliderdata = targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders[i]; //collider info colliderdata.tag = EditorGUILayout.TextField("tag", colliderdata.tag); colliderdata.layer = EditorGUILayout.TextField("layer", colliderdata.layer); colliderdata.dulation = EditorGUILayout.IntField("dulation", colliderdata.dulation); colliderdata.data = EditorGUILayout.TextField("data", colliderdata.data); //collider shape if (colliderdata.colliderParam == null) { colliderdata.colliderParam = CreateInstance <RectColliderParam>(); } var selectedshape = (ColliderShape)EditorGUILayout.EnumPopup(colliderdata.colliderParam.GetShape()); var newcolliderparam = ColliderParam.ColliderParamFactory(selectedshape); if (newcolliderparam != null && colliderdata.colliderParam.GetShape() != selectedshape) { var path = AssetDatabase.GetAssetPath(targetComponents.hitboxes); AssetDatabase.RemoveObjectFromAsset(colliderdata.colliderParam); colliderdata.colliderParam = newcolliderparam; AssetDatabase.AddObjectToAsset(colliderdata.colliderParam, path); AssetDatabase.Refresh(); AssetDatabase.ImportAsset(path); } DrawColliderParam(colliderdata.colliderParam); EditorUtility.SetDirty(colliderdata.colliderParam); if (GUILayout.Button("Remove HitBox", GUILayout.Width(100))) { var path = AssetDatabase.GetAssetPath(targetComponents.hitboxes); AssetDatabase.RemoveObjectFromAsset(targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders[i].colliderParam); AssetDatabase.Refresh(); AssetDatabase.ImportAsset(path); for (int j = i; j < targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.Count - 1; j++) { targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders[j] = targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders[j + 1]; } targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.RemoveAt(targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.Count - 1); SceneView.RepaintAll(); } GUILayout.EndVertical(); //separate GUILayout.BeginVertical(GUILayout.Height(10)); GUILayout.Label("", GUILayout.Height(10)); GUILayout.EndVertical(); } if (GUILayout.Button("Add Hitbox", GUILayout.Width(100))) { var addData = new KeyFrameCollider(); addData.colliderParam = CreateInstance <RectColliderParam>(); addData.startframe = keyframeIndex; targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.Add(addData); SceneView.RepaintAll(); var path = AssetDatabase.GetAssetPath(targetComponents.hitboxes); AssetDatabase.AddObjectToAsset(addData.colliderParam, path); //インポート処理を走らせて最新の状態にする AssetDatabase.Refresh(); AssetDatabase.ImportAsset(path); } }