오보에블로그

[Unity] 스크립트에서 버튼 눌리는 효과 주기 본문

GameEngine & CG/Unity

[Unity] 스크립트에서 버튼 눌리는 효과 주기

(OBO) 2022. 2. 2. 10:05
728x90

상황

  • 게임에서 AI 나 시범을 보여주는 기능을 만들려고할때
  • 버튼을 누르는 이벤트 발생시 버튼이 눌리는 효과도 같이 나왔으면 좋겠다.

구현 방식

  • Button 컴포넌트의 사용 방식이 tint color 일때를 기준으로 설명한다.
  • 현재 보이는 이미지의 색상은 기본 이미지색상과 현재 버튼의 상태에 따른 색상의 곱으로 현재 이미지의 색상을 표현된다.
  • 아래의 첨부 이미지를 보면, 버튼 배치시에ColorNormal Color 모두 흰색이기 때문에 버튼을 누르지 않은 기본 상태에서는 첨부한 기본 이미지 색상의 모습으로 버튼이 보인다.
  • 따라서, 버튼이 눌리는 이벤트를 스크립트내에서 직접 호출할 때는 기본 이미지색상과 현재 버튼의 상태에 따른 색상의 곱으로 현재 이미지의 색상을 직접 표현한다.

코드

  • 해당 코드는 Update() 문에서 3초마다 버튼이 눌리는 효과를 주는 코드이다.
  • 실질적인 기능을하는 부분은 clickedButton 부분이며, seconds 인자동안 버튼이 클릭된 상태 색상으로 변경된다.
public class TestButton : MonoBehaviour
{
    [SerializeField]
    GameObject button;

    Button bt;
    float prevTime, ElaspedTime;
    void Start()
    {
        ElaspedTime = Time.deltaTime;
        prevTime = Time.deltaTime;
        bt = button.GetComponent<Button>();
    }

    void Update()
    {
        ElaspedTime += Time.deltaTime;
        if (prevTime + 3.0f < ElaspedTime)
        {
            Debug.Log("clicked!");
            StartCoroutine(clickedButton(0.3f));
            prevTime = ElaspedTime;
        }
    }

    IEnumerator clickedButton(float seconds)
    {
        Color originalColor = button.GetComponent<Image>().color;
        button.GetComponent<Image>().color = originalColor * bt.colors.pressedColor;
        yield return new WaitForSeconds(seconds);
        button.GetComponent<Image>().color = originalColor;
    }
}
728x90