[Godot] 스크립트만으로 UV 스크롤을 수행하는 방법

6800 단어 Godot
개요
이 페이지에서는 다음 UV 스크롤을 위한 스크립트만 작성합니다.

UV 스크롤 스크립트
새 프로젝트, 2D 노드를 만들고 이름을 "Main"으로 변경하며 다음 스크립트를 첨부합니다.
Main.gd
extends Node2D

# テクスチャを読み込んでおく
var tex = preload("res://icon.png")
# 時間経過で変化するUVのUの値
var time_u = 0

func _ready():
    # テクスチャリピートを有効にする
    tex.flags |= Texture.FLAG_REPEAT

func _process(delta):
    # 経過時間でUVスクロールする
    time_u += delta
    if time_u > 1:
        # 0.0〜1.0となるようにする
        time_u -= 1

    # _draw() を呼び出す
    update()

func _draw():
    # 左上座標
    var x = 30
    var y = 50

    # 画像の幅と高さ
    var width = tex.get_width()
    var height = tex.get_height()

    # 頂点リストを作成
    var points = PoolVector2Array()
    points.append(Vector2(x, y))
    points.append(Vector2(x+width, y))
    points.append(Vector2(x+width, y+height))
    points.append(Vector2(x, y+height))

    # 色を設定
    var colors = PoolColorArray([Color.white])

    # UVリストを作成.
    var uvs = PoolVector2Array()
    var u = time_u
    uvs.append(Vector2(u, 0))
    uvs.append(Vector2(1+u, 0))
    uvs.append(Vector2(1+u, 1))
    uvs.append(Vector2(u, 1))

    # ポリゴンを描画.
    draw_polygon(points, colors, uvs, tex)
간단하게 말하자면 _ready() 부분에서 tex.flags |= Texture.FLAG_REPEAT로 설정하고 UV 값이 변할 때(지정 값이 0.0~1.0을 초과할 때) 무늬를 반복적으로 그린다.
그리고 _draw()에서 draw_polygon()를 사용하여 UV 값을 틀리게 그려서 UV 스크롤을 할 수 있습니다.
이른바 UV
UV는 텍스쳐의 왼쪽 위 구석(0, 0), 오른쪽 아래 구석(1, 1)을 가리키는 좌표계입니다.

왼쪽 상단의 좌표를 (0,0)~(1,0), 오른쪽 하단의 좌표계를 (1,0)~(2,0)로 바꾸어 스크롤 처리를 실현한다.
예를 들어, 텍스쳐 반복이 활성화된 상태에서 0.5개가 어긋나면 다음 상태가 됩니다.

좋은 웹페이지 즐겨찾기