private Collider CreateHitboxCollider(Transform parent, string objectName, HitboxHandler parentHandler, Vector3 colliderCentre, Vector3 colliderSize, Vector3 localRotation) { GameObject geo = new GameObject(); geo.name = objectName; geo.transform.SetParent(parent); geo.transform.localPosition = Vector3.zero; Quaternion rot = Quaternion.Euler(localRotation); geo.transform.localRotation = rot; geo.transform.localScale = Vector3.one; HitboxColliderHandler colliderHandler = geo.AddComponent <HitboxColliderHandler>(); colliderHandler.parentHandler = parentHandler; BoxCollider boxCol = geo.AddComponent <BoxCollider>(); boxCol.isTrigger = true; boxCol.center = colliderCentre; boxCol.size = colliderSize; if (isPlayer == true) { geo.layer = 10; } else { geo.layer = 11; } return(boxCol); }
private void CreateParentHitboxHandler(Transform parent, string objectName, HitboxType hitboxType, Transform parentRigidbodyTransform) { HitboxHandler[] handlers = GetComponentsInChildren <HitboxHandler>(); HitboxHandler hitboxTargetHandler = null; foreach (HitboxHandler item in handlers) { if (item.hitboxType == hitboxType) { return; } } GameObject geo = new GameObject(); geo.transform.SetParent(parent); geo.name = objectName; geo.transform.localPosition = Vector3.zero; geo.transform.localRotation = Quaternion.identity; geo.transform.localScale = Vector3.one; hitboxTargetHandler = geo.AddComponent <HitboxHandler>(); hitboxTargetHandler.hitboxType = hitboxType; hitboxTargetHandler.parentRigidbody = parentRigidbodyTransform.GetComponent <Rigidbody>(); switch (hitboxType) { case HitboxType.HEAD: hitboxTargetHandler.hitboxColliders.Add(CreateHitboxCollider(geo.transform, "HITBOX_HEAD", hitboxTargetHandler, new Vector3(0f, -0.04f, -0.01f), new Vector3(0.19f, 0.27f, 0.21f), Vector3.zero)); break; case HitboxType.UPPER_BODY: hitboxTargetHandler.hitboxColliders.Add(CreateHitboxCollider(geo.transform, "HITBOX_UPPER_BODY", hitboxTargetHandler, new Vector3(0.018f, -0.004f, -0.01f), new Vector3(0.19f, 0.27f, 0.21f), Vector3.zero)); break; case HitboxType.L_ARM: hitboxTargetHandler.hitboxColliders.Add(CreateHitboxCollider(leftElbow.transform, "HITBOX_L_Elbow", hitboxTargetHandler, new Vector3(-0.066f, 0.01f, 0.009f), new Vector3(0.288f, 0.095f, 0.08f), Vector3.zero)); hitboxTargetHandler.hitboxColliders.Add(CreateHitboxCollider(leftShoulder.transform, "HITBOX_L_Shoulder", hitboxTargetHandler, new Vector3(-0.093f, 0.001f, -0.0101f), new Vector3(0.328f, 0.134f, 0.094f), Vector3.zero)); break; case HitboxType.R_ARM: hitboxTargetHandler.hitboxColliders.Add(CreateHitboxCollider(rightElbow.transform, "HITBOX_R_Elbow", hitboxTargetHandler, new Vector3(0.1f, 0.006f, 0f), new Vector3(0.288f, 0.085f, 0.07f), Vector3.zero)); hitboxTargetHandler.hitboxColliders.Add(CreateHitboxCollider(rightShoulder.transform, "HITBOX_R_Shoulder", hitboxTargetHandler, new Vector3(0.089f, 0.004f, 0.004f), new Vector3(0.359f, 0.103f, 0.111f), Vector3.zero)); break; case HitboxType.PROP: break; case HitboxType.LOWER_BODY: hitboxTargetHandler.hitboxColliders.Add(CreateHitboxCollider(geo.transform, "HITBOX_Lower_BODY", hitboxTargetHandler, new Vector3(-0.128f, -0.01f, 0.001f), new Vector3(0.39f, 0.33f, 0.20f), Vector3.zero)); break; } }
private void Awake() { OnFighterSet += () => { handler = fighter.GetComponent <HitboxHandler>(); }; }