본문 바로가기

분류 전체보기

(52)
외부 툴에서 제작한 3D 모델을 로블록스에 불러오기 오토데스크의 마야, 3D MAX, 그리고 Blender 에 만든 3D 모델을 로블록스에 불러오는 방법에 대해 살펴보자. 3D 모델 업로드 가장 쉬운 방법은 Asset Manager 창(View 탭 → Asset Manager)에서 Import 버튼을 통해 모델을 로블록스 서버에 업로드시키는 것이다. 이 때, 아래와 같은 창이 뜬다. Rescale if too large : 너무 크면 알아서 줄여주는 옵션 Reverse inward-pointing mesh normals : 3D 모델 툴에서 제작한 모델을 Export 할때 메쉬의 법선 벡터가 안쪽을 향하는 경우에 바깥쪽을 향하게 수정하는 옵션. 일부러 하는 경우가 아니라면, 일반적으로 메쉬의 법선 벡터는 바깥쪽을 향해야 한다. 그러므로 보통 체크를 해주자..
Blaster 제작 : 레이저빔 Detect(충돌 감지)(1/3) 이 포스팅은 이전 포스팅: Player Tools 사용하기와 내용이 이어진다. 이전 포스팅을 참고하길 바란다. 이전 포스팅은 Blaster를 로블록스 시스템의 Player Tools와 연동하여 장착하고 해제하는 방법에 대해서 알아보았다. 이번 포스팅에서는 실제 Blaster의 사용 : 레이저 빔을 쏘고, 상대가 맞았는지를 검증하는 방법과 실제 로블록스 시스템, 즉, 멀티 플레이어 게임인 로블록스에서 어떻게 다른 플레이어들과 소통하는지에 대한 내용까지 이어지는 꽤 긴 내용의 첫부분이다. 이 포스팅에서는 레이저 빔에 상대가 맞았는지를 확인하는 코드에 집중하자. 충돌 감지에 사용될 Raycasting 우선, Raycasting 은 번역을 할 만한 적당한 단어가 없으므로 그냥 레이캐스팅이라고 하겠다. 레이캐스팅..
Blaster 제작 : 레이저빔 렌더링(2/3) 레이저빔의 명중까지 완성했으니 이젠 레이저빔의 렌더링에 대해 살펴보자. 레이저의 포지션 정하기 블래스터는 뻘건 광선으로 렌더링하기로 한다. 나중에 다른 스크립트에서 재사용할 수 있게 모듈스크립트(ModuleScript)로 작성한다. StarterPlayer 아래 StarterPlayerScrips 아래에 LaserRenderer라는 이름의 모듈스크립트를 추가한다. 모듈 테이블의 이름도 LaserRenderer로 바꾼다. 그리고 필요한 변수/상수와 함수를 추가한다. local LaserRenderer = {} -- 레이져가 보여지는 시간 local SHOT_DURATION = 0.15 -- 모듈의 함수는 모듈명.함수명으로 정의한다. -- 시작 위치에서 끝 위치까지 레이져를 렌더링하는 함수 createLas..
Blaster 제작 : 서버/클라이언트 이벤트 처리(3/3) 상대 플레이어에게 데미지 주기 서버-클라이언트 모델인 로블록스에서 플레이어끼리 데미지를 주기 위해서는 서버의 개입이 필요하다. 즉 블래스터를 발사한 플레이어는 명중되었음을 서버에게 알리고 서버는 명중된 플레이어에게 데미지를 줘야한다. 클라이언트와 서버와의 통신을 위해서 로블록스에서는 RemoteEvent를 사용할 수 있다. 로블록스에서 제공되고 있는 ReplicatedStorage 서비스를 사용하면 서버와 클라이언트 모두에서 접근이 된다. 따라서 ReplicatedStorage 서비스 밑에 RemoteEvent를 만들고 사용한다. ReplicatedStorage 밑에 폴더를 만들고 Events라고 네이밍한다. DamageCharacter 라는 이름으로 RemoteEvent를 만들어서 추가한다. 로컬스크립..
플레이어의 키입력 처리하기 플레이어의 키입력을 원하는 작업에 연결하면 어떨까? 플레이어가 키를 누를 때마다 직관적이고 게임 기능을 훨씬 빠르게 제어할 수 있게 되어서 몰입감을 높이는데 도움을 줄 것이다. 이 포스팅에서는 총(Tool)의 장전(reload)을 특정 키에 바인딩하여 제어 할 수 있는 방법을 알아보겠다. 시작하기 이전 포스팅와 내용이 이어지므로 설정과 소스 코드등을 참고하기 바란다. 2021.05.04 - [로블록스 개발 중급] - Player Tools 사용하기 액션 핸들러(Action Handler) 생성 먼저 플레이어의 키입력을 감지하는 함수가 필요하다. Blaster모델에 ToolController라는 이름으로 로컬스크립트를 추가하자. ToolController에 키 바인딩(키와 함수를 연결)하는 코드를 추가한다..
(로블록스)폭발 이펙트 만들기 폭발은 explosion(로블록스 내 이미 정의된 클래스)의 Explosion.BlastRadius안에 있는 BasePart들에 힘을 가하게 된다. 즉, Explosion.BlastRadius 반경에 있는 (보통 경우)캐릭터들에 포스를 가해서 관절을 끊어 버리고 캐릭터는 죽여 버리게 된다. ForceField에 의해서 보호되고 있는 캐릭터는 물론 살 수 있다. 게임이 실행되는 동안 폭발 이펙트를 발생시키면 곧 자체적으로 Destory되므로 Debris 서비스를 사용하여 리소스를 지울 필요가 없다. 폭발 이펙트(Explosion effects) 휴머노이드는 캐릭터 모델의 목 관절이 부러지면서 폭발로 사망합니다. 포스필드에 의해 보호되는 모든 파트는 폭발로부터 보호되는데 이 말은 파트의 관절이 부러지지 않아..
(로블록스) 어떤 게임은 성공하고 어떤 게임은 실패하는가? https://medium.com/roblox-developer/why-some-games-work-and-others-dont-9cc17b7ab499 누구나 실패를 겪을 수 있는 것이 사실이고 또 지극히 정상이다. 실패는 나 또는 다른 누구보다 훌륭한 교사이며, 게다가 실패는 성공의 어머니라는 말이 있지 않은가. 긴 개발 여정 끝에 두 개의 게임을 성공적으로 첫 페이지에 배포하고 수많은 프로젝트에 참여했다. 이 모든 것은 계속해서 기술을 연마하고 실패로부터 교훈을 얻었기 때문이다. 실패는 나에게 게임 개발에 대한 확실한 이해를 제공했다. 이 포스팅에서 게임 디자인과 관련하여 교훈을 얻었던 몇 가지 사항들을 공유하겠다. 게임 디자인이란? 게임 디자인은 마치 케이크를 만드는 과정과 비슷하다. 프로그래밍, ..
CFrame 이해하기 Coordinate Frame의 줄임말인 CFrame은 파트나 모델의 위치와 방향을 알려주는 데이타형이다. 위치(Position)는 x축, y축, z축의 넘버, 그리고 방향(rotation)은 x축, y축, z축, 각축의 회전값을 포함한다. 게임내에서 CFrame 데이터형은 단순히 위치와 방향의 데이터값만 제공하는 것이 아니라 여러 유용한 프로퍼티와 함수를 제공한다. 2D게임이라면 위치가 X축, Y축, 그리고 방향이 Z축으로 하나라서 단순하지만, 로블록스에서는 3D가 기본이라 로블록스에서 게임을 만든다면 아마 반드시 이해하고 넘어가야 하는 내용이 아닐까? 라고 생각한다. CFrame의 기본 CFrame으로 위치 지정 CFrame의 new()함수를 사용하면 생성되는 파트나 모델의 위치를 직접 지정할 수 있..
로블록스 중급 목차 로블록스 정식 중급 튜토리얼 모음입니다. 이 튜토리얼도 단순 번역판은 아니고... 아마 주절주절 많은 해설이 들어갈 것으로 예상합니다. 만약에 틀린 부분이 있다면 지적해주세요~. 로블록스의 중급 튜토리얼은 아직 전체가 공개되지 않았습니다. 하나씩 공개될 것으로 보이는데, 공개가 되면 그때그때 추가하도록 하겠습니다. 중급 튜토리얼부터는 여러가지 카테고리가 있으므로 각 카테고리 별도로 목차를 만들었습니다. 목차 중급 스크립트 여러 오브젝트에 사용되는 스크립트 관리 이펙트 로블록스 파티클 시스템의 기본 로블록스 파티클 이펙트 활용 로블록스 빔 오브젝트로 레이저 효과 폭발 이펙트 만들기 게임 데이터 세이브 / 로드 인터페이스 스코어 바 만들기 버튼 만들기 가까이 가면 나오는 GUI 파트에 붙어 있는 GUI 물리..
게임에서 직접 만든 커스텀 애니메이션 사용하기 이번 포스팅에서는 이전 포스팅(로블록스 애니메이션 에디터 사용하기)에서 직접 만든 애니메이션을 실제 본인의 게임에 적용시켜 보자. 디폴트 애니메이션을 커스텀 애니메이션으로 바꾸기 로블록스에서 기본으로 제공하는 캐릭터의 애니메이션을 바꿔보자. 애니메이션을 바꾸기 위해서는 교체하고 싶은 애니메이션의 ID가 필요하다. 애니메이션의 ID는 알아서 구하자. 직접 올린 것이든 아니든, ID는 로블록스 서버에서 원하는 애니메이션에 들어가보면 쉽게 구할 수 있다. 교체 자체는 Script에서 진행한다. ServerScriptService에 Script를 추가해서 아래의 내용을 넣자. local Players = game:GetService("Players") -- 캐릭터의 휴머노이드의 애니메이션 트랙을 교체한다. lo..