

Unityである範囲までCubeを生成するという機能があって、生成範囲をユーザーがUIから選択することが出来ます。選択してもらったサイズでCubeを生成するのですが生成する関数をマルチキャストデリゲートで登録しています。登録されたデリゲートをどれか一つ選択して呼び出すにはどのように書けばよいですか？

[code]

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CubeSpawner : MonoBehaviour
    {
        //スポーンサイズは10*10, 20*20, 30*30
        //デリゲート
        public delegate void DelegateFunc();
    
        public DelegateFunc delegateFunc;
    　　
    
        [SerializeField]
        private GameObject ACube;
        [SerializeField]
        private GameObject BCube;
    
    
    
        void Start()
        {
            //デリゲートの登録
            delegateFunc += GenerateCubeSizeTen;
            delegateFunc += GenerateCubeSizeTwenty;
            delegateFunc += GenerateCubeSizeThirty;
            delegateFunc();  //登録されたデリゲートを呼び出し
        }
    
        //10*10の場合
        public void GenerateCubeSizeTen()
        {
    
                for (int x = 0; x <= 10; x++)
                {
                    for (int z = 1; z <= 10; z++)
                    {
                        for (int y = 0; y >= -1; y--)
                        {
                            Instantiate(ACube, new Vector3(x, y, z), Quaternion.identity);
                        }
    
                    }
    
                }
    
                for (int x = 0; x <= 10; x++)
                {
                    for (int z = 1; z <= 10; z++)
                    {
                        for (int y = -2; y >= -10; y--)
                        {
                            Instantiate(BCube, new Vector3(x, y, z), Quaternion.identity);
                        }
    
                    }
    
                }
            
            
        }
    
        //20*20の場合
        public void GenerateCubeSizeTwenty()
        {
            for (int x = 0; x <= 20; x++)
            {
                for (int z = 1; z <= 20; z++)
                {
                    for (int y = 0; y >= -1; y--)
                    {
                        Instantiate(ACube, new Vector3(x, y, z), Quaternion.identity);
                    }
    
                }
    
            }
    
            for (int x = 0; x <= 20; x++)
            {
                for (int z = 1; z <= 20; z++)
                {
                    for (int y = -2; y >= -10; y--)
                    {
                        Instantiate(BCube, new Vector3(x, y, z), Quaternion.identity);
                    }
    
                }
    
            }
        }
        //30*30の場合
        public void GenerateCubeSizeThirty()
        {
            for (int x = 0; x <= 30; x++)
            {
                for (int z = 1; z <= 30; z++)
                {
                    for (int y = 0; y >= -1; y--)
                    {
                        Instantiate(ACube, new Vector3(x, y, z), Quaternion.identity);
                    }
    
                }
    
            }
    
            for (int x = 0; x <= 30; x++)
            {
                for (int z = 1; z <= 30; z++)
                {
                    for (int y = -2; y >= -10; y--)
                    {
                        Instantiate(BCube, new Vector3(x, y, z), Quaternion.identity);
                    }
    
                }
    
            }
        }
    
    }
    
[/code]


CC BY-SA 4.0
2023-03-15T00:53:08.813
94177
2023-03-17T10:16:27.360
2023-03-15T02:12:30.170
3060
31173
question
c# unity3d
登録されたマルチなデリゲートを選択して呼び出したい


デリゲートに引数を追加してDropDownメニュー（UI)の選択された値をswitch文を使って見て格納します。その後Button(UI)をクリックしたときに先ほどの値を元に登録された関数をコールバックします。

[code]

    using System.Collections;
    using System.Collections.Generic;
    using System;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    using UnityEngine.UI;
    using UnityEngine.Events;
    
    public class Manager : MonoBehaviour
    {
        //デリゲート
        public delegate void DelegateFunc(int a);
    
        public DelegateFunc delegateFunc;
    
        public GameObject SettingDialogPanel;
        public GameObject GridObject;
        public InputField inputField;
        public Text ErrorText;
        public Button createButton;
    
        private GameObject clearFlagsSwappingObject;
    
        ClearFlagsSwapping clearFlagsSwappingScript;
    
        RestateSpawner spawner;
    
        public GameObject mainCam;
        public GameObject cam2;
    
        private int DropdownNum = 0;
    
        void Start()
        {
            SettingDialogPanel.SetActive(false);
            GridObject.SetActive(false);
    
            clearFlagsSwappingObject = GameObject.Find("Main Camera");
            clearFlagsSwappingScript = clearFlagsSwappingObject.GetComponent<ClearFlagsSwapping>();
    
    
            mainCam.SetActive(true);
            cam2.SetActive(false);
    
    
        }
    
    
        public void Create()
        {
            SettingDialogPanel.SetActive(true);
        }
        
        public void Quit()
        {
            SceneManager.LoadScene("GameScene");
        }
        //DropDown変更時
        public void Size(int value)
        {
    
                switch (value)
                {
    
                    case 0:
                        DropdownNum = value;
                        break;
                    case 1:
                        DropdownNum = value;
                        break;
                    case 2:
                        DropdownNum = value;
                        break;
                }
    
           
            
        }
        //Buttonクリック時
        public void Dialog()
        {
            if(inputField.text != "")
            {
                SettingDialogPanel.SetActive(false);
                clearFlagsSwappingScript.clearFlagsSwap();
                GridObject.SetActive(true);
                mainCam.SetActive(false);
                cam2.SetActive(true);
                //登録されたcubeを生成する関数をコールバック
                if (DropdownNum == 0)
                {
                    DelegateFunc a = spawner.GenerateCubeSizeTen;
                    a(DropdownNum);
                }else if(DropdownNum == 1)
                {
                    DelegateFunc a = spawner.GenerateCubeSizeTwenty;
                    a(DropdownNum);
                }else if(DropdownNum == 2)
                {
                    DelegateFunc a = spawner.GenerateCubeSizeThirty;
                    a(DropdownNum);
                }
            }
            else
            {
                Debug.LogError("入力エラー：入力してください。");
                ErrorText.text = "Input the name!";
            }
            
            
        }
    
    
    
    
    }
    
[/code]


CC BY-SA 4.0
2023-03-17T08:06:56.297
94221
2023-03-17T10:16:27.360
2023-03-17T10:16:27.360
26370
31173
94177
answer