Как заставить объект изменить направление? - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь заставить рыбу изменить направление, когда оно касается определенных триггеров.Я ставлю триггер справа от сцены и хочу, чтобы рыба двигалась влево, когда она касается ее, и двигалась вправо, когда она касалась левого триггера.Но я не могу поместить две функции OnTriggerEnter2D в один класс.Как я могу сделать, пожалуйста?

Вот код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PoissonMouvementScript : MonoBehaviour
{
    public Collider2D colliderleft;
    public Collider2D colliderright;
    public Rigidbody2D rb2;
    public bool fishdirection = false;
    public float sidewaysforce = 1;

    private void OnTriggerEnter2D(Collider2D colliderleft)
    {
        fishdirection = true;
        Debug.Log("Fish is going right");
    }

    private void OnTriggerEnter2D(Collider2D colliderright)
    {
        fishdirection = false;
        Debug.Log("Fish is going left");
    }

    void FixedUpdate()
    {
        if(fishdirection == false)
        {
            rb2.AddForce(new Vector2(sidewaysforce * Time.deltaTime, 0));
        }
        else if (fishdirection == true)
        {
            rb2.AddForce(new Vector2(-sidewaysforce * Time.deltaTime, 0));
        }
    }

Спасибо за вашу помощь, ребята!

Ответы [ 2 ]

2 голосов
/ 22 июня 2019

У вас есть несколько вариантов.

Один из них заключается в наличии сценария в левом и правом объекте коллайдера, который имеет OnCollisionEnter и проверяет столкновение с игроком и добавляет к нему скорость.

Другой вариантсостоит в том, чтобы пометить два краевых объекта тегами, такими как «LeftEdge» и «RightEdge».Затем в сценарии, который вы получили в OnCollisionEnter, вы помещаете collider.CompareTag ("LeftEdge") и делаете то же самое, а затем RightEdge.

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

0 голосов
/ 22 июня 2019

Хорошо, спасибо Антону, скрипт теперь работает. В общем, если вы хотите сделать движущуюся сущность из точки A в точку B и из точки B в точку A, вам нужно разместить 2 коллайдера (один слева и один справа) и пометить их тегом например «LeftEdge» или «RightEdge», затем добавьте этот сценарий к объекту:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoulbeFishDirection : MonoBehaviour
{
    public Rigidbody2D rb2;
    public bool fishdirection = false;
    public float sidewaysforce = 1;

    private void OnTriggerEnter2D(Collider2D collider)
    {
        if(collider.CompareTag("LeftEdge"))
        {
            fishdirection = true;
            Debug.Log("Fish is going right");
        }

        else if(collider.CompareTag("RightEdge"))
        {
            fishdirection = false;
            Debug.Log("Fish is going left");
        }
    }

    void FixedUpdate()
    {
        if (fishdirection == true)
        {
            rb2.AddForce(new Vector2(sidewaysforce * Time.deltaTime, 0));
        }
        else if (fishdirection == false)
        {
            rb2.AddForce(new Vector2(-sidewaysforce * Time.deltaTime, 0));
        }
    }
}

Хорошего дня и веселого кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...