Pracuję nad utworzeniem wskaźnika Wróg wroga, korzystając z samouczka wspomnianego poniżej. Mogę jednak obrócić wskaźnik tak, aby wskazywał na wroga, ale wskaźnik nie przesuwa się od końca do końca ekranu.Jak utworzyć wskaźnik Wroga wroga w Unity 3D?
Jest to pożądany efekt:
Do tej pory udało mi się dowiedzieć poniżej Proszę o pomoc.
var screenCenter:Vector3 = new Vector3(0.5, 0.5, 0f);
//Note coordinates are translated
//Make 00 the centre of the screen instead of bottom left
screenpos -= screenCenter;
//find angle from center of screen instead of bototom left
var angle:float = Mathf.Atan2(screenpos.y, screenpos.x);
angle -= 90 * Mathf.Deg2Rad;
var cos:float = Mathf.Cos(angle);
var sin:float = -Mathf.Cos(angle);
screenpos = screenCenter + new Vector3(sin*150, cos*150, 0);
//y=mx + b format
var m:float = cos/sin;
var ScreenBounds:Vector3 = screenCenter;// * 0.9f;
//Check up and down first
if(cos > 0){
screenpos = new Vector3(ScreenBounds.y/m, ScreenBounds.y, 0);
}else{//down
screenpos = new Vector3(-ScreenBounds.y/m, -ScreenBounds.y, 0);
}
//If out of bound then get point on appropriate side
if(screenpos.x > ScreenBounds.x){//Out of bound must be on right
screenpos = new Vector3(ScreenBounds.x, ScreenBounds.y*m, 0);
}else if(screenpos.x < ScreenBounds.x){//Out of bound must be on left
screenpos = new Vector3(-ScreenBounds.x, -ScreenBounds.y*m, 0);
}
//Remove the co ordinate translation
screenpos += screenCenter;
var DistanceIndicatorRectT = DistanceIndicator.GetComponent(RectTransform);
DistanceIndicatorRectT.localPosition = new Vector3(screenpos.x * scrWidth/2, screenpos.y * scrHeight/2, DistanceIndicatorRectT.localPosition.z * screenpos.z);
DistanceIndicator.transform.rotation = Quaternion.Euler(0, 0, angle*Mathf.Rad2Deg);
Czy możesz wyjaśnić swój problem trochę lepiej? Teraz masz tylko "chcę tego zachowania z tym kodem". Co dokładnie się nie udaje? Jaka jest różnica pomiędzy pożądanym a uzyskanym wynikiem? –
@DJ IV DJIV: gdzie dodałeś powyższy fragment kodu? Update()? – user1509674