AttachShuffledNumberIDs.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Collections.Generic;
  2. using UnityEditor;
  3. using UnityEditor.SceneManagement;
  4. using UnityEngine;
  5. using UnityEngine.SceneManagement;
  6. public class AttachShuffledNumberIDs : MonoBehaviour
  7. {
  8. [MenuItem("Window/Attach/AttachShuffledNumberIDs")]
  9. static void Attach_ShuffledNumberIDs()
  10. {
  11. UnityEngine.Random.InitState(1145141919);
  12. foreach (GameObject obj in Selection.gameObjects)
  13. {
  14. if (obj.GetComponent<ShuffleDeckCode>() != null)
  15. {
  16. ShuffleDeckCode shuffleDeckCode = obj.GetComponent<ShuffleDeckCode>();
  17. shuffleDeckCode.ShuffledNumberIDs = new int[ConvertBinaryNumber.numbers.Length];
  18. for(int i=0;i< shuffleDeckCode.ShuffledNumberIDs.Length;i++)
  19. {
  20. shuffleDeckCode.ShuffledNumberIDs[i] = i;
  21. }
  22. Shuffle(shuffleDeckCode.ShuffledNumberIDs);
  23. EditorGUI.BeginChangeCheck();
  24. if (EditorGUI.EndChangeCheck())
  25. {
  26. var scene = SceneManager.GetActiveScene();
  27. EditorSceneManager.MarkSceneDirty(scene);
  28. }
  29. return;
  30. }
  31. }
  32. }
  33. static void Shuffle(int[] numbers)
  34. {
  35. for (int i = 0; i < numbers.Length; i++)
  36. {
  37. int temp = numbers[i]; // 現在の要素を預けておく
  38. int randomIndex = UnityEngine.Random.Range(0, numbers.Length); // 入れ替える先をランダムに選ぶ
  39. numbers[i] = numbers[randomIndex]; // 現在の要素に上書き
  40. numbers[randomIndex] = temp; // 入れ替え元に預けておいた要素を与える
  41. }
  42. }
  43. }