Я применил код к 3 объектам. Пока этот код переключает три чашки вокруг, чтобы они меняли местами. Код получает начальную позицию чашки, а затем конечное положение каждой чашки. Все 3 конечных положения на самом деле являются стартовыми позициями других чашек, так как я хочу, чтобы они поменялись местами в то же самое положение, что и другие чашки. Функция обновления делает так, что если конечное положение чашки (которое выбирается случайным образом) НЕ равно, что это начальная позиция, он будет перемещаться в одно из двух других мест, которые не были бы начальной позицией, случайным образом.Как преобразовать 3 объекта в позиции подкачки, но убедитесь, что они не перемещаются в позицию, к которой объект уже идет?
У меня возникли проблемы с выяснением пары вещей и попробовали несколько вещей, но я не думаю, что получаю код правильно. Я хочу:
Сделать чашки случайным образом перемещаться в их новое место, но не перемещать чашку в пятно, к которому уже идет другая чаша. (В настоящий момент, когда анимация воспроизводится, 2 чашки потенциально перемещаются в одно и то же пятно 3 пятен).
Я просто не уверен, в каком направлении идти. Мне также хотелось бы, чтобы эта анимация продолжала играть, а чашки продолжали беспорядочно менять местами. Было бы полезно получить точку в направлении выяснения этого.
Это то, что я хочу, чтобы конечный результат, чтобы выглядеть следующим образом: http://i249.photobucket.com/albums/gg240/OldNewby4507/shell-game-animated.gif
Спасибо заранее.
using UnityEngine;
using System.Collections;
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour
{
private Vector3 startPos;
private float lerp = 0, duration = 1;
public Vector3[] endPos = new Vector3[3];
int index;
Vector3 theNewPos;
void Start()
{
startPos = transform.position;
endPos [0] = GameObject.Find ("object1").transform.position;
endPos [1] = GameObject.Find ("object2").transform.position;
endPos [2] = GameObject.Find ("object3").transform.position;
index = Random.Range (0, endPos.Length);
theNewPos = endPos[index];
}
void Update() {
if (theNewPos != startPos) {
lerp += Time.deltaTime/duration;
transform.position = Vector3.Lerp (startPos, theNewPos, lerp);
}
}
}
Является ли сценарий для каждого объекта? –
Да, это один и тот же скрипт на каждом объекте –
Вам нужен скрипт, который управляет «слотами» и устанавливает чашки в движение. Движение может выполняться самими чашками, но другой скрипт должен управлять слотами (в списке или массиве), чтобы все чашки знали, что они делают. Например, псевдокод может выглядеть как «чистые чашки из всех слотов и четкие цели из всех чашек», «случайные петли» и присваивание первому свободному слоту »,« расскажите каждой чашке, в какой позиции находится их цель ». В сценарии чашки вы можете просто проверить, установлено ли целевое свойство, если оно движется в эту позицию. – Charleh