Как выполнить команду, если два игровых объекта находятся в определенной позиции? - PullRequest
1 голос
/ 12 февраля 2020

Я борюсь с проблемой, пока не могу найти решение, может быть, вы мне поможете! Итак, у меня есть конвейер и случайные игровые объекты, которые появляются на нем, и конвейер транспортирует объекты до конца. На конвейере у меня есть сортировочная палитра, которую я хочу вращать на определенные углы в зависимости от того, какой игровой объект порожден, но я хочу, чтобы они вращались только тогда, когда игровой объект находится близко к поддону, вид работающего датчика, например, на поддоне есть датчик и когда объект находится на определенном расстоянии, поддон знает угол, на который он должен повернуться. Объекты движутся на конвейере по оси X. Я хочу знать, как проверить, когда игровой объект достиг точки, код, который я использую ниже, не работает. Спасибо за вашу помощь!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//i have a conveyor with 2 bands next to eachother moving on opposite directions
public class Stackoverflow : MonoBehaviour
{
    public Slider x;
    public InputField inputspawn;
    public InputField inputtime;
    public Slider z;
    public GameObject[] prefabs;
    Vector3 V = new Vector3();
    public GameObject coordX1, coordX2, coordZ1, coordZ2;
    int spawnvalue;
    float timevalue;
    bool value = false;
    public Slider paleta1;//slider that rotates 1st pallet
    public Slider paleta2;//slider that rotates 2nd pallet
    public GameObject verificationpoint;//when this point is reached by GO, the pallet should rotate

    float[] unghiuri = { 164.6144f, 205.6429f, 87.5875f, 164.6144f };//angles for 1st pallet
    float[] ung = { 154.3571f, 90f, 90f, 90f};// angles for 2nd pallet

    public int T;
    public GameObject paleta1go, paleta2go;// pallet 1 and 2
    public float delta;
    public float dist;

    void Start()
    {
        Vector3 position = new Vector3(UnityEngine.Random.Range( coordX1.transform.position.x, coordX2.transform.position.x), 3f, UnityEngine.Random.Range(coordZ1.transform.position.z, coordZ2.transform.position.z));
        T = UnityEngine.Random.Range(0, prefabs.Length);
        Instantiate(prefabs[T], position, Quaternion.identity);
        paleta1.value = unghiuri[T];
        paleta2.value = ung[T];
        StartCoroutine(Spawn());
    }
    void Update()
    {
        if (value == true)
        {
            Vector3 position = new Vector3(UnityEngine.Random.Range(coordX1.transform.position.x, coordX2.transform.position.x), 3f, UnityEngine.Random.Range(coordZ1.transform.position.z, coordZ2.transform.position.z));
            V = position;
            spawnvalue = int.Parse(inputspawn.text);
            timevalue = float.Parse(inputtime.text);
            dist = Vector3.Distance(paleta1go.transform.position, prefabs[T].transform.position);
            if (prefabs[T].transform.position.x == verificationpoint.transform.position.x)//that's how i verify if the GO reaches verification point
            {
                paleta1.value = unghiuri[T];
                paleta2.value = ung[T];
            }

        }

    }
    IEnumerator Spawn()
    {
        while (true)
        {
            if(value)
            for(int i = 0; i < spawnvalue; ++i)
            {
                Vector3 position = new Vector3(UnityEngine.Random.Range(coordX1.transform.position.x, coordX2.transform.position.x), 3f, UnityEngine.Random.Range(coordZ1.transform.position.z, coordZ2.transform.position.z));
                V = position;
                T = UnityEngine.Random.Range(0, prefabs.Length);
                Instantiate(prefabs[T], V, Quaternion.identity);

                }


            yield return new WaitForSeconds(timevalue);


        }
    }
    public void ToggleState(bool t)
    {
        value = !value;
    }
}
...