갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 롤 골드그래프
  • 전세계게임매출순위
  • 유니티 그래프
  • C# boxing
  • c# delegate
  • C# 예외 처리
  • pc 게임 순위
  • C++ 상속
  • 게임 디자인 패턴
  • C++ virtual
  • c# collection
  • 2020년 게임 매출
  • 전세계 게임 매출
  • 게임 매출 순위
  • 모바일 게임 순위
  • c# coroutine
  • Unity Graph
  • 게임매출순위
  • 강남 방탈출
  • c# unboxing
  • 자바
  • C++ 소멸자
  • 글로벌게임매출
  • 알고리즘
  • C++
  • c# 코루틴
  • 유니티 그래프 그리기
  • 유니티 골드그래프
  • c# Thread
  • pc게임 순위

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥
프로그래밍/유니티

[유니티] 화면전환 효과 (탕탕특공대 따라하기)

[유니티] 화면전환 효과 (탕탕특공대 따라하기)
프로그래밍/유니티

[유니티] 화면전환 효과 (탕탕특공대 따라하기)

2022. 12. 7. 15:13
728x90
반응형

0. 목표

탕탕특공대의 화면전환효과 구현해보기

Mask를 사용하면 될 것 같은데 유니티의 기본 Mask컴포넌트는 Mask이미지가 있는 부분만 보여준다.

이건 반대로 Mask이미지를 제외한 영역을 Mask하는게 필요하다.


1. 기본 Mask 적용해보기

먼저 Image를 만들고 이름을 [MaskImage]로 바꿔준다.

Transform이나 Image컴포넌트는 건들지 않았다.

 

방금 만든 [MaskImage]의 자식으로 Image를 또 만들고 이름을 [MaskedImage]로 변경한다.

구분을 위해 Color값을 바꿨고, Width와 Height를 200으로 바꾸었다. (크기는 부모보다 크면 된다)

 

다시 [MaskImage]로 와서 Mask 컴포넌트를 추가해준다.

 

Mask 컴포넌트가 적용되서 (100, 100) 크기만큼만 초록색으로 나오는 모습

 

[MaskedImage]를 이리저리 움직여본다.

 

[MaskImage]는 보일 필요가 없으므로 Mask 컴포넌트의 Show Mask Graphic 속성을 꺼준다.

일단 기본 세팅은 끝났다.

우리가 원하는 것은 저거의 반대영역으로 Mask되는 거였으니 한 번 해보자


2. Inverse Mask

먼저 코드를 추가해야 한다.

스크립트를 만들고 스크립트의 이름은 CutoutMaskUI로 한다.

 

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.UI;

public class CutoutMaskUI : Image
{
    private static readonly int StencilComp = Shader.PropertyToID("_StencilComp");

    public override Material materialForRendering
    {
        get
        {
            var mat = new Material(base.materialForRendering);
            mat.SetInt(StencilComp, (int) CompareFunction.NotEqual);
            return mat;
        }
    }
}

코드는 간단하다.

Image 클래스를 상속받아 Stencil buffer의 값을 반대영역이 필요하므로 NotEqual로 하면 된다.

코드에 대한 좀 더 자세한 설명은 글 최하단에 링크를 참조하길 바란다.

 

코드를 작성했다면 [MaskedImage]의 Image컴포넌트를 지우고 

작성한 코드를 추가한다.

보기 편하게 색상만 바꿨다.

 

잘 동작한다.

안쪽 이미지는 사이즈가 (100, 100) 이였고, 바깥쪽은 (200, 200)이였으므로

가운데 겹치는 부분을 제외한 나머지 부분이 Mask되어 보여진다.

이제 이걸 이용해 애니메이션을 붙여보면

 

요렇게 할 수 있다.

이건 [MaskedImage]의 사이즈를 화면에 맞게 하고 [MaskImage]의 사이즈를 화면크기 => (0, 0)까지 가게 한 것 밖에 없다.

그래도 볼만한다.

이제 [MaskImage]에 sprite를 추가하면 완성이다.

 

 

 

참고) 코드몽키 유튜브

728x90
반응형

'프로그래밍 > 유니티' 카테고리의 다른 글

[유니티] 해상도 고정 & 빈 공간 처리  (0) 2022.11.18
[유니티] XML테이블 사용하기 (2)  (0) 2022.11.08
[유니티] XML테이블 사용하기 (1)  (0) 2022.10.28
[유니티] FPS 표기  (0) 2022.10.05
[유니티] 안드로이드 번들 빌드 오류 모음  (0) 2022.09.26
  • 0. 목표
  • 1. 기본 Mask 적용해보기
  • 2. Inverse Mask
'프로그래밍/유니티' 카테고리의 다른 글
  • [유니티] 해상도 고정 & 빈 공간 처리
  • [유니티] XML테이블 사용하기 (2)
  • [유니티] XML테이블 사용하기 (1)
  • [유니티] FPS 표기
갓똥
갓똥
공부하며 알아가는 내용을 정리해 봅니다.

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.