# RPG
1. ํ๋ถ ์ค๋ธ์ ํธ ์ถ๊ฐ ( ์ ๋๋ฉ์ด์ ์๋ ํฐ ์ค๋ธ์ ํธ - ์ฌ์ด์ฆ๊ฐ 1x์๋ ์ค๋ธ์ ํธ)
2. ์บ๋ฆญํฐ ์ฌ๋ฌ์ข ์ถ๊ฐ
3. ์๋๋งต ๋ง์/์ฑ/๋๊ตด ๋ฑ ์ฌ๋ฌ์นธ ์ฐจ์งํ๋ ์ค๋ธ์ ํธ ์ถ๊ฐ ( ์์น ์ ์ฅ์ ์ข์๋จ ๊ธฐ์ค, ์ ๊ตฌ ๊ธฐ์ค์ ๋ง์ฐ์ค ์ปค์ ๊ธฐ์ค์ผ๋ก ํ๊ธฐ - hover์ ๋์ด์ผํจ )
# ์๋ฐ์ด๋ฒ๋ฅ
1. ์บ๋ฆญํฐ 1์ข ์ 1์ข ์ถ๊ฐ
2. wasd ๋ฐ ๋ฐฉํฅํค ์ด๋ ์ถ๊ฐ, ๊ฐ์ ์กฐ์ด์คํฑ ์ถ๊ฐ
3. ์ ์ด๋์๋ ๊ธฐ๋ฐ์ผ๋ก ์๋ ๋ฐ๋ผ์ค๊ธฐ ๊ธฐ๋ฅ
4. ์ ์๊ตฐ hp ์ถ๊ฐ
5. ๋จ์ ๋ฏธ์ฌ์ผ 1์ข ์ถ๊ฐ ( ๊ธฐ๋ณธ ๊ณต๊ฒฉ๋ ฅ 5 )
--
๋ฌธ์ ...
๊ณ ๋์์ง์ ๊ฒฝ์ฐ ๋ฑ๊ฐ ํ์ผ์ ๋ฃ๋ ๊ฒฝ์ฐ๋ ์ ๋๋ฉ์ดํฐ๋ ํ ์ค์ณ๊ฐ ๋์ง๋ง
์ํ๋ผ์ค ํ ์ค์ณ ( ์คํ๋ผ์ดํธ ์ํธ์์ ์๋ผ์ ์ผ๋ถ ํ ์ค์ณ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ)
ํ์ผ์ ์ ์ ๋๋ฉ์ดํฐ๋ ํ ์ค์ณ๋ก ๋ฌถ๋ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค ( github์๋ ์ด์๋ง ์๊ณ ํด๊ฒฐ๋ฒ์ ์์)
๊ฒฐ๊ตญ ๋ฐฉ๋ฒ์ 2D์ฉ ๋งคํฐ๋ฆฌ์ผ์ ๋ง๋ค๊ณ ์ ฐ์ด๋๋ก ์๊ฐ์ ๋ฐ๋ผ ํํ๋ ์์ฉ ๋๊ฒจ์ฃผ๋ ๊ธฐ๋ฅ์ ํด์ค์ผ๋จ
์ด๊ฒ ์๋๋ฉด ๊ฒ์ ๋ก์ง์์์ ํ๋ ์์ ํ๋์ฉ ๋๊ฒจ์ผ ๋๋๋ฐ ๊ทธ๋ฌ๋ฉด ๊ด๋ฆฌ์ ๋ถํธํ ๊ฑฐ ๊ฐ์์
ํํ๋ก์ ํธ ์ ฐ์ด๋ ์ฝ๋ ์ผ๋ถ๋ฅผ ๊ฐ์ ธ๋ค์
TEXTURE_PIXEL_SIZE์ธ๊ฐ ํ๋ ํ ์ค์ณ ํฌ๊ธฐ ๊ฐ์ ธ์ค๋ ์ ฐ์ด๋ ๋ด๋ถ ์์ฝ์ด๋ ์๋จนํ๋๊ฑฐ ๊ฐ์์
๋งต์นฉ ๋ถ๋ฌ์ค๋ ์ปค์คํ
ํ์ผ์
์ฝ๋์์์ SetShaderParam ์ ์ฌ์ฉํด์ ์ฌ์ฉํ๋ ํ
์ค์ณ์ ํฌ๊ธฐ๋ฅผ ๋ฃ์ด์ค
๊ทธ๋๊น ๋์์ํจ
๋ฌธ์ ๋ ์์งค์ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ํ๋ถ ๋งต์นฉ ๊ฒฝ๊ณ์ ์ ์ฝ๊ฐ ์ค์ด ๊ฐ๋ ๋ฌธ์ ๊ฐ ์๋๋ฐ ๋ฌด์จ ๋ฌธ์ ์ธ์ง ์ ํ ๋ชจ๋ฅด๊ฒ ์
(์ฝ๊ฐ ์์ฌ๋๋๊ฑด float๊ฐ์ผ๋ก ์์น๋ฅผ ๊ณ์ฐํ๋๊น ์ค์ฐจ๊ฐ ๋ฐ์ํด์ ๊ทธ๋ฐ๊ฑฐ ์๋๊ฐ ์ถ์๋ฐ. ์ ๋ ฅ๊ฐ์ texture๋ผ๋ ํจ์๊ฐ ์ ๋ ฅ๊ฐ์ vec2๋ก ๋ฐ๋๊ฑฐ ๊ฐ์์ ์ด๋ป๊ฒ ํด์ผ๋ ์ง ๋ชจ๋ฅด๊ฒ ์)
ํจ์ ๋ ํผ๋ฐ์ค๋ ์ฐพ๊ธฐ ์ด๋ ต๊ณ ... (์๋ง gles์ ฐ์ด๋ ์ฝ๋๋ฅผ ์์์ผ ๋๋๊ฑฐ ์๋๊ฐ ์ถ์, ์ฑ ์ ํ๋ ์ฌ์ ๋ด์ผ๋๋)
๊ทธ์ธ์ ์๋๋งต ํฐ์ฌ์ด์ฆ ๋งต์นฉ์ ์ ๋์ํจ
์ ๊ตฌ ์ ์ธํ๊ณ ๋ค๋ฅธ ๋ฐฉํฅ์ ์ด๋ ๋ถ๊ฐ๋ก ์ธํ ํ๋๊ฑด ์์ญ๊ถ ๊ธฐ๋ฅ ์ถ๊ฐํ๋ฉด์ ๋ฃ์๊ฑฐ๋๊น ์ค๋์ ์คํตํด๋ ๋จ
ํ๋ถ์ ๊ฒฝ์ฐ ๊ฐ๋ก 1 ์ธ๋ก 2์ฌ์ด์ฆ ํฐ ๋งต์นฉ์ผ๋ก ํ ์์ ์ด์๋๋ฐ ์๊ฐ๋ณด๋ค ํฝ์ ์ด ์์์ ์ธ๋ก 32๋ณด๋ค๋ ํฌ๊ณ 40ํฝ์ ๋ณด๋ค๋ ์์๊ฑฐ๋ผ
์์น ์ก๊ธฐ๊ฐ ์ ๋งคํ ๋ฏ( ์ด์ง ๋ํธ๋ฅผ ์์ ํด์ผ ๋ ์๋ ์๊ฒ ์)
ํ๋ถ ๊ตฌ๊ฐ์ ์ํ์ปท์์์ธ๊ฐ ํ๋๊ฑธ๋ก 2D๊ด์ํจ๊ณผ๋ ๋ฃ์ด์ผ ๋๋๊น ๊ณ ๋๊ฐค์ ์ฌ๋ผ์์๋ (๊ณ ๋์ฉ ์ ฐ์ด๋ ์ฝ๋๊ฐ ์๋ค๋) 3๋ง์์ง๋ฆฌ ์ฑ ์ ์ฌ์ผ๋ ์ง๋ ๋ชจ๋ฅด๊ฒ ์
์์ ๋๋๊ณ ๋๋ ์๋ฐ์ด๋ฒ๋ฅํ๊ณ
๋ํธ ์ฐ์ ์๊ฐ์ด ์๋๋ฐ... ๋ชจ๋ฅด๊ฒ ๋ค
๋ด์ผ ํด์ผ์ง
ใ ใฑ
--- ์ ฐ์ด๋ ์ฝ๋ --
shader_type canvas_item;
render_mode unshaded;
uniform sampler2D frames: hint_albedo;
uniform float count; // 4
uniform float duration; // 0.3f
uniform float textureWidth; // 1024
uniform float xInTex; // 18
uniform float yInTex; // 4, not use
uniform float chipSizeWidth; // 32
void fragment() {
float startX = xInTex / (textureWidth / chipSizeWidth);
float width = chipSizeWidth / textureWidth;
float frame = floor(mod(TIME, count * duration) / duration);
float offset = floor((UV.x - startX) / width);
COLOR = texture(frames, UV + vec2((mod(offset + frame, count) - offset) * width, 0));
}
2d๊ด์์ ๊ทธ๋ฅ ๋ด์ฅ๋์ด์๋๊ฑฐ ์ฐ๋ฉด ์๋?
๋ด์ฅ๊ด์ ์ข ๋๋ฌด ์ง์ ๊ฐ์์ ๋ค๋ฅธ๊ฑฐ ์ฐ๊ณ ์ถ๋๋ฐ
๊ทธ๊ทธ ๋ถ๋๋ฝ๊ฒ ์ค์ ํ ์ ์๋๊ฑฐ๊ฐ์๋ฐ ํ๋ฒ ์ฐพ์๋ด
https://www.google.com/url?sa=i&url=https%3A%2F%2Fgamedev.stackexchange.com%2Fquestions%2F109592%2Funity-2d-alpha-cutout-layer-for-sprites&psig=AOvVaw3KYBVPwmnJCvYe4e6lmzQc&ust=1652971888502000&source=images&cd=vfe&ved=2ahUKEwiVjJajpun3AhWiTPUHHY88B9IQr4kDegUIARCRAQ
https://www.google.com/imgres?imgurl=https%3A%2F%2Fi.stack.imgur.com%2FnvARE.gif&imgrefurl=https%3A%2F%2Fgamedev.stackexchange.com%2Fquestions%2F109592%2Funity-2d-alpha-cutout-layer-for-sprites&tbnid=IkLIKbfe8O6sWM&vet=12ahUKEwiVjJajpun3AhWiTPUHHY88B9IQMygGegUIARCYAQ..i&docid=NwTOB6KVDqVUMM&w=640&h=360&q=2d%20cutout%20lighting&ved=2ahUKEwiVjJajpun3AhWiTPUHHY88B9IQMygGegUIARCYAQ
์ด ๋๊ฐ ๋น์ทํ ๊ด์์ ํ๋ฉด์ ์ฌ๋ฌ๊ฐ ์ฐ๊ณ ์ถ์์ ํฉ์
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHCBISERERDxEREQ8REREPEREPEhEPEQ8PGBQZGRgUGBgcIS4lHB4rHxgYJjgmKy8xNTU1GiQ7QDszPy40NTEBDAwMEA8QGhIRGDQhGiExMTQxNDExNDQ0NDQ0MTQ0NDE0NDQ0NDQ0MTQ0NDQxNDExNDQ0NDQ0NDE0NDQ0NDQ0NP/AABEIAMIBAwMBIgACEQEDEQH/xAAbAAABBQEBAAAAAAAAAAAAAAADAAECBAUGB//EADsQAAIBAgUBBgEKBAcBAAAAAAABAgMRBAUSITEGEyJBUWFxkRQyQlJicoGxstEzocHCIzRTgpKi8BX/xAAaAQADAQEBAQAAAAAAAAAAA
์ด๋ฐ๊ฑด ์ข ๋ฉ์๊ณ
๋ง์ง๋ง๋งํฌ๋ ์งค๋ฆฐ๊ฑฐ์? ์๋๊ฐ์ ธ
์ ์ด์ ๋งํฌ ํ์์ด ์๋๊ฑฐ ๊ฐ์
๋งํฌ๋ณต์ฌ ์๋ชปํ๋๋ณด๋ค
https://docs.godotengine.org/ko/stable/tutorials/2d/2d_lights_and_shadows.html
์ด๊ฑฐ์
๊ธฐ๋ณธ ๋ด์ฅ Light2D๋ก ๋น์ทํ๊ฒ ๋๋๊ฑฐ ๊ฐ์๋? Mode๋ฅผ Mix๋ก ํด๋๊ณ ๊ฐ ๊ด์์ ๋ชจ์์ ๋ง๋ ํ ์ค์ณ๋ฅผ ์ค์ ํด๋ณด๋ ์์ผ๋ก ๋ ?๊ฑฐ๊ฐ์
์ค์ค ใณ Right2d mode mixed ํด๋ด์ผ๊ฒ ๋ค
๊ทธ๋ฆฌ๊ณ ์์ด๋ ๋ ํผ๋ฐ์ค ๊ณ ๋ ๊ณต์๋ฌธ์์ ๋์์์ด
์ ฐ์ด๋ ํด๋์ค๋ ๋ ํผ๋ฐ์ค ์๋๋ฐ ์ ฐ์ด๋ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ธ๊ฒ๋ง ๋์ค๋๋ฐ ๋์์? ์ ฐ์ด๋ ์ฝ๋์์์ ์ฐ๋ ํจ์ ์ข ๋ฅ๋ ํ๋ผ๋ฏธํฐ๊ฐ์๊ฑฐ ์์ผ๋ฉด ์ข๊ฒ ๋๋ฐ
๋์ด ๋งํ๋ ํจ์์ข ๋ฅ ๊ทธ๋ฐ๊ฒ ๋ชจ๋งํ๋๊ฑฐ์? dot()๊ฐ์๊ฑฐ?
texture() ๊ฐ์๊ฑฐ
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/shading_language.html
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/spatial_shader.html
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/canvas_item_shader.html
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/particle_shader.html
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/canvas_item_shader.html
์ค๋
๋ณธ๊ฒ ์ด๊ฑด๋ฐ
์์ฝ์ด๋ ์๋ฃํ ๊ฐ์๊ฑด ์๋๋ฐ
texture() ์ด๊ฑด ์๋๋ผ๊ณ
์ฌ๋ฆฐ ๋งํฌ์ค์ ๋งจ์ ๋งํฌ ๋๊ฐ์ ์คํฌ๋กค ์ญ ๋ด๋ฆฌ๋ฉด ์์ด
๋ง๋ค ์๋ค ใณใณ
๊ทธ๋ฆฌ๊ณ ์์ง์ด๋ ์ ๋ค๋ง ๋ฐ๋ก ๋ฑ๊ฐ๋ก ์๋ผ์ ๋ฃ์ด์ ์ ๋๋ฉ์ดํฐ๋ ํ ์ค์ณ๋ก ํด์ฃผ๋ฉด ์๋?
ํ์ผ์ด ๋ง์ผ๋ฉด ํท๊ฐ๋ ค์ ์คํ๋ผ์ดํธ ์ํธ๋ก ๋ง๋ค์ด ์ฐ๋๊ฑธ ์ข์ํจ
์ ํํ๋ ์ ๋ํฐ ์ธ๋ ํ์ผ ๋งต์นฉ ์ฌ๋ฌ๊ฐ ๋ฃ์๋๋ ์ปค๋ฐ, ํธ์, ํ์ผ์ด๋, ์ญ์ , ํ๋ก์ ํธ ์ผ๊ธฐ, ๋๊ธฐ, ๋น๋, ๋ชจ๋ ์ํฉ์์ ๋ค ๋๋ ค์ ธ์, ์์ํ ํ์ผ์ ๊ฐฏ์๊ฐ ๋ง์์ง๋๊ฑธ ๊ธฐํผํ๊ฒ๋จ
๊ทธ๋ฆฌ๊ณ TEXTURE_PIXEL_SIZE๋ ํ ์ค์ณ ํฌ๊ธฐ๋ฅผ ๊ฐ์ ธ์ค๋๊ฒ ์๋๋ผ 1ํฝ์ ์ด UV์์์ ๋ช์ธ์ง๋ฅผ ์๋ ค์ฃผ๋ ๊ฑฐ์ฌ
UV๋ 0~1์ด๋๊น ๋ง์ฝ ํ ์ค์ณ์ ์ฌ์ด์ฆ๊ฐ 64x32๋ฉด (1/64, 1/32)๋ฅผ ๋ฐํํจ
์ค ใฑใ ์์ ๋ค๋ฅธ๊ฑฐ์๋ค
ํน์ ๊ฒฝ๊ณ ์ค ๊ฐ๋๊ฑด ์์ฌ๊ฐ๋๊ฑฐ ์์?
์ฝ๋์ฌ๋ ค๋ณด์
์ฌ๋ฆผ
์ ๊ฑฐ ์ ฐ์ด๋๋ฅผ ์ ์ฉํ ๋จธํฐ๋ฆฌ์ผ์ ํ์ผ๋งต ์์ฒด์ ์ ์ฉํ๋ฉด ๋๋๊ฑฐ?
์๋๋ฉด ๊ทธ๋ฅ ํ์ผ๋งต ์๋ํฐ ์์ฒด๋ฅผ ์ฌ๋ ค์ค ์ ์์ด??
ํด๊ฒฐํจ
๋ถํธ...
์ธ๋์์ง์ ์ฐ๋ฉด ๊ฒ์๋ง๋๋ ์๊ฐ๋ณด๋ค ์์ง๊ณผ ์จ๋ฆํ๋ ์๊ฐ์ด ๋ ๊ธธ์ด์ง
๊ทผ๋ฐ ์ ๋ํฐ๋ ๋ํด์ ๋ณ๋ก ใ ใ