[英]how to racast 3d world to screen (unity3d)
在我的拍攝方法中,我正在屏幕的正中間進行光線投射,可以正常工作,但是現在為了更合適,我想將其在世界范圍內更改為屏幕(以及在十字線之間,而不是從屏幕中間)。 但我沒有得到任何指示。 在此先感謝您的幫助。 以下是我向世界展示的代碼。
public void Shoot ()
{
//bullet_target
var layerMask = (1 << 8);
layerMask = ~layerMask;
Vector3 bullet_target = Vector3.zero;
Ray ray = Camera.main.ScreenPointToRay( new Vector3(screen_width_mid, screen_height_mid, 0) );
RaycastHit hit;
GameObject hit_game_object;
Transform hit_transform;
if (Physics.Raycast (ray.origin, ray.direction * 1000 ,out hit, 1500.0f , layerMask) )
{
bullet_target = hit.point;
hit_game_object = hit.transform.gameObject;
hit_transform = hit.transform;
}else
{
hit_game_object = null;
}
if(hit_game_object!=null)
{
if( hit_game_object.tag=="head" )
{
//blah blah do any stuf
}
}
}
}
如果要獲取對象在屏幕空間中的位置,請使用Camera.WorldToScreenPoint();。
我假設您已經有了一個跟隨鼠標的十字准線游戲對象,並且可能與弓箭手之間的距離有所限制。
https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html
Transform crosshair;
Vector3 GetCrosshairScreenPos()
{
if(crosshair)
{
Vector3 worldPos = crosshair.position;
Vector3 screenPos = Camera.main.WorldToScreenPoint(crosshair.position);
return screenPos;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.