Движение платформы через Trigger

Программирование на Юнити.

Движение платформы через Trigger

Сообщение PolkaStolka 28 янв 2020, 14:07

Всем привет!
Хочу реализовать движение платформы при проходе игрока через триггер.
Использую такой скрипт для движения платформы из точки А в точку Б.
"onAction" изменяется в скрипте триггера на true.

Пробовал добавлять в скрипт триггера что-то вроде:

Синтаксис:
Используется csharp
void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            GameObject.Find("Platform").GetComponent<ActionMove>().onAction = true;
        }
    }
 


Но если платформ на сцене больше чем одна, то едут все одновременно.

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ActionMove : MonoBehaviour
{
    [SerializeField] Vector2 startPosition;
    [SerializeField] Vector2 endPosition;
    [SerializeField] float moveSpeed;
    [Range(0,1)] public float moveProgress;
    public bool onAction = false;
    void Start()
    {
        transform.position = startPosition;
    }
    public void Update()
    {
        if (onAction == true && moveProgress < 1)
        {
            moveProgress += moveSpeed * Time.time;
            transform.position = Vector2.Lerp(startPosition, endPosition, moveProgress);
        }
        if (moveProgress >= 1)
        {
            onAction = false;
        }
    }
 


Вроде как можно через GameObject, но не соображу как. Подскажите пожалуйста?
PolkaStolka
UNец
 
Сообщения: 1
Зарегистрирован: 28 янв 2020, 13:55

Re: Движение платформы через Trigger

Сообщение 1max1 28 янв 2020, 16:27

Заполняй в инспекторе для каждого триггера свою платформу.

Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    [SerializeField] ActionMove actionMove;

    void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            actionMove.onAction = true;
        }
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Движение платформы через Trigger

Сообщение Dio5555 28 янв 2020, 16:35

скрипт кидаем на платформу с триггером.

Синтаксис:
Используется csharp
[SerializeField] Vector2 startPosition;
    [SerializeField] Vector2 endPosition;
    [SerializeField] float moveSpeed;
    [Range(0, 1)] public float moveProgress;
    public bool onAction = false;
    //-----------------------------------------------------------
    float _TimerSleep = 0; // таймер задержки 2
    bool _bTrue = false; // проверка на одно срабатывание

    // Start is called before the first frame update
    void Start()
    {
        transform.position = startPosition;
    }

    // Update is called once per frame
    void Update()
    {


        if (_bTrue == true)
        {
            _TimerSleep += Time.deltaTime;

        }

        // тут код вашей платформы с движение её
        if (_TimerSleep >= 2) // через 2 секунды платформа двинется
        {

            moveProgress += moveSpeed * Time.time;
            transform.position = Vector2.Lerp(startPosition, endPosition, moveProgress);

            _bTrue = false;
        }
        if (moveProgress >= 1)
        {
            onAction = false;
        }

    }

    //вход игрока в триггер платформы
    public void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Player")
        {
            _bTrue = true;  //запуск таймера платформы
        }
    }
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14