기타/로블록스 & Lua

로블록스 개발 대충 감 잡기

푸쿠이 2021. 11. 4. 18:03

노페어님 영상이 이해 잘 됨!

https://www.youtube.com/c/%EB%85%B8%ED%8E%98%EC%96%B4

 

 

단축키

Ctrl + L 이동, 회전, 크기 등을 바꿀 때, 로컬 <-> 월드 좌표계
Ctrl + / 주석 단축키
Ctrl + Shift + F 모든 스크립트에서 찾기
그냥 클릭 모델 선택. (그룹 단위.)
Alt + 클릭 작은 단위로 파트 선택 가능.
Shft + 화면 이동 누르고 있는 동안, 에디터에서 돌아다니는 카메라 속도가 느려짐.
Ctrl + C 복사.
Ctrl + V Workspace의 자식으로 붙여넣기.
Ctrl + Shift + V 내가 선택한 오브젝트의 자식으로 붙여넣기. (이거 몰랐을 때, 진짜 불편했음.)

 

Lua

-- Lua는 인터프리터 언어.

-- 한 줄 주석

--[[
여러 줄 주석
]]
--[[
여러 줄 주석
--]]
	
-- 변수 타입 3가지
local myString = "Hi"
print(typeof(myString)) -- string
print(myString) -- Hi

local myNumber = 32
print(typeof(myNumber)) -- number
print(myNumber) -- 32

local myNumber2 = 32.67
print(typeof(myNumber2)) -- number
print(myNumber2) -- 32.67

local myBoolean = true
print(typeof(myBoolean)) -- boolean
print(myBoolean) -- true

-- 조건문
if myBoolean == true then
	print("Yes it is true")
else
	print("it is false")
end

if (myNumber >= 30 and myNumber <= 40) or (myNumber == 32) then
	print("Yes")
end

if player then 
	-- player ~= nil 과 같음.
end

-- 함수
local function sayMyName(myName, age)
	print("My Name is "..myName)
	print("I am "..age.." years old")
end

sayMyName("Rak", 20) 
-- My Name is Rak
-- I am 20 years old

local function addNums(n1, n2)
	return n1.." + "..n2.." = "..(n1 + n2)
end

print(addNums(5, 6)) -- 5 + 6 = 11

-- +=, -=, /= 이런 게 안 된다. → 안되는 줄 알았는데, Roblox에서는 되더라. 쓰면 될 듯.

 

-- 자식 오브젝트 찾기.
game.Workspace:FindFirstChild("오브젝트 이름") -- 한 단계 밑 자식 오브젝트 중 이름으로 검사.
game.Workspace:FindFirstChild("오브젝트 이름", true) -- 모든 자식 오브젝트 중 이름으로 검사.
game.Workspace:FindFirstDescendant("오브젝트 이름") -- 위와 같지만, 현재는 지원 X.

game.Workspace:FindFirstChildOfClass("Part") -- 한 단계 밑 자식 오브젝트 중 클래스로 검사.
game.Workspace:FindFirstChildWhichIsA("BasePart") -- 위와 비슷하지만, 상위 클래스까지 검사.

-- 부모 오브젝트 찾기.
game.Workspace:FindFirstAncestor("오브젝트 이름") -- 모든 부모 오브젝트 중 이름으로 검사.
-- Ancestor에도 OfClass, WhichIsA가 있다. 그렇지만 사용할 일이 거의 없을 듯.
-- 문자열에서 숫자만 남김.
local function ExtractNumber(string)
	return tonumber(string.gsub(string, "%D", "")) -- 숫자가 아닌 문자를 %D 판별해서 ""로 변경. 결과적으로 숫자만 남음.
end

오브젝트를 참조하려면, Explorer에서 하나하나 찾아들어가면 된다.

local blueObject = game.Workspace.gameModel_Blue

오브젝트를 움직이려면,

-- 포지션 이동.
blueObject.Position = blueObject.Position + Vector3.new(0, 2, 0)

정의된 Players 같은 것들은 game.Players 또는 game.GetService('Players') 둘 다 사용 가능하다.

Players의 이름을 바꿨다면, game.GetService('Players')만 인식해서 받아올 수 있으므로 이 방법이 안전하고 좋다.

https://devforum.roblox.com/t/gameplayers-vs-gamegetserviceplayers/503144/6

local Players = game:GetService('Players')

또한 GetService는 Explorer에 나타나있지않은, UserInputService 같은 것들을 받아올 수 있다.

local UserInput = game:GetService('UserInputService')
local TweenService = game:GetService('TweenService')

Spawn은 문제가 많아서 Coroutine 쓰는 게 낫다.

https://devforum.roblox.com/t/coroutines-vs-spawn-which-one-should-i-use/368966/5


서버 스크립트에서는 파트들을 .으로 접근해도 되지만, (못 찾는다고 nil 오류나면 WaitForChild 쓰면 됨.)

local boardRightGUI = script.Parent.time_board_right.Board.SurfaceGui.Frame.TextLabel
local boardLeftGUI = script.Parent.time_board_left.Board.SurfaceGui.Frame.TextLabel

로컬 스크립트에서는 서버의 파트들이 로딩되는 동안 기다려야 하기에, WaitForChild를 쓰자!!

local SoundManager = require(game:GetService('ReplicatedStorage'):WaitForChild('SoundManager'))