Конвейер unity3d

178
17 декабря 2019, 19:30

Нужно сделать конвейер на юнити.. Не просто передвижение объекта, а строго по центру конвейера. Вот код, который просто передвигает объект, лежащий на данном конвейере, без позиционирования в центре.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class moveobject : MonoBehaviour
{
    public GameObject Collider, Cube;
    public float rotationY;
    private Vector3 MoveObject = new Vector3(0, 0, 0);
    public float Speed = 1f;
    public float ScrollX = 0.18f;
    private void Update()
    {
        rotationY = Cube.transform.rotation.y;//Направление обьекта
        MoveObject = -transform.right;
    }
    private void OnTriggerStay(Collider collision)
    {
        if (collision.gameObject.layer == 9 || collision.gameObject.layer == 10)
        {
                Collider = collision.gameObject;//Движение обьекта
                collision.gameObject.transform.position += MoveObject * Time.deltaTime * Speed;
        } 
    }
    private void OnTriggerExit(Collider other) {
        if (other.gameObject.layer == 9 || other.gameObject.layer == 10) other.gameObject.GetComponent<Cristal>().ActiveCrs = false;
    }
}

Нужно, что бы объект: При переходе на другой конвейер не ускорялся и шел строго по центру конвейера (сотки не принимаются). Вот скрины конвейера

На данный момент движение происходит так:

А нужно, что бы шел он так:

Конвейер состоит из 2 объектов: куба и плоскости. На плоскости стоит данный скрипт и скрипт анимации. (box Colider is trigger) На кубу стоит только бокс колайдер, чтобы объект никуда не проваливался. Можете помочь с реализацией данного проекта?

Answer 1

Есть такой вариант: при вхождении перемещаемого объекта в триггер какого либо из блоков конвейера - сперва центрируй этот объект в этом блоке конвейера

к примеру создай на каждом блоке конвейера точку в центре блока и опиши перемещение в эту точку сразу при вхождении в триггер

и после того как перемещаемый объект достигнет центра блока конвейера (к примеру ты можешь определить это установив еще один маленький триггер по центру ну или любым другим способом) далее останавливай перемещение к центру блока конвейера и запускай объект дальше по заданному блоком конвейера направлению

может быть немного костыльно, но если все грамотно описать, работать будет как часы

Answer 2

не могу писать в комментарии так что вот:

не знаю существует ли такая возможность,но можно разделить соседние плоскости конвейера по диагонали и тогда все объекты будут двигаться по своей "полосе", но к концу приходить будут в разное время

Answer 3

Задай траэкторию движения используя сплайны. Например, можно использовать Hermite Spline Controller

В таком случае не нужно будет писать код вообще.

Как вариант 2: можно сохранять направление движения в коде на некоторую задержку перед тем как брать новое направление движения. Но эт хреновый костыль.

Как вариант 3: можно отделить визуальную составляющую от "реального" конвеера. То есть смоделировать таким макаром конвеер, что бы он выглядел точно так же, но реальные конвеерные плоскости (те, которые с коллайдерами, но без MeshRenderer) были вот такими:

В таком случае скрипт в вопросе должен сработать.

Вариант 4: Альтернатива сплайнам: вручную отметить путь созданными EmptyObject-ами.

Допустим обьект попадает в точку EmptyObject1, Срабатывает триггер, по которому ищется EmptyObject со следующим номером. У этого номера берутся координаты следующей точки. Когда доходит обьект до следующей точки все по кругу - срабатывает тригер и ящик начинает двигатся к следующей точке с некоей скоростью.

Но это делать глупо если есть сплайны.

READ ALSO
SAP HANA Cloud cocpit

SAP HANA Cloud cocpit

Помогите разобратьсяСделал приложение, которое авторизируется на SAP HANA Cloud cockpit

153
компилятор и IDE для С++ and C#

компилятор и IDE для С++ and C#

Существует IDE который поддерживает C++ и C#При этом можно компилировать

150
Selenium WebDriver в отдельном окне?

Selenium WebDriver в отдельном окне?

При использовании WebDriver (в частности ChromeDriver) в консольном приложении, сталкиваюсь с нежелательными побочными эффектами его работыЕсли вывод...

133
Многопоточность в Selenium

Многопоточность в Selenium

Допустим есть 1000 урлХочу каждый урл загрузить в браузер, получить данные

174