Roblox Studio/스크립트

덤프버전 :


파일:나무위키+상위문서.png   상위 문서: Roblox Studio

1. 개요
2. 스크립트
2.1. 스크립트 종류
2.1.1. 로컬 스크립트
2.1.2. 서버 스크립트
2.1.3. 모듈 스크립트
2.2. 반복문과 조건문 관련
2.3. 자료형
2.3.1. BrickColor
2.3.2. Vector3
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. 함수 ��������������� -> 15출력">[1]
2.4.8. table
2.4.9. task
2.4.9.1. 함수
2.4.9.2. 속성
2.4.10. utf8
2.5. 글로벌
2.5.1. 함수
2.5.2. 속성
2.6. 이벤트
2.6.1. BasePart[2] 관련
2.6.2. Players 관련
2.6.3. ProximityPrompt 관련
2.6.4. Gui 관련
2.6.5. RemoteEvent
2.6.6. ClickDetector
2.6.7. 모든 개체 공통
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. RemoteEvent
2.7.5. DataModel(game)
2.7.6. PVInstance
2.7.7. 서비스
2.7.7.1. Debris 서비스
2.7.7.2. MarketplaceService 서비스
2.7.7.3. TweenService 서비스
2.7.7.4. BadgeService 서비스
2.7.7.5. workspace 서비스


1. 개요[편집]


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

2. 스크립트[편집]



2.1. 스크립트 종류[편집]


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


2.1.1. 로컬 스크립트[편집]


로컬 스크립트 [Local Script]

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

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

2.1.2. 서버 스크립트[편집]


서버 스크립트 [Server Script]

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


2.1.3. 모듈 스크립트[편집]


모듈 스크립트 [Module Script]

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

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

[ 모듈 스크립트 사용 예시 ]
--모듈 스크립트
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. 반복문과 조건문 관련[편집]


  • end : 조건문이나 반복문, 함수를 끝낸다.

  • while 조건 do : 조건이 계속 충족되는 한 계속 실행한다. [wait필요]
    • while true do : 게임이 실행된뒤 영원히 반복되는 반복문이다.[wait필요]

  • for i = val1, val2, val3 do : 조금 복잡하다. 간단히 요약하면, i가 처음 시작하는 수가 val1이고, 한번 반복하면 i가 val3씩 늘어난다. for 반복문은 i가 val2보다 큰지 계속 검사하여, 만약 i가 val2보다 크면 반복문을 빠져나간다.[wait필요]
    • for i, v in ipairs(배열) do : for i = val의 상위버전, 배열의 i 번째 개체를 자동으로 변수 v로 치환해주는거다. 이거를 이용하여 모델에 스크립트 하나만 넣어 모델의 어느 파트에만 닿아도 죽게 만들 수 있다.
      [ 스크립트 예시 펼치기 · 접기 ]
      • 아무 파트나 닿으면 죽는 모델 스크립트
      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
      

  • repeat (함수) until (조건) : 조건일 때 까지 함수를 계속 반복한다.

  • if 조건 then : 만약 조건이 충족되면 안에 있는걸 실행한다.
- (숫자) = (숫자) 로 조건을 쓰면 오류 난다.[8] 같은지 비교할 땐 (숫자) == (숫자) 를 쓰도록 하자.
  • else : if 조건문에서 여사건에 해당한다.
  • elseif 조건 then : 만약 위에 있는 조건문이 맞지 않다면 이 조건문을 실행시킨다.



2.3. 자료형[편집]


로블록스에는 수많은 자료형들이 있지만 그 많은 자료형중 몇몇만 자주 사용된다.
  • Axes : 개체의 아크핸들(스튜디오에서 BasePart를 클릭했을때 나오는 회전축)의 회전축을 제어한다.
  • BrickColor : 로블록스에서 기본으로주는 색깔들
  • CatalogSearchParams
  • CFrame : Vector3 처럼 위치를 나타내는 스크립트지만 CFrame은 개체의 피벗을 기준으로 한다.
  • Color3 : RGB
  • ColorSequence
  • ColorSequenceKeypoint
  • Content
  • DateTime
  • DockWidgetPluginGuiInfo
  • Enum : 거의 모든 자료형의 담고있는 자료
  • EnumItem
  • Enums : Enum과 같음
  • Faces
  • FloatCurveKey
  • Font : 글꼴
  • boolean : 참/거짓
  • nil : 아무것도 없는 값 [9]
  • number : 숫자
  • Instance : 개체 [10]
  • NumberRange
  • NumberSequence
  • NumberSequenceKeypoint
  • OverlapParams
  • PathWaypoint
  • PhysicalProperties
  • Random : 무작위 난수나 방향
  • Ray : 한 방향으로는 유한하지만 다른 방향으로는 무한한 반직선 백터
  • RaycastParams
  • RaycastResult
  • RBXScriptConnection
  • RBXScriptSignal : 주로 Event로 알려져있고, 리스너[11]에게 함수를 호출하라고 한다.
  • Rect
  • Region3 : 직육면체 지역 공간의 볼륨
  • Region3int16
  • SharedTable
  • TweenInfo : TweenService를 이용한 동작을 지정한 개체
  • UDim
  • UDim2 : 2차원 위치 단위 [12]
  • Vector2
  • Vector2int16
  • Vector3 : 3차원 위치 단위 [13]
  • Vector3int16 : Vector3와 유사하나 이건 각각의 좌표들을 16진법으로 나타낸다.

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. Vector3[편집]


  • 속성들
    • X : x축의 값
    • Y : y축의 값
    • Z : z축의 값
    • Magnitude : 두 Vector3 사이의 직선 거리
    • Unit : 크기는 1인 닮음 크기의 Vector3

2.4. 라이브러리[편집]


  • bit32
  • buffer
  • coroutine
  • debug
  • math (여러가지 연산이나 숫자)
  • os (시간 관련 라이브러리)
  • string (문자열)
  • table (테이블)[14][주의할점]
  • task
  • utf8

2.4.1. bit32[편집]



2.4.2. buffer[편집]



2.4.3. coroutine[편집]


  • coroutine 개체:Create(함수) : 괄호 안에 넣은 함수를 코루틴으로 만들어 준다.
    • coroutine 개체:resume(코루틴, 메게변수...) : 괄호 안에 넣은 코루틴을 실행한다.
      • coroutine.yield() : coroutine 개체:resume()으로 만든 코루틴을 일시정지 시켜준다.
  • coroutine 개체:wrap(함수) : 괄호 안에 넣은 함수를 함수처럼 쓸수 있는 코루틴으로 만들어 실행시켜준다.

2.4.4. debug[편집]



2.4.5. math[편집]



2.4.5.1. 함수[편집]

  • math.abs(값) : 값의 절댓값을 반환한다.
  • math.ceil(값) : 천장함수. 값을 올림한 값을 반환한다.
  • clamp(값, 최솟값, 최댓값) : 최솟값과 최댓값 사이 정수의 개수를 반환한다.
  • floor(값) : 바닥함수. 값을 내림한 값을 반환한다.
  • max(값1, 값2... , 값n) : 여러개의 값중 가장 큰 값을 반환한다.
  • min(값, 값2... , 값n) : 여러개의 값중 가장 작은 값을 반환한다.
  • random(최솟값, 최댓값) : 최솟값과 최댓값사이의 값중 아무거나를 반환한다.
  • round(값) : 반올림. 값을 반올림한 값을 반환한다.

2.4.5.2. 속성[편집]

  • math.huge : 로블록스에서 쓸 수 있는 가장 큰 수를 반환해준다. (약 2¹⁰²⁴) 그냥 무한이라 생각해도 된다.
  • math.pi : 원주율

2.4.6. os[편집]



2.4.7. string[편집]



2.4.7.1. 함수[15][편집]

  • string.len(문자열) : 문자열의 길이를 반환해준다. 문자열 앞에 #을 붙히는 것으로도 대체 가능하다.
  • string.upper(문자열) : 문자열의 모든 글자를 대문자로 만들어준다.
  • string.lower(문자열) : 문자열의 모든 글자를 소문자로 만들어준다.
  • string.reverse(문자열) : 문자열의 배치를 뒤집어준다.
  • string.split(문자열, 기준글자) : 문자열을 기준글자를 기점으로 나누어 테이블에 담아 반환해준다. 이걸 이용해서 string.split(문자열, "")으로 글자 하나하나를 쪼개 테이블에 담을수 있다.
  • string.find(문자열, 찾는글자) : 문자열에서 찾는 글자를 찾은다음 몇번째 글자인지 반환해준다. 만약 찾는글자가 문자열에 아예 없다면 nil을 출력해준다. 3출력">[16]
  • string.match(문자열, 찾는글자) : 문자열에서 찾는글자를 찾아 string으로 반환해준다.
  • string.sub(문자열, 시작번호, 끝번호) : 문자열에서 시작번호 부터 끝번호 까지를 string으로 반환해준다. \" \"45678\"">[17][18]
  • string.gsub(문자열,찾는글자,바꿀글자) : 문자열에서 찾는글자를 모두 바꿀글자로 바꿔서 string 으로 반환해준다.

2.4.8. table[편집]



2.4.9. task[편집]



2.4.9.1. 함수[편집]

  • table.insert(테이블, 자료, 순서) : 지정한 테이블에다가 자료의 순서를 정해서 넣는다. 순서를 안 써놓으면 자동으로 마지막 순서로 넣어진다.
  • table.remove(테이블, n번째) : 지정한 테이블에서 n전째 항목을 없엔다.
  • table.maxn(테이블) : 테이블중에서 가장 큰 숫자를 반환한다. 테이블 안에 숫자가 아예 없을땐 nil을 반환한다.


2.4.9.2. 속성[편집]

  • #(테이블) : 테이블 안에 들어있는 자료 개수
  • 테이블[n] : 테이블의 n번째 자료

2.4.10. utf8[편집]



2.5. 글로벌[편집]


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

2.5.1. 함수[편집]


  • error(튜플) = print와 비슷하지만 이것은 문자열을 error 형태로 내보낸다.
  • elapsedTime()
  • gcinfo()
  • pcall(함수) : 괄호안에 넣은 함수가 에러가 나도 아랫줄이 실행될수 있도록 하는 함수다.[19]
  • PluginManager()
  • print(문자열) = 문자열을 Console에 출력한다.[20]
  • require(모듈스크립트)
  • settings()
  • tick()
  • time()
  • typeof(개체)
  • UserSettings()
  • version()
  • warn(튜플)
  • wait(숫자) = (숫자)초만큼 기다린다. 수십 밀리초 정도 딜레이가 있다.[21]

2.5.2. 속성[편집]


  • Enum : true, false, nil을 재외한 모든 속성
  • game
  • plugin
  • shared
  • script
  • workspace
  • _G : 기본 모듈 스크립트다. 이 뒤에 다른 속성을 붙여 모듈스크립트처럼 쓸수 있다.
  • _VERSION : 로블록그 스튜디오 루아의 버젼

2.6. 이벤트[편집]




2.6.1. BasePart[22] 관련[편집]


  • BasePart 개체.Touched : CanTouch가 켜져있는 다른 BasePart 개체가 닿았을때 상호작용하는 이벤트. 닿는 두 BasePart중 어느 하나라도 CanTocuh가 꺼져있으면 호출되지 않는다. 쿨다운을 설정 안하면 한번에 여러번 호출되니 조심. 인자엔 닿은 개체가 들어온다.[23]
[ 스크립트 예시 펼치기 · 접기 ]
  • 닿으면 죽는 KillPart 스크립트
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 --닿은 플레이어의 체력
        wait(1) --1초 기다림
        Cooldown = false
    end
end)


  • BasePart 개체.TouchEnded : Touched의 반대로 CanTouch가 켜진 BasePart 개체가 더이상 닿지 않을 때 상호작용하는 이벤트. 마찬가지로 닿는 두 BasePart중 어느 하나라도 CanTouch가 켜져있지 않으면 호출되지 않는다. 이것도 쿨다운을 설정 안하면 한번에 여러번 호출되니 조심. 인자엔 더이상 닿지 않는 개체가 들어온다.
[ 스크립트 예시 펼치기 · 접기 ]
  • 더이상 닿지 않을 때 죽는 스크립트(Touched 예시 스크립트에서 이벤트만 바꾼 버전이다)
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 --닿은 플레이어의 체력
        wait(1) --1초 기다림
        Cooldown = false
    end
end)


2.6.2. Players 관련[편집]


  • Players 개체.PlayerAdded : 플레이어가 들어왔을때 호출되는 이벤트. 인트로나 로딩 화면에 이용된다. 인자엔 들어온 플레이어 개체가 들어온다.
    [ 스크립트 예시 펼치기 · 접기 ]
    • 플레이어가 게임을 들어왔을때 플레이어 ID를 출력하는 스크립트
    end)
    ">

  • Players 개체.PlayerRemoved : 플레이어가 나갔을때 호출된다. 인자엔 나간 플레이어 이름이 들어온다.
    [ 스크립트 예시 펼치기 · 접기 ]
    • 플레이어가 나갔을때 플레이어 ID를 출력하는 스크립트
    end)
    ">


2.6.3. ProximityPrompt 관련[편집]





2.6.4. Gui 관련[편집]





2.6.5. RemoteEvent[편집]




2.6.6. ClickDetector[편집]




2.6.7. 모든 개체 공통[편집]




[ 스크립트 예시 펼치기 · 접기 ]
  • 스크립트의 Parent가 바뀌면 출력에 프린트하는 스크립트
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. RemoteEvent[편집]




2.7.5. DataModel(game)[편집]



2.7.6. PVInstance[편집]



2.7.7. 서비스[편집]



2.7.7.1. Debris 서비스[편집]


2.7.7.2. MarketplaceService 서비스[편집]


2.7.7.3. TweenService 서비스[편집]

[ 예제 펼치기 · 접기 ]

">


2.7.7.4. BadgeService 서비스[편집]


2.7.7.5. workspace 서비스[편집]

서비스이긴 하지만 이건 코드 내에서 game:GetService("workspace")로 쓰지 않아도 쓸수 있는 서비스다.
파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2024-02-11 00:51:30에 나무위키 Roblox Studio/스크립트 문서에서 가져왔습니다.

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

관련 문서