Проверка отсутствия столкновения с определенным объектом после нажатия на него

У меня возникли проблемы с созданием способа проверить, не сталкивается ли игрок с определенной «путевой точкой», если я нажму на эту путевую точку. Я установил 7 путевых точек, к которым игрок захочет двигаться.

Теперь я пытаюсь написать фрагмент скрипта, который проверяет, что ПОСЛЕ щелчка по путевой точке (onMouseDown) происходит столкновение с игроком. Потому что в этом случае он не будет вычислять позицию для перехода.

public class WayPointPositioner : MonoBehaviour {

private Vector3 wayPointPosition;
public GameObject playercheck;

//Check if object is clicked
void OnMouseDown () 
{
    Debug.Log ("Object Clicked " + GameObject.name);

    // Check if collision occurs with playercheck

    OnCollisionEnter(playercheck != Collision)
    {
        // If its the player, then return a new position for the player to move to for walking
        // Else debug that its not so
        if (playercheck.gameObject.CompareTag("Player"))
        {

            Debug.Log ("Object not colliding and retrieving position");

            wayPointPosition = new Vector3 (GameObject.X, GameObject.Y, 10);
            wayPointPosition = Camera.main.ScreenToWorldPoint(wayPointPosition);

        }
        else
        {

            Debug.Log ("Object is colliding, no movement needed");

        }
    }
}

}

Теперь я уже понял, что OnCollisionEnter не сработает. Потому что для его работы требуется оператор void перед ним. Однако я понятия не имею, как еще я могу это сделать.


person Veraduxxz    schedule 22.09.2014    source источник


Ответы (2)


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

person Kiriakos Tzannis    schedule 22.09.2014
comment
Нет, система путевых точек существует, так что в конце концов персонаж игрока будет двигаться по путевым точкам к месту назначения. Пример: он начинает с путевой точки 02 и должен перейти к путевой точке 06, затем проходит через 03-04-05, чтобы добраться до 06. - person Veraduxxz; 22.09.2014

Удалось исправить. Просто был идиотом.

Суть в том, чтобы использовать обе функции ОТДЕЛЬНО. Поэтому я разделил задачи проверки Mousedown и проверки того, занято ли место, создав отдельную переменную, чтобы запрашивать true или false, чтобы проверить все это.

public class WayPointPositioner : MonoBehaviour {

private Vector3 wayPointPosition;
private bool checkPlayerWaypointCollision;

void Start()
{
    wayPointPosition = transform.position;
}

void OnTriggerStay2D (Collider2D other) 
{
    if (other.gameObject.name == "Player")
    {
        checkPlayerWaypointCollision = true;
    }
    else
    {
        checkPlayerWaypointCollision = false;
    }

}

//Check if object is clicked
void OnMouseDown () 
{

    // If its the player, then return a new position for the player to move to for walking
    // Else debug that its not so
        if (checkPlayerWaypointCollision == false)
        {

            Debug.Log ("Object not colliding and retrieving position");

            transform.position = new Vector3 (transform.position.x, transform.position.y, 10);
            wayPointPosition = Camera.main.ScreenToWorldPoint(wayPointPosition);

        }
        else
        {

            Debug.Log ("Object is colliding, no movement needed");

        }

}

}
person Veraduxxz    schedule 22.09.2014