2016-06-09 3 views
0

나는 작은 팀과 함께 "ArcheryRun"이라는 이름의 궁술, Platformer, 슈팅 게임을 만들고 있습니다. 우리는 "왼쪽 마우스 버튼"을 길게 누르면 파워 바 (오렌지색으로 표시)가 증가합니다. 그러나 그것의 UI 요소 이후 그것은 한 위치에 정적입니다.유니티 체인지 UI Z 축

플레이어가 2D Sprite 개체를 사용하여 화살표 이미지로 작업 한 것처럼 z 축을 변경하면 플레이어 위에 나타납니다. 그러나 UI 이미지의 z 축을 플레이어에 상대적으로 변경하거나 채우기 옵션을 허용하는 Game Object를 사용하는 방법을 생각할 수 없습니다.

어떤 도움에 감사드립니다

, 감사합니다 :)

Change Orange Powerbar to Follow Player

+1

이미지로도 이해하기 어려운 질문입니다. 그것을 다시 시도하십시오. UI에 어떤 문제가 있습니까? 무엇을하고 싶니? – Programmer

+0

@Programmer 나는 그들이 화면 주위를 움직일 때 플레이어 오브젝트 위에 플레이어의 UI 파워 바를 따라 가려고한다고 믿는다. WorldSpace 캔버스를 사용하거나 3D 텍스처를 사용해야 할 수도 있습니다. 명확한 설명이 도움이 될 것입니다. – ejsd1989

+0

정확히 맞았습니다. 문제의 나쁜 표현을 유감스럽게 생각하고, 어떻게 말을해야할지 몰랐습니다. – Brad094

답변

0

우리는 당신의 질문을 이해한다면,이 작업을해야합니다

를이 방법은 당신이 세계 위치에서 캔버스의 위치를 ​​화면 제공 :

public static Vector3 GetScreenPositionFromWorldPosition(Vector3 targetPosition) 
    { 
     Vector3 screenPos;  
     screenPos = Camera.main.WorldToScreenPoint(targetPosition); 
     return new Vector3 (screenPos.x, screenPos.y, 0f); 
    } 

다음 전원 막대 위에 스크립트가 필요합니다.

public class PowerBar : MonoBehaviour 
{ 
    public Transform target; 
    RectTransform _rectTransform; 

    void Awake() 
    { 
     _rectTransform = GetComponent<RectTransform>(); 
    } 

    public void updatePosition() 
    { 
     Vector3 pos = YourStaticClassWith.GetScreenPositionFromWorldPosition (target.position); 
     Vector2 rpos = pos; 
     _rectTransform.anchoredPosition3D = rpos + Vector2.up * 100f; // 100f is value of how many pixels above the target that UI element should apear 
    } 

    void LateUpdate() 
    { 
     updatePosition(); 
    } 
} 

target은 기본적으로 플레이어 개체의 transform입니다.

100f 값은 대상보다 큰 픽셀을 나타냅니다.

+0

고마워, 이제 의도 한대로 작동합니다. 문제는 파워 바 캔버스가 세계 공간에 있어야한다는 것이 었습니다. – Brad094