So far I could only find the method to get the current position of the objects. I think there is a method that returns the distance between them.
$\begingroup$
$\endgroup$
1
-
$\begingroup$ I make BGE tutorials on my channel, and I have this exact solution, scripts, and .blend file in the description. Just keep watching through the video, I believe I show you how 3 minutes through. youtube.com/watch?v=d2BL9AxORec $\endgroup$– Shane JohnsonCommented Jun 7, 2014 at 18:10
Add a comment
|
3 Answers
$\begingroup$
$\endgroup$
6
I am not sure how you plan on telling blender which two objects. Assuming they are both selected.
import bpy
from math import sqrt
def get_distance():
"""
return: float. Distance of the two objects
Must select two objects
"""
l = [] # we store the loacation vector of each object
for item in bpy.context.selected_objects:
l.append(item.location)
distance = sqrt( (l[0][0] - l[1][0])**2 + (l[0][1] - l[1][1])**2 + (l[0][2] - l[1][2])**2)
print(distance) # print distance to console, DEBUG
return distance
get_distance()
-
1$\begingroup$ I think the OP means in the BGE. $\endgroup$– gandalf3Commented Feb 18, 2014 at 22:12
-
$\begingroup$ How do I see the output of print in that part of the blender visualize? $\endgroup$ Commented Feb 19, 2014 at 2:25
-
$\begingroup$ in the console, aka terminal/cmd. You need to start blender form the console though as well $\endgroup$– VaderCommented Feb 19, 2014 at 2:27
-
2$\begingroup$ @Guilherme If you choose to mark this as accepted, please rephrase your question to correlate with it as this does not apply to the bge. Also, use of
bpy
in the bge is discouraged. $\endgroup$– iKlsRCommented Feb 19, 2014 at 3:06 -
$\begingroup$ This answer isn't the game engine. $\endgroup$ Commented Apr 18, 2014 at 10:50
$\begingroup$
$\endgroup$
0
You can use mathutils.Vector
locations
import bge
scene = bge.logic.getCurrentScene()
# the object the sensor is connected to
owner = bge.logic.getCurrentController().owner
# the other object you want to get the distance to
obj2 = scene.objects['obj_name']
length = (owner.worldPosition - obj2.worldPosition).length
print(length)
This allows for easier manipulation, so for example if you only want to measure distance on a map (without taking altitude into account) you can do.
length = (owner.worldPosition.xy - obj2.worldPosition.xy).length
$\begingroup$
$\endgroup$
0
That would be getDistanceTo
. It will calculate and return the distance between two objects from their origins.
import bge
scene = bge.logic.getCurrentScene()
# the object the sensor is connected to
owner = bge.logic.getCurrentController().owner
# the other object you want to get the distance to
obj2 = scene.objects['obj_name']
length = owner.getDistanceTo(obj2)
print(length)