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
Tenes dos objetos y queres situar algo exactamente al centro de estos dos ?
Objeto_CENTRO = (Objeto_A.position + Objeto_B.position) / 2
[/quote]
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?
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]
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????
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...
Buenas pioj...
Comorl? Como lo ago... no puedo sumar directamente un flotante a un vector....
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 ;-)).
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;
}
}
@AngelFG Te aconsejo normalizar la diferencia entre mouse y player
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]
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....
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?
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.
Y eso como se haria?
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;
}
}
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???