본문 바로가기
▶ SCP전쟁 개발일지

#009 공격 버튼 쿨타임, 카운트, fill amount, 애니메이션 제어

by 곰스타일 2024. 4. 1.
728x90
반응형
SMALL

 

 

공격 버튼을 클릭 했을 때 이벤트를 아래와 같이 설정

 

1. 버튼을 누르는 동안 fill amount 값이 감소, text값이 100에서 0으로 줄어듬(정수만 출력)

2. 버튼 fill amount 값이 0이 되었을 때 버튼 기능 off

3. 버튼에서 손을 때면 fill amount 값이 증가, text값이 0에서 100까지 증가(정수만 출력)

4. 작성한 코드를 버튼 오브젝트 Event Trigger 컴포넌트에 입력 (Pointer Up, Pointer Down)

//공격 버튼 ui
public Button AttackButton; // 애니메이션을 제어할 버튼
public Animator AtteackAnimator; // 애니메이터 컴포넌트
private bool AttackButtonPressed = false; // 버튼이 눌렸는지 여부를 나타내는 변수
public Image AttackFill; // fill amount 값을 변경할 이미지
private bool CanPressAttackButton = true; // 버튼을 누를 수 있는지 여부
public float AttackFillSpeed =0.01f; // fill amount가 증가 또는 감소할 속도
public Text AttackCount;

 

 

// 공격 버튼을 클릭했을 때 호출되는 함수
    public void AttackButtonDown()//유니티 인스펙터 Event Trigger OnPointerDown에 연결
    {
        AttackButtonPressed = true; // 버튼을 누르거나 놓을 때마다 상태 변경
        // 버튼이 눌렸을 때 애니메이션을 시작하고 스프라이트를 보이도록 설정
        AtteackAnimator.SetBool("IsPressed", true);
        AtteackAnimator.gameObject.SetActive(true);
    }

    // 공격 버튼을 놓았을 때 호출되는 함수
    public void AttackButtonUp()//유니티 인스펙터 Event Trigger OnPointerUp에 연결
    {
        AttackButtonPressed = false;
        // 애니메이션을 재생을 멈춤
        AtteackAnimator.SetBool("IsPressed", false);
        AtteackAnimator.gameObject.SetActive(false);
    }
    
    // fill amount 값에 따라 text 값을 조정하는 함수
    private void UpdateTextValue()
    {
        // fill amount 값이 1일 때 text 값을 100으로 설정
        if (AttackFill.fillAmount == 1)
        {
            AttackCount.text = "100";
        }
        // fill amount 값이 0일 때 text 값을 0으로 설정
        else if (AttackFill.fillAmount == 0)
        {
            AttackCount.text = "0";
        }
        // 그 외의 경우에는 fill amount 값을 0에서 100까지 정수로 변환하여 표시
        else
        {
            int percentage = Mathf.RoundToInt(AttackFill.fillAmount * 100);
            AttackCount.text = percentage.ToString();
        }
    }

 

 

 

 

void FixedUpdate()
{
// 공격 버튼을 누르고 있는 동안에만 애니메이션을 계속해서 재생 + fill amount 값을 감소시킴
    if (AttackButtonPressed)
    {
        // fill amount 값을 감소시킴
        AtteackAnimator.SetBool("IsPressed", true); // 애니메이션을 계속 재생
        AttackFill.fillAmount -= Time.deltaTime; // fill amount 값을 감소 시 킴

        // fill amount 값이 0이 되면 버튼을 비활성화
        if (AttackFill.fillAmount <= 0)
        {
            AttackButton.interactable = false;
            AtteackAnimator.gameObject.SetActive(false);
        }
        // fill amount 값에 따라 text 값을 조정
        UpdateTextValue();
    }
    else
    {
        // 버튼이 눌리지 않은 경우 fill amount 값을 증가시킴
        if (AttackFill.fillAmount < 1)
        {
            AttackFill.fillAmount += AttackFillSpeed * Time.deltaTime; // fill amount 값을 증가시킴
            AttackButton.interactable = true;
        }
        // fill amount 값에 따라 text 값을 조정
        UpdateTextValue();
    }
}

 

728x90
반응형
LIST

댓글