Проблема с перемещением объекта в Unity
На сцене есть красная сфера и красная платформа с белой сферой (дочерний объект от платформы).
При контакте красной сферы с триггером платформы белая сфера удаляется, а красная должна встать на её место и делается дочерней от платформы.
Вот так выглядит описание триггера (скрипт на платформе):
private void OnTriggerStay(Collider other)
{
if (other.gameObject.CompareTag(TagManager.GetTag(TagType.Cargo)))
{
var cargo = other.gameObject.GetComponent<Cargo>(); //доступ к скрипту на красной сфере
if(cargo.Color == Color && cargo.Layer == Layer)
{
Debug.Log("Complete");
SetActive(false); //выключаю коллайдер платформы (триггер)
cargo.transform.parent = transform; //делаю красную сферу дочерней от платформы
//Три попытки поместить красную сферу в позицию белой сферы:
//cargo.transform.position = _child.transform.position;
//cargo.FinishPosition();
cargo.transform.localPosition = new Vector3(0f, 1f, 0f);
Destroy(_child.gameObject); //удаляю белую сферу
}
else
{
Debug.Log("No complete");
cargo.StartPosition();
}
}
}
Но красная сфера во всех случаях перемещается в заданную позицию (Vector3(0f, 1f, 0f)) только на долю секунды, а потом её координаты меняются на те, которые были при столкновении красной сферы с триггером, но уже в локальных координатах платформы (за пределами игрового поля).
Скрипт на красной сфере:
public sealed class Cargo : BaseObject
{
private Vector3 _startPosition;
private Vector3 _finishPosition;
private void Awake()
{
_startPosition = transform.position;
_finishPosition = new Vector3(0f, 1f, 0f);
}
public void FinishPosition()
{
transform.position = _finishPosition;
}
public void StartPosition()
{
transform.position = _startPosition;
}
}
