Unity Spain

Mesa de ayuda => Unity3D => Scripting => Mensaje iniciado por: nomoregames en Marzo 26, 2020, 11:30:20 AM

Título: Distancia y posiciones
Publicado por: nomoregames en Marzo 26, 2020, 11:30:20 AM
Hola a todos
 
Quiero acer que un objeto se posicione entre otros dos, es decir que si ay un objeto player y un objeto mouse, se coloque entre estos dos, para eso, primero hay que saber la dirección (restar una posición a la de el otro), pero...
 
Como indico luego a la distancia que estará de el objeto player? (esa distancia sera siempre la misma así que técnicamente no es justo justo el medio de los dos objetos) 
 
PD: estoy trabajando en 2d
 
 
 
Gracias por vuestra atención
Título: Distancia y posiciones
Publicado por: francoe1 en Marzo 26, 2020, 12:54:20 PM
Tenes dos objetos y queres situar algo exactamente al centro de estos dos ?
 



   
      Objeto_CENTRO = (Objeto_A.position + Objeto_B.position) / 2
   

[/quote]
 
 
Título: Distancia y posiciones
Publicado por: nomoregames en Marzo 26, 2020, 03:18:23 PM
no exactamente..., aquí te dejo un dibujo
 
Ejemplo 1
 

 
el mismo caso solo que el mouse esta mas alejado y en otra posición
 

 
Se entiende a que me refiero?

 
Título: Distancia y posiciones
Publicado por: francoe1 en Marzo 26, 2020, 08:00:49 PM
Y podrías tomar la dirección y multiplicar por la distancia. 
 



   
       
   
   
      dir=(a.position - b.position).normalized
   
   
      c.position=a.position + dir*1.3f
   
   
       
   

[/quote]
 
 
Título: Distancia y posiciones
Publicado por: nomoregames en Marzo 27, 2020, 11:58:20 AM
Perfecto! muchas gracias, no se como no se me havia ocurrido XD
 
 
 
¡RECTIFICO!
 
 
 
No funciona tan bien como pensaba 
 
 
 
Resulta que dependiendo de lo cerca o lejos que este el objeto mouse de el player, mas se acerca el obj centro a player
 
 
 
https://drive.google.com/open?id=17cmJmaTivD1nlfTde_i1iU4S4UGeB8TA (https://drive.google.com/open?id=17cmJmaTivD1nlfTde_i1iU4S4UGeB8TA)
 
Como podría hacer que el obj centro siempre se encuentre a  1.3f de player????
Título: Distancia y posiciones
Publicado por: pioj en Marzo 29, 2020, 06:21:50 AM
Lo "recolocas" a mano:  fuerzas que su transform.position sea igual a la posición del jugador + la dirección en la que vaya + la separación...
Título: Distancia y posiciones
Publicado por: nomoregames en Marzo 29, 2020, 12:13:32 PM
Buenas pioj...
 
Comorl? Como lo ago... no puedo sumar directamente un flotante a un vector.... 
Título: Distancia y posiciones
Publicado por: J Montes en Marzo 29, 2020, 07:29:48 PM
Está bien lo del drive pero sería más de agradecer que pegaras unas imágenes.
 
Si ambos objetos no están en el mismo plano, tendrás que hacer algún ajuste más. También depende si quieres que el objeto esté alrededor del jugador "en la pantalla" o "en el espacio del objeto (3D)".
 
También sería interesante ver cómo estás generando la posición del mouse en 3D, tendrías que hacer un Raycast hasta el terreno o hasta el plano del jugador.
 
Ponnos screenshots y el código involucrado (esto siempre deberías hacerlo así cuando hagas una pregunta ;-)).
Título: Distancia y posiciones
Publicado por: AngelFG en Marzo 29, 2020, 10:38:58 PM
A lo mejor no te estoy entendiendo muy bien....
 
¿ Esto no valdría ?
 

public class DistanciaEntre : MonoBehaviour
{
    [SerializeField]
    private Transform mouse;
    [SerializeField]
    private Transform player;
 
    private Vector3 distancia;
    // Update is called once per frame
    void Update()
    {
        distancia = (mouse.position - player.position) * 0.3f;  // Cambia el 0.3 por la distancia fija a la que quieras que esté
        transform.position = player.position +  distancia;
       
    }
}

 
 
Título: Distancia y posiciones
Publicado por: francoe1 en Marzo 29, 2020, 10:51:17 PM
@AngelFG Te aconsejo normalizar la diferencia entre mouse y player
Título: Distancia y posiciones
Publicado por: nomoregames en Marzo 30, 2020, 01:27:36 PM
Bien...
 
AngelFG... tu script es lo mismo que publicaba francoe
 



   
      Y podrías tomar la dirección y multiplicar por la distancia. 
   
   

      

           Quote
      
      
         
             
         
         
            dir=(a.position - b.position).normalized
         
         
            c.position=a.position + dir*1.3f
         
         
             
         
      
   [/quote]

[/quote]
 
 
 
 
Título: Distancia y posiciones
Publicado por: AngelFG en Marzo 30, 2020, 03:29:57 PM
Cita de: nomoregames date=1585567656Bien...
   
   
      AngelFG... tu script es lo mismo que publicaba francoe
   
   
       
   
   
       
   


No exactamente lo mismo...si te fijas en el ejemplo de franceo normaliza la distancia y después, al multiplicar por 1.3f, siempre va a estar a esa distancia fija con respecto a 'a'. Por lo tanto, si 'b' se acerca a 'a' estará más cerca del centro, que es lo que comentaba nomeregame como respuesta a la solución anterior.
 
Mientras que en mi ejemplo no normalizo y eso hace que la distancia se mantenga en la misma proporción (o eso creo si no me equivoqué al hacer el ejemplo :) )
 
En mi ejemplo siempre se encontraría al 30% del espacio entre 'a' y 'b' independientemente de la distancia entre ellos....
 
 
 
 
Título: Distancia y posiciones
Publicado por: nomoregames en Marzo 30, 2020, 04:43:59 PM
Jejejeje, creo que me he explicado mal
 
Lo que estoy tratando conseguir es que el objeto "centro" se encuentre siempre a una distancia absoluta de el objeto A de forma independiente a la distancia a la que se encuentre el objeto B... Me he explicado mejor?
Título: Distancia y posiciones
Publicado por: iRobb en Marzo 30, 2020, 05:01:57 PM
Cómo se puede complicar algo tan sencillo. Me sumo a los que no entienden nada.
 
Pon el objecto caja ese a 1,3f del player colgando de él y hazle un lookat del player al mouse. El comportamiento parece ser el player un planeta y la caja como una luna, que al mover el mouse rota alrededor.
Título: Distancia y posiciones
Publicado por: nomoregames en Marzo 30, 2020, 05:14:22 PM
Y eso como se haria? 
Título: Distancia y posiciones
Publicado por: francoe1 en Marzo 30, 2020, 06:25:46 PM
1 - Necesitas el punto de referencia que usarás para rotar, esto puedes hacerlo con un Transform.
 
2 - Necesitas la dirección normalizada desde el punto de referencia y el mouse.
 
3 - Sumas la posición del punto de referencia más la dirección multiplicada por la distancia deseada
 

public class ObjectRotation : MonoBehaviour
{
    [SerializeField]
    private Transform m_point;
    [SerializeField]
    private float m_distance = .3f;
   
    private Vector3 GetNewPosition(Vector3 mousePosition)
    {
        Vector3 dir = m_point - mousePosition;
        dir.Normalize();        
        return m_point + dir * m_distance;
    }
}

 
 
Título: Distancia y posiciones
Publicado por: nomoregames en Marzo 31, 2020, 11:54:55 AM
Bale, ahora voy a sacar a la luz hasta que punto soy un ignorante...
 
Como aplico tu script? algo asi como centro.transform.position = GetNewPosition???