Проверка, че няма сблъсък с определен обект след щракване върху него

Имам проблем със създаването на начин да проверя дали плейърът НЕ се сблъсква с определена „пътна точка“, ако щракна върху тази междинна точка. Настроих 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