Megadok 9 Report post Posted August 25, 2020 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. Share this post Link to post Share on other sites
francoe1 536 Report post Posted August 25, 2020 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
Megadok 9 Report post Posted August 25, 2020 (edited) 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 August 25, 2020 by Megadok Share this post Link to post Share on other sites
iRobb 775 Report post Posted August 25, 2020 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
Megadok 9 Report post Posted August 25, 2020 Esto no funciona. 💀 Share this post Link to post Share on other sites
francoe1 536 Report post Posted August 25, 2020 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
Megadok 9 Report post Posted August 25, 2020 Pues si no me pones algún ejemplo, no me entero de nada. Share this post Link to post Share on other sites
francoe1 536 Report post Posted August 25, 2020 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
lightbug 832 Report post Posted August 26, 2020 (edited) Vector3 newPos = Dir * distance; Eso está mal, estás usando la diferencia (deseada) entre los dos objetos como posición absoluta. Edited August 26, 2020 by lightbug Share this post Link to post Share on other sites
Megadok 9 Report post Posted August 26, 2020 ¿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