Jump to content
Didier Olivo Acuña

Aparecer objeto que depende de otro objeto

Recommended Posts

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

public class View : MonoBehaviour
{
    public GameObject Universe = null;
  
    private Animator Uanimator = null;
  
  void Start
  { 
    Uanimator = GetComponent<Animator>();
  }
  
  void Update
  {
    bool view1 = false;
    
    if(Input.GetMouseButtonDown(0))
    {
      Vector3 click = Camera.main.ScreenToWorldPoint(Input.mousePosition);
      Collider coll = Universe.GetComponent<Collider>();
      
      if(coll.OverlapPoint(click))
      {
        view1 = true;
        
        Debug.Log("Apareciendo");
      }
    }
  }
}  

Hola, estoy creando un script algo complicado

Lo que busco es que un objeto sea dependiente de otro objeto para mostrarse, primero deberán de hacer click en el primer objeto y después deberán dar click en algún lugar de la pantalla y adivinar dónde se encuentra el segundo objeto, me explico mejor, el jugador tendrá que dar click en un circulo primero que se mostrará en pantalla y después tiene que dar click encima de una manzana que no se muestra, en ese caso el jugador adivinó y aparecerá la manzana, ya he probado este script y ahora me hace falta hacerlo dependiente del otro objeto. Por último tengo dos problema el primero es que cuando haces click en cualquier lado de la pantalla aparece el objeto y no tiene que ser así, solo cuando clickeas encima del objeto y tambien cuando hayas hecho click en el primer objeto. Y el segundo problema es que si clickeas encima de un objeto que esté por encima de otro objeto ambos se activan, por ejemplo si tenemos en la parte de atrás un objeto muy grande y que también por delante esta otro objeto aparecible ambos se aparecen si haces click en el objeto más grande, lo que quiero es que solamente se aparezcan cuando des click en el primer objeto, y que cada hijo de cada objeto sea dependiente de su padre, que no se pueda aparecer por nada del mundo, espero me haya explicado bien  

Share this post


Link to post
Share on other sites

Hola Didier

Luego son tres problemas:

1- El objeto aparece cuando haces click en los bordes de la pantalla.

No estoy familiarizado con la función OverlapPoint, pero la cosa es que al buscarla, he observado que no devuelve una variable booleana si no que devuelve un número entero.

https://docs.unity3d.com/ScriptReference/Physics2D.OverlapPoint.html

int Returns the number of results placed in the results array.

Es decir, que lo que devuelve es el número de resultados que encuentra. Esto explicaría porque te genera ese problema.

En la línea

if(coll.OverlapPoint(click))

Está comprobando si la función OverlapPoint devuelve algo positivo (es decir, distinto de "null" y distinto de 0) entonces la función if la da como válida, pero en la lógica no lo es. Si tu haces click en el lado de la pantalla, o en otro objeto con collider, (aunque haya varios superpuestos), eso debería dar la condición como válida porque el resultado de OverlapPoint sería 1 o más.

 

2- Al hacer click en la manzana, esta aparece, pero no tiene que ser así. Sólo ha de aparecer una vez que el usuario haya pulsado el botón correspondiente.

Esto no es un error de código, lo que pasa es que a tu script le faltan instrucciones para que haga esto.

 

Podrías crear una variable bool (Por ejemplo "bool button= false;" (encima de la función Start, con las otras variables), esta variable bool button podría ser comportarse así.

  • La variable bool button empieza en false.
  • Si se presiona el botón, la variable bool button se pone en true.
  • Si se presiona la manzana, la variable bool button se pone en false otra vez.


Luego, cuando hace el click del ratón, pones otra condición if con esa variable bool button, y dentro de ella, (si button es true) entonces haces el chequeo de la manzana. Pero si button es falso (porque no ha pulsado el botón todavía) ignoraría ese código de la búsqueda de la manzana.

 

3- Al hacer click, afecta varios objetos si estos están en la posición del ratón, y quieres que sólo afecte al 1º.

Si vas a usar OverlapPoint, en el manual describe que la función recolecta los resultados encontrados, pero es necesario que crees un array antes para almacenarlos.

https://docs.unity3d.com/ScriptReference/Physics2D.OverlapPoint.html

public static int OverlapPoint(Vector2 point, ContactFilter2D contactFilter, Collider2D[] results);

(El parámetro del final, Collider2D[] results, si pones ahí tu propio array, este se llenará con los resultados cuando llames esta función).  

Lo que no sé, es en cual extremo del array estaría el objeto "de encima",  no sé si es el primer nodo o el último, (imagino que será el primero, el nodo 0, pero bueno, pruébalo con varios objetos para ver si es así).

 

 

  • Like 1

Share this post


Link to post
Share on other sites

×
×
  • Create New...