🙌

なんかUnityでポチッと処理をしたい時のやつのメモ

2024/01/21に公開

ポチッと押したら処理が走っていい感じにしたい時に毎回こうしてる。

今回の例

各攻撃モーション時のCollisionごとのダメージの値がハードコートされてたのでその設定を外だししたい。
外だし後にそのデータを外だししたファイルに移したい。
手作業でぽちぽちしたくない

作ったもの

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Data;
using UnityEditor;
using UnityEngine;

public class CharacterScriptableObjectToolWindow : EditorWindow
{

    // Add menu named "My Window" to the Window menu
    [MenuItem("Tools/雑にセットアップする用")]
    static void Init()
    {
        // Get existing open window or if none, make a new one:
        CharacterScriptableObjectToolWindow window = (CharacterScriptableObjectToolWindow) EditorWindow.GetWindow(typeof(CharacterScriptableObjectToolWindow));
        window.Show();

    }

    private void OnGUI()
    {
        if (GUILayout.Button("ModifyCharacterScriptables"))
        {
            ModifyCharacterScriptables();
        }
    }
    
    
    void ModifyCharacterScriptables()
    {
        string[] guids = AssetDatabase.FindAssets("t:CharacterScriptableParams");
        foreach (string guid in guids)
        {
            string path = AssetDatabase.GUIDToAssetPath(guid);
            CharacterScriptableParams character = AssetDatabase.LoadAssetAtPath<CharacterScriptableParams>(path);

            if (character != null)
            {
                // ここでcharacterのプロパティを変更する
                character.attackCollisionParameters = GenerateAttackPowerMapForCharacter(character.character);

                EditorUtility.SetDirty(character);
            }
        }

        AssetDatabase.SaveAssets();
    }

    AttackCollisionParameter[] GenerateAttackPowerMapForCharacter(Character character)
    {
        
    // 元々ハードコートされてたコードをコピーしてきた。
        var mAttackPowerMap = new Dictionary<CollisionJudger.AttackCollisionType, AttackCollisionParameter>()
        {
            { CollisionJudger.AttackCollisionType.Upper, new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Upper, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Charge, new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Charge, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Run, new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Run, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Bomb, new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Bomb, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Attack_S, new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Attack_S, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Attack_L,  new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Attack_L, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Attack_Swing1,  new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Attack_Swing1, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Attack_Swing2,  new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Attack_Swing2, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Tackle,  new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Tackle, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Knuckle,  new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Knuckle, 0, 0, 0)},
            { CollisionJudger.AttackCollisionType.Scream,  new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Scream, 0, 0, 0)},
            // ...他のAttackCollisionTypeについても同様に...
        };
        switch (character)
        {
            case Character.SmallPigA:
            case Character.MiddlePigA:
            case Character.LargePigA:
            case Character.SmallPigB:
            case Character.MiddlePigB:
            case Character.LargePigB:
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Upper] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Upper, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Charge] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Charge, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Run] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Run, 1, 0, 0);
                break;
            case Character.PoisonPig:
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Upper] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Upper, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Charge] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Charge, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Run] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Run, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.PoisonBullet] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.PoisonBullet, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.PoisonPool] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.PoisonPool, 1, 0, 0);
                break;
            case Character.BombPig:
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Bomb] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Bomb, 1, 0, 0);
                break;
            case Character.Kudo:
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Attack_S] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Attack_S, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Attack_L] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Attack_L, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Tackle] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Tackle, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Knuckle] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Knuckle, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Scream] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Scream, 1, 0, 0);
                break;
            case Character.KuroUsagi:
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Usagi_Tategiri] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Usagi_Tategiri, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Usagi_Issen] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Usagi_Issen, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Usagi_Iai] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Usagi_Iai, 1, 0, 0);
                break;
            case Character.ShiroUsagi:
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Usagi_Tategiri] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Usagi_Tategiri, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Usagi_Issen] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Usagi_Issen, 1, 0, 0);
                mAttackPowerMap[CollisionJudger.AttackCollisionType.Usagi_Iai] = new AttackCollisionParameter(CollisionJudger.AttackCollisionType.Usagi_Iai, 1, 0, 0);
                break;
            default:
                break;
        }

        return mAttackPowerMap.Select(x => x.Value).ToArray();
    }
}

できたもの



ポチッと押すと処理が走るよ。

Discussion