mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-04-21 11:11:28

Roblox Studio/스크립트


파일:상위 문서 아이콘.svg   상위 문서: Roblox Studio
파일:Roblox 로고.svg 파일:Roblox 로고 화이트.svg
게임 목록 | 이벤트 | 2차 창작 | 유료 서비스
Roblox Corporation
평가 (긍정적) | 문제점 및 비판 | 논란 및 사건 사고 | Roblox Studio 스크립트

1. 개요2. 스크립트
2.1. 스크립트 종류
2.1.1. 로컬 스크립트2.1.2. 서버 스크립트2.1.3. 모듈 스크립트
2.2. 반복문과 조건문 관련2.3. 자료형
2.3.1. BrickColor2.3.2. CFrame
2.3.2.1. 속성2.3.2.2. 메서드
2.3.3. Vector32.3.4. UDim2
2.3.4.1. 메서드2.3.4.2. 속성
2.3.5. TweenInfo
2.3.5.1. 속성
2.4. 라이브러리
2.4.1. bit322.4.2. buffer2.4.3. coroutine2.4.4. debug2.4.5. math
2.4.5.1. 함수2.4.5.2. 속성
2.4.6. os2.4.7. string
2.4.7.1. 함수
2.4.8. table
2.4.8.1. 함수2.4.8.2. 속성
2.4.9. task
2.4.9.1. 함수
2.4.10. utf8
2.5. 글로벌
2.5.1. 함수2.5.2. 속성
2.6. 이벤트
2.6.1. BasePart 관련2.6.2. Players 관련2.6.3. ProximityPrompt 관련2.6.4. Gui 관련2.6.5. RemoteEvent2.6.6. ClickDetector2.6.7. Instance2.6.8. 서비스들 관련
2.6.8.1. RunService 서비스2.6.8.2. UserInputService 서비스
2.7. 메서드
2.7.1. Instance(개체)2.7.2. Humanoid 개체2.7.3. Players2.7.4. BindableEvent2.7.5. BindableFunction2.7.6. RemoteEvent2.7.7. RemoteFunction2.7.8. Seat2.7.9. DataModel(game)2.7.10. PVInstance2.7.11. 서비스
2.7.11.1. Debris 서비스2.7.11.2. MarketplaceService 서비스2.7.11.3. TweenService 서비스2.7.11.4. BadgeService 서비스2.7.11.5. workspace 서비스
2.8. 클래스 목록

1. 개요

로블록스 스튜디오의 스크립트에 대해 설명하는 문서다.

2. 스크립트

2.1. 스크립트 종류

로블록스에는 총 3개의 스크립트 종류들이 있다.

2.1.1. 로컬 스크립트

파일:Roblox/로컬스크립트.png
로컬 스크립트 [Local Script]

서버가 아닌 로컬[1]에서 구동 되는 스크립트다.[2] 로컬 스크립트에서 변동 된 항목들을 개인에게만 적용 되며, 모든 물리 연산은 개인 컴퓨터에서 계산 된다. [3]
로컬 스크립트는 당연히도 클라이언트 측에서 작동되는 스크립트 이므로 클라이언트와 관련된 개체 밑에서만 작동을 한다. [4]

또한 로컬스크립트에서만 작동되는 서비스나 이벤트들이 있는데, 플레이어의 입력을 감지하는 UserInputService 와 함수가 프레임 마다 실행될수 있게 하는 RenderStepped 이벤트, 등이 있다.

2.1.2. 서버 스크립트

파일:Roblox/서버스크립트.png
서버 스크립트 [Server Script]

거의 스크립트들의 기본값이라 봐도 무방. 서버에서 연동 되는 스크립트다. 로컬이 아닌 서버에서 모든 연산 및 물리 계산을 하기 때문에 개인 컴퓨터의 사양에 영향을 안받는다. 서버 스크립트에서 변동 된 항목들을 모든 플레이어에게 적용이 된다. 서버 스크립트는 로컬 스크립트와는 다르게 모든곳에서 작동 된다.[5]

2.1.3. 모듈 스크립트

파일:Roblox/모듈스크립트.png
모듈 스크립트 [Module Script]

반복적인 코드들을 정리하고 재사용 할수 있게 하는 특별한 류의 스크립트이다.
모듈 스크립트는 기본적으로 테이블 형태로 되어있어 자동적으로 실행되지 않는다.
또한 서버와 로컬 공용으로 쓰이며 호환되지는 않는다.
모듈 스크립트 자체가 정적이라 특별한 이유없이는 잘 쓰이지 않았지만, 메타테이블 이라는 테이블을 클래스화 시켜주는 방법이 등장함으로써 모듈 스크립트도 동적으로 사용이 가능해졌고 사용률도 훨씬 올랐다.

다음은 모듈 스크립트의 기본 사용예제이다.

[ 모듈 스크립트 사용 예시 ]
#!syntax lua
--모듈 스크립트
local module = {}

module.a = 1

function module.b()
    print("b")
end

function module:c()
    print("c")
end

return module -- 모듈 스크립트는 값을 반환해야함.

--서버 or 로컬 스크립트

local module = require(모듈_경로) -- 모듈 볼러오기

print(module.a) -- 1 출력
module.b() -- b 출력
module:c() -- c 출력

2.2. 반복문과 조건문 관련

#!syntax lua
local Cooldown = false --쿨다운 변수 만드는 부분
local Model = script.Parent:GetDescendants() -- 모델 지정후 모델의 모든 개체 지정
local parts = {} -- 빈 배열 생성(파트들을 담기위한 배열)

for a=1, #Model do
    if Model[a]:IsA("BasePart") then
        table.insert(Model[a], parts)
    end
end

for i, v in ipairs(parts) do
    v.Touched:Connect(function(part)
        if part.Parent:FindFirstChild("Humanoid") and Cooldown == false then
            Cooldown = true
            local humanoid = part.Parent:FindFirstChild("Humanoid")
            humanoid.Health = 0
            task.wait(1)
            Cooldown = false
        end
    end
end

}}}

2.3. 자료형

로블록스에는 수많은 자료형들이 있지만 그 많은 자료형중 몇몇만 자주 사용된다.

2.3.1. BrickColor

로블록스에서 기본으로 제공하는 색깔은 다음과 같다.
[ 펼치기 · 접기 ]
* White 흰색
  • Grey 회색
  • Light yellow : 연노랑
  • Brick yellow : 브릭 옐로우
  • Light green(Mint) : 연초록(민트)
  • Light reddish violet : 연붉은 보라색
  • Pastel bule : 파스텔 블루
  • Light orange brown : 밝은 브라운 오랜지
  • Nougat : 누가(견과류)
  • Bright red : 밝은 빨강
  • Med. reddish violet : 중간정도로 붉은 보라색
  • Bright bule : 밝은 파랑
  • Bright yellow : 밝은 노랑
  • Earth orange : 지구 오랜지
  • Black : 검정
  • Dark grey : 짙은 회색
  • Dark green : 짙은 초록
  • Medium green : 중간 초록
  • Lig. Yellowich orange : 밝은 노랏빛 오랜지
  • Brignt green : 밝은 초록
  • Dark orange : 짙은 주황
  • Light bluish violet : 밝은 청자색
이외 여러 색이 있다.

2.3.2. CFrame

2.3.2.1. 속성
2.3.2.2. 메서드

2.3.3. Vector3

2.3.4. UDim2

2.3.4.1. 메서드
2.3.4.2. 속성

2.3.5. TweenInfo

2.3.5.1. 속성

2.4. 라이브러리

2.4.1. bit32

2.4.2. buffer

2.4.3. coroutine

2.4.4. debug

2.4.5. math

2.4.5.1. 함수
2.4.5.2. 속성

2.4.6. os

2.4.7. string

2.4.7.1. 함수[16]

2.4.8. table

2.4.8.1. 함수
2.4.8.2. 속성

2.4.9. task

2.4.9.1. 함수

2.4.10. utf8

2.5. 글로벌

로블록스 내 어느 코드에서나 쓸수 있는 함수 또는 속성들로, 로블록스 스튜디오의 코드는 Lua 기반이기에 Lua 내 글로벌 또한 들어간다.

2.5.1. 함수

2.5.2. 속성

2.6. 이벤트

2.6.1. BasePart[24] 관련

[ 스크립트 예시 펼치기 · 접기 ]
* 닿으면 죽는 KillPart 스크립트
#!syntax lua
local Cooldown = false --쿨다운 변수 만드는 부분

script.Parent.Touched:Connect(function(hit)
    local Humanoid = hit.Parent:FindFirstChild("Humanoid") -- 변수 만드는 부분
    if Humanoid and not Cooldown then --휴머노이드 개체가 있는지 확인하는 부분 + 쿨다운이 아닌지 확인하는 부분
        Cooldown = true
        Humanoid.Health = 0 --닿은 플레이어의 체력
        task.wait(1) --1초 기다림
        Cooldown = false
    end
end)

[ 스크립트 예시 펼치기 · 접기 ]
* 더이상 닿지 않을 때 죽는 스크립트(Touched 예시 스크립트에서 이벤트만 바꾼 버전이다)
#!syntax lua
local Cooldown = false --쿨다운 변수 만드는 부분

script.Parent.TouchEnded:Connect(function(hit)
    local Humanoid = hit.Parent:FindFirstChild("Humanoid") --변수 만드는 부분
    if Humanoid and not Cooldown then --휴머노이드 개체가 있는지 확인하는 부분 + 쿨다운이 아닌지 확인하는 부분
        Cooldown = true
        Humanoid.Health = 0 --닿은 플레이어의 체력
        task.wait(1) --1초 기다림
        Cooldown = false
    end
end)

2.6.2. Players 관련

2.6.3. ProximityPrompt 관련

2.6.4. Gui 관련

#!syntax lua
GuiButton 개체.MouseButton1Click:Connect(function()
    print("좌클릭이 감지 됐습니다!") --버튼을 좌클릭했다는 문구 출력
end)
}}}
GuiButton 개체.MouseButton2Click:Connect(function()
print("우클릭이 감지 됐습니다!") --버튼을 우클릭했다는 문구 출력
end)
}}}}}}

2.6.5. RemoteEvent

2.6.6. ClickDetector

2.6.7. Instance

[ 스크립트 예시 펼치기 · 접기 ]
* 스크립트의 Parent가 바뀌면 출력에 프린트하는 스크립트
#!syntax lua
script.AncestryChanged:Connect(function(Child, Parent)
    print(Child.Name .. "의 Parent는 이제" .. Parent.Name .. "입니다.")
end)

2.6.8. 서비스들 관련

2.6.8.1. RunService 서비스
2.6.8.2. UserInputService 서비스

2.7. 메서드

2.7.1. Instance(개체)

2.7.2. Humanoid 개체

2.7.3. Players

2.7.4. BindableEvent

2.7.5. BindableFunction

2.7.6. RemoteEvent

2.7.7. RemoteFunction

2.7.8. Seat

일단 Seat도 BasePart이기 때문에 BasePart의 명령어가 모두 적용 된다.

2.7.9. DataModel(game)

이 외에도 여러 가지 서비스가 존재한다.
}}}

2.7.10. PVInstance

2.7.11. 서비스

2.7.11.1. Debris 서비스
2.7.11.2. MarketplaceService 서비스
2.7.11.3. TweenService 서비스
Tween:Play()
}}}}}}* Tween 개체:Play()* Tween 개체:Cancel()* Tween 개체:Pause()
2.7.11.4. BadgeService 서비스
2.7.11.5. workspace 서비스
서비스이긴 하지만 이건 코드 내에서 game:GetService("workspace")로 쓰지 않아도 쓸수 있는 서비스다.

2.8. 클래스 목록


[1] 개인 컴퓨터 [2] 그렇기에 game.Players.LocalPlayer를 통해서 해당 로컬 스크립트가 구동중인 플레이어 값을 구할 수 있다 [3] 그러므로 대부분의 서버 측 처리가 불필요한 상황에서는 서버 렉 감소를 위해 로컬스크립트를 사용하는게 효율적이다. [4] 예로 gui, player, character 안에서 작동이 된다. [5] 하지만 특정 플레이어에게만 적용을 원할 경우 로컬 스크립트를 쓰는게 사실상 필수다 [6] 등호 하나는 앞의 값에 뒤의 값을 덮어쓰겠다는 뜻이다. [7] 서비스 및 BasePart와 같은 추상 클래스를 제외한 모든 클래스의 상위 클래스인 Instance 클래스의 생성자를 보유하고 있는 자료형이다. [8] 타 언어의 null 과 같다. [9] 예시로 game.Players.PlayerAdded:Connect(function(plr))의 plr [10] gui 상에서 많이 사용된다. [11] CFrame과 함께 위치를 나타내는 단위이다. [12] 예시) script.Parent.CFrame = script.Parent:Lerp(CFrame1, 0.7) --> script.Parent.CFrame과 CFrame1의 Position 간격이 1(100%)이라하면 Position이 0.7(70%) 되는 지점에 온다. [13] 반복 횟수를 0으로 설정하면 1번 움직이고, 음수로 설정하면 무한 반복한다. [14] 다차원 테이블(테이블 안에 있는 테이블)도 가능하며 key-value 형의 딕셔너리(for i, v in ipairs(테이블) do)도 가능하다. [주의할점] 루아 스크립트에서는 테이블의 번호를 1번 부터 센다. [16] 한글은 한글자가 깨진글자 3개로 이루어져 있어 한글로 하면 버그가 생길수도 있다. 예) string.len("안녕하세요") -> ��������������� -> 15출력 [17] 찾는글자가 두글자라면 시작지점을 반환해준다. 예) string.find("11223344", "22") -> 3출력 [18] 예) string.sub("12345678", 4, 8) -> " "45678" [19] 시작번호나 끝번호에 음수를 넣으면 글자 끝에서 뒤로간다. -1이면 마지막 글자, -2면 마지막 2번째 글자 이런식이다. [최적화별로] 최적화는 별로니 많이 사용하지는 않기 바람. [21] 디버깅할때 말고는 별로 쓸모가 없다. [최적화별로] [23] 괄호 안에 아무것도 안넣으면 기본값으로 0.03초를 기다린다. [24] 파트, 웨지, 메시 등 로블록스의 모든 밟을수 있는 것들을 포함한 넓은 개념이다. [25] Touched 이벤트는 뭔가가 닿여을때 한번만 작동하고 만약 어떤 파트가 Touched 를 감지하는 파트 안으로 들어오면 Touched 를 감지 하지 못한다. 예를 들어 Touched 가 감지될때마다 플레이어의 채력을 5씩 깎는 파트가 있다고 하면, 플레이어가 처음 파트에 닿였을때는 채력이 깎이지만 데미지 파트 안에서는 아무리 움직여도 데미지를 받지 않는다. 만약 데미지 파트 안에서도 데미지를 받게 만들고 싶다면 무한 반복문을 통해 플레이어의 위치가 파트 안인지 감지해주는 스크립트를 만들어준다. [26] 좌클릭만 해당 [서버] [클라이언트] 클라이언트의 기기라고 하였으므로 로컬스크립트에만 넣어야 한다. 서버는 마우스를 누르거나 키보드를 누를수 없다. [로컬] [30] 사실상 삭제가 아닌 개체의 Parent를 nil 값으로 변경해서 못찾게하는거지만, 그냥 편하게 삭제 시킨다고 보면 된다 [31] GetChildren의 상위호환이라고 보면 된다 [서버] 서버측 스크립트에서만 사용 가능. [서버] [클라이언트] [35] 예제: RunService(실제 게임내 이름은 Run Service이다.) [클라이언트] 클라이언트의 기기라고 하였으므로 로컬스크립트에만 넣어야 한다. 서버는 마우스를 누르거나 키보드를 누를수 없다. [클라이언트] [최적화별로] [구버전] 현재에는 다른것으로 대체되었다. [구버전] [구버전] [최적화별로]

분류