使用排序算法对游戏对象进行排序

时间:2018-05-22 14:12:27

标签: c# sorting unity3d swap

我想通过使用排序算法在Unity中对5个球体进行排序。单击排序按钮后,它们将按排序顺序交换位置。我设法为游戏对象创建一个列表,但据我所知它只是对列表进行排序然后什么都不做。如何创建我想要的脚本?它将按游戏对象名称交换对象。 The Envrioment,  我到目前为止所编写的代码;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngine.UI;

namespace Assets
{

    class Gameobjects : MonoBehaviour
    {
        public Button s_YourButton;
        [SerializeField]
        private GameObject[] deck;

        public List<GameObject> instanciatedObjects;

        void Start()
        {
            Button btn = s_YourButton.GetComponent<Button>();
            //Calls the TaskOnClick method when you click the Button
            btn.onClick.AddListener(TaskOnClick);

        }

        void TaskOnClick()
        {
            Fill();
            instanciatedObjects = instanciatedObjects.OrderBy(Sphere => Sphere.name).ToList();
        }

        public void Fill()
        {
            instanciatedObjects = new List<GameObject>();
            for (int i = 0; i < deck.Length; i++)
            {
                instanciatedObjects.Add(Instantiate(deck[i]) as GameObject);
            }
        }
    }
}

我欢迎任何想法进行进一步的研究,我是Unity的新手。

1 个答案:

答案 0 :(得分:2)

首先,您可以存储旧的Vector3列表。在List.Add(spawnedObject.transform.position);中的for循环内基本Fill()

然后在对它们进行排序后,循环instanciatedObjects并按照与Vector3列表相同的顺序设置它们。

List<Vector3> vectorList = new List<Vector3>();
void TaskOnClick()
{
    Fill();
    instantiatedObjects = instantiatedObjects.OrderBy(Sphere => Sphere.name).ToList();
    for(int i = 0; i < instanciatedObjects.Count; i++)
    {
        instantiatedObjects[i].transform.position = vectorList[i];
    }
}

public void Fill()
{
    vectorList.Clear();
    instantiatedObjects = new List<GameObject>();
    for (int i = 0; i < deck.Length; i++)
    {
        GameObject spawnedObject = Instantiate(deck[i]) as GameObject;
        instantiatedObjects.Add(spawnedObject);
        vectorList.Add(spawnedObject.transform.position);
    }
}

顺便说一句,您的代码中的拼写错误:instanciatedObjects应为instantiatedObjects