Hi,
I’m currently working on a project which mixes 2D elements (sprites, orthographic camera) with 3D ones (camera moves in 3D space when tracking), in a way which frequently ends up creating some perspective tricks - the player object could look on the screen as if it’s overlapping another, depending on camera position and rotation, but in world space the two are actually far apart.
My question is- how to flag when this overlap happens, on the screen rather than in world space? I’ve been paying with various combinations of converting from WorldToScreenPoint and then back using ScreenToWorldPoint, in the hopes this will give me world coordinates for where it LOOKS like these objects are, but so far the latter just sends me back to the actual places that these objects are rather than where they look like they are on the screen.
I’ve tried just comparing screen position to screen position, but am using rect.contains for the actual overlap and this uses world space.
I’ve attached my testing code below but it doesn’t give me what I need, if anyone has any clues on what I’m missing it would be greatly appreciated!
//Testing when player overlaps transform in viewport
var viewPos: Vector3;
var playerPos: Vector3;
var myRectX : float = 0.4;
var myRectY : float = 0.5;
var rect: Rect;
var viewPosWorld : Vector3;
var playerPosWorld : Vector3;
function Update () {
viewPos = camera.main.WorldToScreenPoint(transform.position);
var myPlayer : GameObject = gameObject.FindWithTag("Player");
playerPos = camera.main.WorldToScreenPoint(myPlayer.transform.position);
viewPosWorld = camera.main.ScreenToWorldPoint(Vector3(viewPos.x,viewPos.y,0));
playerPosWorld = camera.main.ScreenToWorldPoint(Vector3(playerPos.x,playerPos.y,0));
rect = Rect(viewPosWorld.x, viewPosWorld.y, myRectX, myRectY);
if (rect.Contains(playerPosWorld))
{
Debug.Log("Beep");
}
}
function OnDrawGizmos()
{
Gizmos.color = Color.white;
Gizmos.DrawWireCube (Vector3(rect.x, rect.y,0), Vector3 (myRectX,myRectY,1));
Gizmos.DrawWireCube (playerPosWorld, Vector3 (myRectX,myRectY,1));
}
Thank you!
Stephen