Jump to content
Sign in to follow this  
Megadok

ANSWERED Posición según dirección

Recommended Posts

Hola chicos, me gustaría saber cómo posicionar un objeto "B" a una distancia del objeto "A" teniendo en cuenta su dirección. Adjunto una imagen de ejemplo.
En GameMaker existe Lenght_dir_x y Lenght_dir_y que otorga esta posición.

 

Gracias.

ejemplo_lenght_dir.jpg

Share this post


Link to post
Share on other sites

1 - Obtener la dirección; Dir = PosA - PosB
2 - Normalizar la dirección; Dir.Normalize();
3 - Multiplicar la dirección por la distancia; NewPos = Dir * Distance;
4 - Asignar la nueva posición; PosB = NewPos;

Share this post


Link to post
Share on other sites

Lo he puesto todo el codigo en el Update del ObjetoA,

El objetoB se va hacia el centro de la pantalla, casi a la coordenada 0,0,0. Si muevo en el editor el objetoA, el objetoB se comporta de manera extraña, no se aparta del 0,0,0 y tiene como tembleque..

 

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

public class LenghtDir : MonoBehaviour
{
    public GameObject target;
    public float distance = 1f;
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {

        Vector3 Dir = transform.position - target.transform.position;
        Dir.Normalize();
        Vector3 newPos = Dir * distance;
        target.transform.position = newPos;
    }
}

 

Edited by Megadok

Share this post


Link to post
Share on other sites
Vector3 newPos = Dir * distance * Time.deltaTime;

Si va muy lento, multiplica newPos por un factor.

Share this post


Link to post
Share on other sites

Claro que funciona, es matemáticas básicas. 

Te recomiendo ver en los blogs del foro, hay unos topics sobre matemáticas. 

En cuanto a tu problema, es por qué la posición de b es igual a newpos + la posición de A. 

Share this post


Link to post
Share on other sites
Vector3 Dir = transform.position - target.transform.position;
Dir.Normalize();
Vector3 newPos = Dir * distance;
target.transform.position = transform.position + newPos;

 

Share this post


Link to post
Share on other sites
Vector3 newPos = Dir * distance;

Eso está mal, estás usando la diferencia (deseada) entre los dos objetos como posición absoluta.

 

Edited by lightbug

Share this post


Link to post
Share on other sites

¿Y cómo sería entonces lightbug?

Quote

Vector3 Dir = transform.position - target.transform.position;
Dir.Normalize();
Vector3 newPos = Dir * distance;
target.transform.position = transform.position + newPos;

La respuesta de francoe1 me funciona perfectamente, solamente hay que configurar la distancia, porque si no la pongo, por ejemplo negativa, el target empieza a vibrar y a desplazarse de un sitio a otro y viceversa.

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...