public static Hitbox CreateHitbox(GameObject owner, Dictionary <string, string> dict)
    {
        GameObject hboxObj = GameObject.CreatePrimitive(PrimitiveType.Cube);

        hboxObj.name = "Hitbox";
        Hitbox hbox = hboxObj.AddComponent <Hitbox>();

        hbox.transform.SetParent(owner.transform);

        hbox.owner = owner.GetComponent <BattleObject>();

        Renderer rend = hbox.GetComponent <Renderer>();
        Material mat  = rend.material;

        mat.SetColor("_Color", new Color(1.0f, 0, 0, 0.5f));
        StandardShaderUtils.ChangeRenderMode(mat, StandardShaderUtils.BlendMode.Transparent);

        //Load all the hitbox info from the dict of values generated by the subaction
        hbox.LoadValuesFromDict(dict);
        hbox.SizeToOwner(owner.GetComponent <BattleObject>());
        //FIXME hitbox locks are odd. They're attached to actions for some reason?
        HitboxLock new_lock = new HitboxLock(hbox.lock_name);

        hbox.hitbox_lock = new_lock;

        return(hbox);
    }
    /////////////////////////////////////////////////////////////////////////////////////////
    //                              PRIVATE HELPER METHODS                                 //
    /////////////////////////////////////////////////////////////////////////////////////////

    private IEnumerator RemoveLock(HitboxLock hitbox_lock)
    {
        yield return(new WaitForSeconds(2));

        if (hitbox_locks.Contains(hitbox_lock)) //It can be unlocked later
        {
            hitbox_locks.Remove(hitbox_lock);
        }
    }
 /// <summary>
 /// Creates or loads a HitboxLock, an object preventing multiple hitboxes from all affecting a target at once if they should be part of the same attack
 /// </summary>
 private static void LockHitbox(GameAction action, Hitbox hbox)
 {
     //Set up the hitbox lock, if applicable
     if (hbox.lock_name != "")                                //If it has a name, we need to check if it's got a lock already
     {
         if (action.hitbox_locks.ContainsKey(hbox.lock_name)) //If it's already there, just assign it to the hitbox
         {
             hbox.hitbox_lock = action.hitbox_locks[hbox.lock_name];
         }
         else //If it has a name, but isn't in the list, we need to add it
         {
             HitboxLock new_lock = new HitboxLock(hbox.lock_name);
             hbox.hitbox_lock = new_lock;
             action.hitbox_locks.Add(hbox.lock_name, new_lock);
         }
     }
     else //If it's unnamed, we just need to create a new lock for this hitbox
     {
         HitboxLock new_lock = new HitboxLock("GenericLockName" + action.hitbox_locks.Count.ToString());
         hbox.hitbox_lock = new_lock;
         action.hitbox_locks.Add(new_lock.name, new_lock);
     }
 }