✌️
バブルソートのコード②(色の追加)
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class BubbleSortManager : MonoBehaviour
{
public GameObject[] sortableObjects; // ソート対象のオブジェクトを保持する配列
// ソートの際に使用する色
public Color swapColor1 = Color.blue;
public Color swapColor2 = Color.red;
void Start()
{
StartCoroutine(BubbleSortCoroutine());
}
IEnumerator BubbleSortCoroutine()
{
int n = sortableObjects.Length;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
int currentValue = GetValue(sortableObjects[j]);
int nextValue = GetValue(sortableObjects[j + 1]);
// ソート対象の整数を比較して、必要に応じて入れ替える
if (currentValue > nextValue)
{
StartCoroutine(SwapObjectsWithColorChange(j, j + 1));
LogArrayOrder();
}
yield return new WaitForSeconds(1f); // ソートの過程を見やすくするために待機
}
}
}
int GetValue(GameObject obj)
{
string[] nameParts = obj.name.Split('_');
if (nameParts.Length == 2)
{
int value;
if (int.TryParse(nameParts[1], out value))
{
return value;
}
}
return 0;
}
IEnumerator SwapObjectsWithColorChange(int index1, int index2)
{
// 配列内の2つのオブジェクトを入れ替える
GameObject temp = sortableObjects[index1];
sortableObjects[index1] = sortableObjects[index2];
sortableObjects[index2] = temp;
// オブジェクトの位置を交換
Vector3 tempPosition = sortableObjects[index1].transform.position;
sortableObjects[index1].transform.position = sortableObjects[index2].transform.position;
sortableObjects[index2].transform.position = tempPosition;
// オブジェクトの色を変更(入れ替え瞬間のみ)
SetObjectColor(sortableObjects[index1], swapColor1);
SetObjectColor(sortableObjects[index2], swapColor2);
yield return new WaitForSeconds(1f); // 色を変更した状態を見やすくするために待機
// オブジェクトの色を元に戻す
SetObjectColor(sortableObjects[index1], Color.white);
SetObjectColor(sortableObjects[index2], Color.white);
}
// オブジェクトの色を設定するメソッド
void SetObjectColor(GameObject obj, Color color)
{
Renderer renderer = obj.GetComponent<Renderer>();
if (renderer != null)
{
renderer.material.color = color;
}
}
void LogArrayOrder()
{
Debug.Log("Current Array Order: " + string.Join(", ", sortableObjects.Select(obj => obj.name)));
}
}
Discussion