StarterPlayer 에서 스크립트 생성해서 BaseContext 를 Client 로 설정

 

local player = game:GetService("Players").LocalPlayer
local controls = require(player.PlayerScripts.PlayerModule):GetControls()
controls:Disable()

 

'개발 > Roblox Studio Lua' 카테고리의 다른 글

로블록스 스튜디오 기본 디렉토리  (1) 2025.01.15

로블록스 스튜디오를 시작하면 처음 기본 디렉토리를 확인할수 있습니다.

 

 

  • Workspace
  • Players
  • Lighting
  • MaterialService
  • ReplicatedFirst
  • ReplicatedStorage
  • ServerScriptService
  • ServerStorage
  • StarterGui
  • StarterPack
  • StarterPlayer
  • Teams
  • SoundService
  • TextChatService

 

 

* Workspace

Workspace는 게임 내에서 모든 물리적 객체가 존재하는 핵심 컨테이너입니다. 모든 3D 모델, 파트, 스크립트가 기본적으로 Workspace에 배치되며, 이는 게임 화면에 렌더링되도록 설계된 곳입니다. Workspace는 게임의 실제 장면을 구성하고, 사용자와 상호작용하는 모든 요소를 포함하는 환경을 정의합니다. 여기에는 게임의 지형, 건축물, 캐릭터, 아이템 등이 포함됩니다. 또한, 스크립트를 사용하여 Workspace 내 객체의 동작을 제어하거나 변경할 수 있습니다. 이를 통해 개발자는 사실적인 게임 세계를 만들고 다양한 상호작용을 구현할 수 있습니다.

 

더보기

orkspace는 3D 세계에 존재하는 객체들을 담는 핵심 역할을 하는 서비스입니다. 여기에는 BaseParts와 Attachments가 포함됩니다. 이러한 객체들이 Workspace의 하위 객체로 존재할 때, 이들은 활성화됩니다. BaseParts의 경우, 이는 그래픽으로 렌더링되며 다른 파트 및 세계와 물리적으로 상호작용함을 의미합니다. Attachments의 경우, ParticleEmitters, Beams, BillboardGuis와 같은 장식된 객체들이 렌더링됩니다.

이러한 동작을 이해하는 것은 중요합니다. 왜냐하면 필요하지 않은 객체들은 Workspace에서 제거될 수 있기 때문입니다. 예를 들어, 다른 맵이 플레이될 때는 그 맵의 모델들을 Workspace에서 제거할 수 있습니다. 즉시 필요하지 않은 3D 세계의 객체들은 일반적으로 ReplicatedStorage나 ServerStorage에 저장됩니다.

활성 3D 객체를 관리하는 역할에서 Workspace는 부품, 위치 및 부품 간의 조인트와 관련된 여러 유용한 기능을 포함하고 있습니다.

 

워크스페이스가 활성화된 3D 객체를 보유하는 역할을 하므로, 파트, 위치, 파트 간의 조인트와 관련된 여러 유용한 기능을 포함합니다.


Workspace 에 접근하는 방법

 

워크스페이스는 여러 가지 방법으로 접근할 수 있으며, 모두 유효합니다.

 

workspace
game.Workspace
game:GetService("Workspace")

 

 

주의 사항

  • ParticleEmitters와 BillboardGuis와 같이 장식이 필요한 객체는 adorne가 설정되지 않은 채로 워크스페이스에 부모가 되면 0, 0, 0 위치에 있게 됩니다.
  • Model 클래스에서 상속받은 `Model:MakeJoints()` 및 `Model:BreakJoints()` 메소드는 워크스페이스에서 `Workspace:MakeJoints()` 및 `Workspace:BreakJoints()`로 재정의되며, 이는 플러그인에서만 사용 가능합니다.
  • 워크스페이스는 삭제할 수 없습니다.
  • 워크스페이스는 FallenPartsDestroyHeight 아래로 떨어지는 BaseParts를 자동으로 정리합니다.
  • 클라이언트의 현재 Camera 객체는 `Workspace.CurrentCamera` 속성을 통해 접근할 수 있습니다.
  • Terrain 객체는 `Workspace.Terrain` 속성을 통해 접근할 수 있습니다.

 

 

* Players

플레이어 서비스는 현재 Roblox 서버에 연결된 클라이언트의 플레이어 객체를 포함합니다. 또한 장소의 구성에 대한 정보를 포함하고 있습니다. 이 서비스는 캐릭터 외관, 친구, 아바타 썸네일과 같은 서버에 연결되지 않은 플레이어에 대한 정보를 가져올 수 있습니다.

 

Players 에 접근하는 방법

local Players = game:GetService("Players")

 

 

 

* Lighting

조명 서비스는 경험 내의 전반적인 조명을 제어합니다. 조명이 다른 객체와 상호 작용하는 방식과 나타나는 방식을 변경할 수 있는 다양한 조정 가능한 속성을 포함하고 있으며, 이는 조명 속성 요약에 자세히 설명되어 있습니다.

조명에는 입자 밀도, 안개, 눈부심, 색상을 포함한 현실적인 대기 효과를 렌더링하기 위해 Atmosphere 객체가 포함될 수도 있습니다. 자세한 내용은 대기 효과를 참조하십시오.

또한, 조명은 Workspace.CurrentCamera와 함께 SunRaysEffect 및 BlurEffect와 같은 후처리 효과를 포함할 수 있습니다.

 

 

* MaterialService

MaterialService는 Material을 관리하는 게임 서비스로, 전역 MaterialVariant 인스턴스를 포함하고 있습니다. MaterialVariant는 MaterialService의 자식이거나 후손일 수 있습니다. 각 기본 Material 유형에 대해, MaterialService는 내부적으로 MaterialVariant 참조 세트를 유지합니다. MaterialVariant.Name은 이를 액세스하기 위한 키입니다. MaterialVariant.Name과 MaterialVariant.BaseMaterial은 결합되어 식별자로 사용됩니다. MaterialService 내에서 동일한 이름과 BaseMaterial을 가진 여러 MaterialVariant 객체가 있는 경우, 오직 하나만 사용할 수 있습니다.

 

MaterialService는 몇 가지 (Material)Name 속성을 가지고 있습니다. MaterialVariant Name을 할당하면 내장 자재가 지정된 MaterialVariant로 대체됩니다. 만약 MaterialService가 일치하는 MaterialVariant를 찾을 수 없으면, 기본 내장 자재로 되돌아갑니다. BaseMaterial도 일치해야 하며, 예를 들어 BaseMaterial이 Grass인 MaterialVariant는 MaterialService.GrassName에만 할당될 수 있고, AsphaltName이나 다른 이름에는 할당될 수 없습니다. 이러한 속성은 스크립트로 사용할 수 없지만, MaterialService:GetBaseMaterialOverride() 및 MaterialService:SetBaseMaterialOverride() 함수를 사용하여 읽고 쓸 수 있습니다.

 

MaterialService는 MaterialService.Use2022Materials 속성을 가지고 있으며, 이는 2022년에 도입된 새로운 자재와 레거시 자재 간의 전환을 담당합니다. 레거시와 사용자 생성(새로운) 지형 자재는 서로 다른 인코딩을 사용하므로, 레거시 지형 자재와 MaterialVariant를 동시에 사용하는 것은 성능에 불이익을 줍니다. 게임이 2022년 이전 지형 자재를 사용하는 경우, 내장 자재를 무조건 대체하지 않는 것이 좋습니다. 가능하면 2022년 자재로 마이그레이션 하세요.

 

 

* ReplicatedFirst

ReplicatedFirst는 로블록스 스튜디오에서 중요한 서비스 중 하나로, 로블록스 게임의 클라이언트와 서버 간에 스크립트와 객체를 공유하는데 사용됩니다. 주로 다음과 같은 용도로 사용됩니다:

 

  • 초기 로딩 화면 : `ReplicatedFirst`에 넣은 로컬 스크립트는 클라이언트가 게임에 들어올 때 가장 먼저 실행됩니다. 이를 통해 사용자가 게임을 완전히 로드하기 전에 초기 로딩 화면이나 로고 등을 표시할 수 있습니다.
  • 빠른 리플리케이션 : 이름 그대로 `ReplicatedFirst`에 있는 콘텐츠는 클라이언트에 가장 먼저 복제(replication)됩니다. 이는 플레이어가 게임에 접속할 때 서버와 클라이언트 간의 통신 지연을 최소화하기 위해 사용됩니다.
  • 필수 리소스 로드: 게임 로드 시 초기화가 필요한 필수 리소스나 설정, 그리고 클라이언트 측에서 반드시 필요로 하는 콘텐츠를 이곳에 저장할 수 있습니다.
  • 보안 및 프라이버시: `ReplicatedFirst`에 대한 액세스는 클라이언트와 서버 간에 공유되므로, 서버에서 실행되어야 하는 민감한 코드나 데이터는 여기에 두지 않는 것이 좋습니다.

 

이렇게 `ReplicatedFirst`는 사용자에게 보다 매끄러운 게임 시작 경험을 제공하고, 필수 콘텐츠를 빠르게 로드하기 위해 주로 활용됩니다.

 

 

 

* ReplicatedStorage

클라이언트와 서버 간에 데이터 및 객체를 공유하기 위한 저장소입니다. 이 서비스의 주요 용도는 다음과 같습니다:

 

  • 데이터 및 자산 공유: 게임 내에서 모든 클라이언트와 서버가 동일하게 접근해야 하는 모델, 스크립트, 가치(Values) 등을 저장할 수 있습니다. 이를 통해 클라이언트와 서버가 공통의 데이터 및 객체에 접근할 수 있습니다.
  • 효율성 및 성능 개선: 클라이언트마다 개별적으로 스크립트나 데이터를 전송할 필요 없이 ReplicatedStorage에 저장하면 자동으로 모든 클라이언트로 복제됩니다. 이는 네트워크 트래픽을 줄이고 로딩 시간을 개선합니다.
  • 보안: 서버 전용으로 남아야 하는 내용(예: 민감한 게임 데이터)을 위해 ServerStorage를 사용하지만, 클라이언트가 알아야 하는 부분(모든 클라이언트가 동일하게 접근해도 문제가 없는 정보)은 ReplicatedStorage를 통해 공유할 수 있습니다. ReplicatedStorage에 저장된 객체는 클라이언트가 접근 가능하지만, 데이터에 직접적인 영향을 미칠 수는 없습니다.
  • 모듈 관리: 여러 곳에서 사용되는 모듈 스크립트를 ReplicatedStorage에 저장하면, 동일한 코드를 여러 위치에서 재사용할 수 있습니다. 이는 코드의 유지 보수성을 높입니다.

 

ReplicatedStorage는 주로 이렇게 게임의 구조와 성능을 최적화하고 보안을 유지하면서 클라이언트와 서버 간의 원활한 데이터 공유를 돕기 위해 활용됩니다.

 

더보기

ReplicatedStorage는 서버와 연결된 클라이언트 모두에게 사용할 수 있는 객체들을 위한 일반적인 컨테이너 서비스입니다. 주로 ModuleScript, RemoteFunction, RemoteEvent 등 서버 스크립트와 클라이언트 로컬 스크립트 모두에서 유용하게 사용할 수 있는 객체들에 이상적입니다.

 

이 서비스에 속하는 객체들은 클라이언트로 완전하게 복제되며, 일반적인 복제 규칙이 적용됩니다. 클라이언트에서 변경한 내용은 그대로 유지되지만 서버로 복제되지 않으며, 서버에서 동일한 부분을 변경할 경우 클라이언트의 변경 내용이 덮어씌워질 수 있습니다.

LocalScripts는 이 서비스 아래에 위치해 있더라도 실행되지 않습니다. 이는 LocalScripts가 StarterPlayerScripts, StarterCharacterScripts, StarterGui와 같은 다른 위치에서 실행되기 때문입니다.

마찬가지로, Scripts는 기본적으로 Legacy 설정이 아닌 경우 이 서비스에 속해 있더라도 실행되지 않습니다. 서버 스크립트를 독립적으로 실행하도록 하려면 ServerScriptService에 위치시켜야 합니다.

ReplicatedStorage 안에 있는 ModuleScript가 다른 어떤 스크립트에 의해 요구된다면, 일반적으로 실행됩니다. 이러한 모듈들은 주로 서버와 클라이언트가 공유하는 코드를 포함하고 있습니다.

 

 

 

* ServerScriptService

서버에서만 실행되는 스크립트를 안전하게 저장하기 위한 용도로 사용되는 서비스입니다. 이곳에 담긴 스크립트는 클라이언트가 직접 접근하거나 수정할 수 없으며, 이를 통해 게임 내 보안과 안정성을 강화할 수 있습니다. 주로 게임 로직, 데이터 관리, 서버 간 통신 및 기타 서버 전용 기능을 구현할 때 사용됩니다.

 

`ServerScriptService`를 사용하는 주요 이유는 다음과 같습니다:

 

  • 보안 강화: 클라이언트에서는 접근이 불가능하기 때문에 중요한 로직이나 데이터 처리를 이곳에서 수행하여 해킹이나 불법 조작을 방지할 수 있습니다.
  • 데이터 관리: 서버 스크립트를 이용해 데이터 저장소와 통신하거나, 플레이어의 데이터를 중앙에서 관리할 수 있습니다.
  • 서버 로직 구현: 게임의 핵심 로직, 규칙, 서버 이벤트 처리를 위한 스크립트를 작성합니다.
  • 분리된 환경: 클라이언트와 서버의 코드 베이스를 명확히 분리하여 관리함으로써 코드의 복잡성을 줄이고 유지보수를 용이하게 합니다.

 

이와 같이 `ServerScriptService`는 게임의 안정성과 보안을 높이는 중요한 역할을 합니다.

더보기

ServerScriptService는 서버에서만 사용해야 하는 Script, ModuleScript 및 기타 스크립트 관련 자산을 위한 컨테이너 서비스입니다. 이 서비스의 내용은 플레이어 클라이언트에 전혀 복제되지 않으므로 중요한 게임 로직을 안전하게 저장할 수 있습니다. 이 서비스 내에 있고 Disabled되지 않은 Script 객체는 실행됩니다.

이 서비스에는 LoadStringEnabled라는 하나의 속성만 있으며, 이는 Lua의 loadstring 함수가 활성화되어 있는지를 결정합니다. 이 기능을 잘못 사용하면 원격 코드 실행 취약점이 발생할 수 있으므로, 일반적으로 이 기능을 비활성화된 상태로 유지하는 것이 권장됩니다.

ServerScriptService 내에서 실행되는 스크립트는 복제할 수 있는 사전 제작된 모델과 같은 기타 스크립트 관련 자산에 대한 접근이 필요할 수 있습니다. 이러한 자산은 ServerStorage에 보관해야 합니다. ServerStorage는 이 서비스와 유사하게 작동하나, Script 객체는 Disabled되지 않았더라도 실행되지 않습니다. 서버와 클라이언트 모두에 유용한 자산 및 ModuleScript는 ReplicatedStorage에 보관해야 합니다. 마지막으로, 이 서비스 내에서 폴더를 사용하여 개체를 더 잘 조직할 수 있으며, 이는 이 서비스의 동작에 영향을 미치지 않습니다.


* ServerStorage

서버에서만 접근할 수 있는 컨테이너입니다. 예를 들어, 큰 오브젝트(맵 등)를 ServerStorage에 저장하면, 게임에 접속할 때 이 오브젝트를 클라이언트에 전송할 필요가 없어 네트워크 트래픽을 줄일 수 있습니다.

- 스크립트는 ServerStorage에 있을 때 실행되지 않습니다. 그러나 그 안에 있는 ModuleScript는 액세스할 수 있으며 실행 가능합니다.

- 서버가 실행할 스크립트는 ServerScriptService를 사용하는 것이 권장됩니다.

 

  • - **중단 예정 기능**: 더 이상 사용할 수 없는 기능이나 지원이 중단될 예정인 기능을 의미합니다.
  • - **생성 불가**: ServerStorage는 직접 생성할 수 없습니다. 서버에서 제공하는 서비스입니다.
  • - **서비스**: ServerStorage는 서비스로 분류되어 있으며, DataModel.GetService 메서드를 사용해야만 접근 가능합니다.
  • - **복제 안 됨**: ServerStorage의 내용은 클라이언트에 복제되지 않으며, 로컬 스크립트(LocalScripts)에서 접근이 불가능합니다.

 

더보기

게임 내에서 서버 전용 저장소로 사용되는 서비스입니다. `ServerStorage`의 주요 용도는 다음과 같습니다.

 

  •  **보안**: 클라이언트에서는 `ServerStorage`에 접근할 수 없습니다. 따라서 플레이어가 접근해서는 안 되는 데이터나 객체를 여기에 보관할 수 있습니다. 이는 스크립트, 모델, 백업 데이터 등을 보호하는 데 유용합니다.
  • **데이터 관리**: 게임이 실행되는 동안 서버에서만 필요한 데이터나 객체를 저장할 수 있습니다. 예를 들어, 다양한 게임 맵, 아이템, 또는 NPC(비-플레이어 캐릭터) 등을 저장해 둘 수 있습니다.
  • **재사용 가능한 객체**: 여러 번 사용할 객체를 보관해 두었다가 필요할 때 서버 스크립트를 통해 클론하여 사용할 수 있습니다. 이를 통해 메모리를 효율적으로 관리할 수 있습니다.
  • **서버 측 로직**: 서버에서만 실행되어야 하는 스크립트나 로직을 보관하는 데 사용할 수 있습니다.

`ServerStorage`에 있는 객체는 클라이언트에 로드되지 않으므로, 네트워크 트래픽을 최적화하고 보안을 유지하는 데에도 도움이 됩니다. 이러한 이유로, 보안이 중요한 게임 요소나 대규모 데이터를 다룰 때 자주 사용됩니다.


* StarterGui

게임의 사용자 인터페이스(UI)를 관리하기 위한 서비스입니다. `StarterGui`에 저장된 요소들은 플레이어가 게임에 참여할 때 자동으로 그들의 `PlayerGui`로 복사됩니다. 이를 통해 개발자는 각 플레이어에게 동일한 인터페이스를 제공할 수 있게 됩니다. `StarterGui`를 사용하여 게임에서 HUD(헤드업 디스플레이), 버튼, 텍스트 라벨, 프레임, 스크린 GUI 등 다양한 UI 요소를 추가하거나 관리할 수 있습니다.

개발자는 스크립트를 사용하여 UI 요소의 특성을 조정하고, 특정 이벤트에 반응하도록 프로그래밍 할 수 있습니다. 또한 `StarterGui`는 게임 플레이 중 동적으로 UI를 업데이트하거나 변경할 수 있는 기능도 제공합니다. 이러한 기능들은 게임의 몰입감을 높이고, 플레이어에게 중요한 정보를 전달하는 데 중요한 역할을 합니다.

 

더보기

StarterGui는 ScreenGui와 같은 LayerCollector 객체를 포함하도록 설계된 컨테이너 객체입니다. 플레이어의 캐릭터가 생성될 때, 그들의 PlayerGui에 있는 내용물(만약 있다면)은 비워집니다. 그리고 StarterGui의 자식 객체들은 그들의 하위 항목들과 함께 PlayerGui에 복사됩니다. 그러나 ResetOnSpawn 속성이 false로 설정된 ScreenGui와 같은 LayerCollector 객체는 각 플레이어의 PlayerGui에 한 번만 배치되며, 플레이어가 다시 스폰되더라도 삭제되지 않습니다.

StarterGui는 CoreGui와 상호작용할 수 있는 다양한 함수도 포함하고 있습니다. 예를 들어, StarterGui:SetCoreGuiEnabled()는 CoreGui의 요소를 비활성화하는 데 사용할 수 있으며, StarterGui:SetCore()는 알림 생성 및 시스템 메시지 표시 등 다양한 기능을 수행할 수 있습니다.

쉽게 말해, StarterGui는 플레이어의 화면 인터페이스 요소들을 관리하고, 필요한 경우 특정 UI 요소들을 유지하거나 다른 기능들을 수행할 수 있도록 도와주는 시스템입니다.

 


* StarterPack

 

로블록스 스튜디오에서 StarterPack은 플레이어가 게임에 참가할 때 자동으로 제공되는 아이템들의 그룹을 정의하는 데 사용됩니다. 이 폴더 안에 배치된 도구나 아이템들은 게임을 시작하자마자 플레이어의 인벤토리에 자동으로 추가됩니다. StarterPack을 활용하여 기본 장비나 무기, 도구 등을 제공함으로써 게임의 초기 경험을 설계할 수 있습니다. 이렇게 초기 아이템을 설정하면 게임의 진행 방식이나 플레이어의

전략에 영향을 줄 수 있습니다.

 

더보기

서비스 수준 컨테이너로, 플레이어가 스폰될 때 그 내용물이 각 플레이어의 배낭(Backpack)으로 복사됩니다. 주로 도구(Tools)를 저장하는 데 사용되지만, 각 플레이어에게 복사본을 제공하기 위해 LocalScript를 저장하는 데도 사용되기도 합니다.

플레이어 캐릭터가 스폰되면 StarterPack의 내용물과 StarterGear의 내용물이 그들의 배낭에 복사됩니다. 캐릭터가 죽으면 배낭이 제거되고 새로운 배낭이 생성되어, StarterPack과 StarterGear의 내용물로 다시 채워집니다. StarterPack은 모든 플레이어가 스폰될 때 가질 기본 도구 세트를 결정하는 데 사용됩니다. 특정 플레이어에게 특정 도구를 제공하려면 도구를 직접 그 플레이어의 배낭에 추가해야 합니다.

참고: 일반적으로 StarterPack의 내용물은 미리 정의되어 있지만, 도구를 추가하거나 제거하여 게임 중에 변경할 수 있습니다. 이러한 업데이트는 플레이어가 다시 스폰되고 배낭이 다시 로드될 때 반영됩니다. StarterPack에 대한 변경은 서버에서 수행되어야 합니다.

 


* StarterPlayer

 

플레이어 캐릭터의 속성과 동작을 설정하는 데 사용되는 중요한 서비스입니다. 이는 게임 내 캐릭터의 기본 설정을 제어하게 해주며, 아래와 같은 다양한 기능을 지원합니다:

 

  • 캐릭터 모델 설정: StarterPlayer를 통해 기본적으로 사용할 플레이어의 캐릭터 모델을 지정할 수 있습니다. 이를 통해 사용자 정의된 아바타나 특정한 모양의 캐릭터를 게임에서 사용할 수 있습니다.
  • 플레이어 속성 조정: 이동 속도, 점프 높이 등 캐릭터 이동에 관한 다양한 물리적 속성을 설정할 수 있습니다. 이를 통해 게임의 난이도나 특정 플레이 스타일에 맞게 캐릭터의 성능을 조정할 수 있습니다.
  • 스크립트 적용: LocalScript나 ModuleScript를 사용하여 플레이어마다 고유한 기능을 추가하거나 사용자 인터페이스(UI)를 제어할 수 있습니다. 예를 들어, UI HUD나 인벤토리 시스템을 플레이어가 접속할 때 자동으로 설정되도록 할 수 있습니다.
  • 바인딩된 도구 및 장비 설정: 플레이어가 게임에 처음 들어왔을 때 자동으로 장착할 장비나 도구를 미리 지정할 수 있습니다.

StarterPlayer를 잘 활용하면 더욱 커스터마이즈된 게임플레이 경험을 제공할 수 있으며, 플레이어마다 균일한 게임 환경을 마련하는 데 큰 도움이 됩니다.

 

더보기

이 서비스는 Player 객체의 기본 값을 설정할 수 있도록 도와줍니다. 플레이어가 서버에 접속할 때, Player 객체의 각 속성은 현재 StarterPlayer의 해당 속성 값으로 설정됩니다. 이 서비스에 추가할 수 있는 네 가지 객체는 다음과 같습니다:

  • StarterPlayerScripts 인스턴스: 각 플레이어에 대해 한 번씩 실행되는 스크립트를 가지고 있는 인스턴스입니다.
  • StarterCharacterScripts 인스턴스: 각 플레이어의 캐릭터가 생성될 때마다 추가할 스크립트를 가지고 있는 인스턴스입니다.
  • StarterHumanoid라는 이름의 Humanoid 인스턴스: 각 플레이어의 캐릭터에 기본값으로 사용될 Humanoid 인스턴스입니다.
  • StarterCharacter라는 이름의 Model 인스턴스: 모든 플레이어의 캐릭터 모델로 사용될 모델 인스턴스입니다.

이러한 설정은 게임 개발에서 플레이어의 기본 설정을 관리하고, 플레이어가 서버에 접속할 때 일관된 환경을 제공하는 데 중요합니다.

 


* Teams

게임 개발 시 플레이어 캐릭터를 서로 다른 팀으로 나누기 위해 사용됩니다. 이를 통해 개발자는 팀 기반 게임플레이 요소를 추가할 수 있으며, 팀별로 다른 목적이나 규칙을 부여할 수 있습니다. 예를 들어, 팀 간의 경쟁이 필요한 게임에서 팀을 나눠 플레이어 간의 협력을 유도하거나, 서로 다른 역할을 부여하여 더 풍부한 게임플레이를 만들 수 있습니다.

Teams의 주요 용도는 다음과 같습니다:

  • 팀 분류 및 관리: 플레이어를 여러 팀으로 나누어 각 팀이 서로 다른 목표를 가지도록 설정할 수 있습니다.
  • 팀 기반 액션 및 규칙: 다양한 게임 내 규칙이나 액션을 특정 팀에게만 적용할 수 있습니다. 예를 들어, 특정 팀만 특별한 도구를 사용할 수 있도록 하거나, 팀별로 다른 스폰 위치를 설정할 수 있습니다.
  • 게임플레이 다양성 제공: 팀을 활용하여 협동, 경쟁 등의 요소를 도입하여 게임플레이의 다양성을 높일 수 있습니다.
  • 비주얼 및 정체성 제공: 각 팀에 고유의 색상이나 이름을 지정하여 게임 내에서 팀의 정체성을 부각시킬 수 있습니다.
  • 이러한 기능을 통해 로블록스 스튜디오 사용자는 보다 복잡하고 다채로운 팀 기반 게임을 설계할 수 있습니다.
더보기

Teams 서비스는 게임의 Team 객체를 포함하고 있습니다. Team 객체는 반드시 Teams 서비스에 부모로 설정되어야 합니다. Teams는 개발자들에게 유용한 다양한 기능을 제공합니다. 이러한 기능들은 기본적으로 작동하는 기능과 개발자가 직접 프로그래밍하여 게임에 포함시킬 수 있는 기능으로 나눌 수 있습니다.

### 기본 팀 동작

아래의 Teams 기능은 기본적으로 제공되며, 개발자가 따로 코드를 작성하지 않아도 됩니다.

- **팀에 속할 경우**, 플레이어의 캐릭터 모델 위에 표시되는 이름이 팀의 TeamColor에 따라 색상이 결정됩니다.

- **Player.TeamColor를 변경하면**, 해당 색상에 해당하는 Team.TeamColor를 가진 팀으로 Player.Team이 전환됩니다.

- **기본 플레이어 리스트를 사용할 경우**, 사용자들은 팀별로 그룹화되어 표시됩니다.

- **Player.Neutral을 true로 설정하면**, 플레이어는 팀과 분리됩니다. 그러나 Player.Team이나 Player.TeamColor는 변경되지 않습니다.

- **플레이어가 게임에 참가하면**, Team.AutoAssignable이 true로 설정된 팀 중에서 가장 적은 플레이어가 속한 팀에 자동으로 배정됩니다. 자동 배정 가능한 팀이 없을 경우, Player.Neutral이 true로 설정됩니다.

- **SpawnLocation.Neutral이 false로 설정된 경우**, Player.TeamColor가 SpawnLocation.TeamColor와 일치하는 플레이어만 해당 스폰 위치에서 출현할 수 있습니다.

- **SpawnLocation.AllowTeamChangeOnTouch가 true로 설정된 경우**, 캐릭터가 스폰 위치에 닿을 때 플레이어의 Player.TeamColor가 SpawnLocation.TeamColor로 변경됩니다.

### 선택적 확장 팀 기능

많은 개발자들은 아래의 기능들을 팀에 추가하여 자신만의 코드를 작성합니다.

- **무기 코드에서 팀 체크를 구현하여** 아군 사살을 방지합니다.

- **특정 팀만 사용할 수 있는 문이나 기능을 구현합니다.**

- **팀 균형을 유지하기 위해 주기적으로 팀을 재배정합니다.**

위 설명은 Roblox와 같은 플랫폼에서 팀 기반 기능을 구현할 때 유용할 수 있습니다. 줄거리와 함께 이러한 기능의 활용을 생각해보면 더욱 쉽게 이해할 수 있을 것입니다.

 

* SoundService

게임 내에서 소리와 관련된 전반적인 기능을 제어하고 관리하는 데 사용됩니다. `SoundService`는 주로 다음과 같은 용도로 사용됩니다:

  • 전역 사운드 관리: `SoundService`를 사용하면 게임 전체에 영향을 미치는 전역 사운드 속성을 설정할 수 있습니다. 예를 들어, 게임의 배경 음악이나 전역 음향 효과의 볼륨을 조절할 수 있습니다.
  • 음향 효과 추가: 특정 이벤트에 따라 재생되는 효과음을 추가할 수 있습니다. `SoundService`를 통해 특정 소리가 게임의 중요한 이벤트에 맞춰 적절하게 재생되도록 설정할 수 있습니다.
  • 3D 사운드 환경 설정: 소리가 공간에서 어떻게 들리는지를 조정할 수 있습니다. 거리 및 방향에 따라 소리가 어떻게 감쇠되고 들리는지 설정할 수 있습니다.
  • 환경 사운드 설정: 바람 소리, 물소리 등과 같은 환경 음향 효과를 통해 플레이어의 몰입감을 높일 수 있습니다.

 

`SoundService`는 이러한 여러 기능을 통해 게임의 오디오 경험을 풍부하게 하고, 개발자가 보다 쉽게 사운드를 관리하고 조작할 수 있도록 도와줍니다.

 

더보기

SoundService는 경험 내에서 소리가 재생되는 다양한 측면을 결정하는 서비스입니다. SoundService는 SoundGroups를 저장하는 데도 자주 사용되지만, 그룹이 작동하기 위해 반드시 필요하지는 않습니다.

SoundService의 속성 중 AmbientReverb, DistanceFactor, DopplerScale, RolloffScale 등을 사용하여 경험 내에서 모든 소리가 재생되는 방식을 변경할 수 있습니다. 또한 SetListener() 함수를 통해 소리를 듣는 위치를 설정할 수 있습니다.

이러한 기능들은 게임이나 애플리케이션에서 보다 사실적이고 몰입감 있는 음향 환경을 만드는 데 활용될 수 있습니다.


TextChatService

게임 내 채팅 시스템을 관리하고 사용자 정의하는 데 사용되는 서비스입니다. 이 서비스를 통해 게임 개발자는 플레이어 간의 커뮤니케이션을 향상시키고, 채팅 기능을 사용자 정의하며, 필요에 따라 특정 메시지를 필터링하거나 조정할 수 있습니다.

`TextChatService`의 주요 용도는 다음과 같습니다:

  • 채팅 인터페이스 사용자 정의: 기본 채팅 UI의 모양과 작동 방식을 변경할 수 있습니다. 이를 통해 게임의 테마나 스타일에 맞게 채팅 창을 커스터마이징할 수 있습니다.
  • 채팅 메시지 필터링 및 모더레이션: 개발자는 부적절한 콘텐츠를 필터링하고 사용자의 안전을 보장하기 위해 메시지를 검토하거나 차단할 수 있는 기능을 구현할 수 있습니다.
  • 특수 메시지 추가: 게임 이벤트 또는 공지 사항 등을 알리기 위해 채팅을 통해 특별한 메시지를 전송할 수 있습니다.
  • 채팅 행동 제어: 특정 상황에서 채팅 기능을 비활성화하거나 제한할 수 있습니다. 예를 들어, 특정 게임 모드에서 채팅을 금지하거나, 특정 사용자가 채팅할 수 없도록 할 수 있습니다.
  • 사용자 상호작용 증가: 채팅을 통해 플레이어들 간의 상호작용을 촉진할 수 있으며, 이는 게임 커뮤니티의 활성화에 기여할 수 있습니다.

이와 같은 기능들을 활용하여 개발자는 보다 안전하고, 풍부하며, 특별한 채팅 경험을 제공할 수 있습니다. `TextChatService`는 이러한 목적을 달성하기 위한 강력한 도구입니다.

 

'개발 > Roblox Studio Lua' 카테고리의 다른 글

[Roblox] 캐릭터 움직임 제한하기  (0) 2025.01.22

 

 

flutter build ipa

 

 

https://docs.flutter.dev/deployment/ios

 

Build and release an iOS app

How to release a Flutter app to the App Store.

docs.flutter.dev

 

 

 

flutter build apk

 

https://docs.flutter.dev/deployment/android

 

Build and release an Android app

How to prepare for and release an Android app to the Play store.

docs.flutter.dev

 

'개발' 카테고리의 다른 글

DUNS 넘버 무료로 발급하기  (0) 2023.12.12
화면 비율계산기  (0) 2022.11.18
C++ boost 컴파일  (0) 2022.05.27
XCode에서 Boost 사용시 오류  (0) 2022.05.05
Xcode 프로젝트에 boost 설정하기  (0) 2022.05.01
ALTER TABLE [사용할테이블명] ADD CONSTRAINT FOREIGN KEY([사용할테이블의키]) REFERENCES [대상이될테이블]([대상이될테이블의키]) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE hint_data ADD CONSTRAINT FOREIGN KEY(language_code_idx) REFERENCES language_code(idx) ON DELETE CASCADE On UPDATE CASCADE;

 

 

hint_data 테이블의 language_code_idx 의 키를 참조될 테이블 language_code 테이블의 idx 를 참조하도록 합니다.

 

Flutter는 싱글 스레드로 동작하고 있습니다. 하지만 작업할때 비동기로 처리해야 경우가 있습니다.

 

유니티에서는 coroutine 와 비슷한 방식으로 Flutter 에서는 Future 를 사용하여 비동기로 처리합니다.

 

 

Future를 이용하여 1초후에 실행하는 구조는 다음과 같습니다.

 

Future.delayed(
	const Duration(seconds: 1) // <<-- 1초 동안 기다려.
).then((value){// 위 명령문을 실행한후 실행해
	print( "run" ); // <<-- 실행
} );

 

 

 

언젠가부터 구글 콘솔에 접속하면, 다음과같은 알림이 뜨기 시작하였습니다.

원하는 계정 확인 기한을 지금 선택하세요

 

조직일 경우 DUNS 넘버를 필요로 하기 때문에 DUNS 넘버를 알아보다 생성하기로 하였습니다.

 

DUNS 넘버를 관리하는 사이트로 이동합니다.

 

https://www.dnb.com/

 

Dun & Bradstreet - Accelerate Growth and Improve Business Performance

Dun & Bradstreet helps companies improve their business performance through data and insights delivered through our Data Cloud and Live Business Identity

www.dnb.com

 

 

여기서 주의할점은 구글 개발로 선택하여 이동할경우 강제로 DUNS 를 국내에서 대행 관리하는

 

NICE (https://www.nicednb.com/sv/service01.do) 로 자동 이동하게 됩니다.

 

여기서하면 직접 한국어로 한다는 편리한 점이 있지만 45만원이라는 비용이 생깁니다.

 

저희는 작은 회사이기 때문에 부담되어 찾아보니 다행이 애플 개발자로 등록하면 무료로 생성이 가능하다는 사실을 알게되었습니다.

 

사이트로 이동하거나 아니면 아래로 이동합니다.

 

https://developer.apple.com/support/D-U-N-S/

 

D-U-N-S® Number - Support - Apple Developer

Feedback Assistant Submit feedback, report bugs, and request enhancements to APIs and developer tools. Send us feedback

developer.apple.com

 

 

look up your organization 을 클릭하여 'D-U-N-S 번호 조회' 페이지의 내용을 채워 주신후 다음을 눌러 계속 진행해주시면 됩니다.

 

모든 페이지를 완료한 이후 기다리시면 메일이 옵니다.

 

..

 

..

 

.. 만

 

그런데 저희는 5일동안 기다렸는데 메일이 오지 않았습니다.

 

그래서 다시 페이지 방문하여 email D&B 으로 이동하여 직접이메일 보내는게 아닌 내용을 채워 진행해주시면 무료로!

 

받으실수있습니다.

'개발' 카테고리의 다른 글

Flutter 에서 안드로이드, 아이폰 빌드하기  (0) 2024.09.29
화면 비율계산기  (0) 2022.11.18
C++ boost 컴파일  (0) 2022.05.27
XCode에서 Boost 사용시 오류  (0) 2022.05.05
Xcode 프로젝트에 boost 설정하기  (0) 2022.05.01

구글 콘솔에 로그인하여 앱으로 이동합니다.

 

Google Play Console | Google Play Console

앱과 게임이 성장할 수 있도록 사용자에게 도달하고 사용자 참여를 유도하는 데 도움이 될 도구, 프로그램, 통계를 이용하세요.

play.google.com

 

 

Play 게임즈>설정으로 이동합니다. 

 

처음 생성이기때문에 '아니요, 게임에서 Google API를 사용하지 않습니다' 선택하고 게임 이름을 입력한후 다음으로 이동합니다.

 

 

Play 게임즈 서비스 설정이 아직 완료가 되어있지 않기때문에 순서대로 진행하겠습니다.

 

 

속성 수정으로 이동하여 내용을 채워준후 저장하여 줍니다.

 

구글 클라우드로 이동하여 프로젝트를 생성하여 줍니다.

 

https://console.cloud.google.com/

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

 

사용자 인증정보로 이동하여 사용자 인증 정보 만들기를 클릭합니다.

 

OAuth 클라이언트 ID 를 클릭하여 동의를 요청합니다.

 

내용을 채워준후 SHA-1 인증서는 구글 콘솔>설정>앱서명에서 앱서명 인증키, 업로드 키를 이용하여 하나씩 만들어줍니다.

 

 

 

이후 구글 콘솔로 돌아와서 OAuth 클라이언트 만들기를 클릭하여 새로운 클라이언트를 생성하여줍니다.

 

 

사용자 인증 정보를 추가를 눌러줍니다.

 

 

유형은 Android, 이름은 현재 앱 이름을 입력하여줍니다.

 

인증으로 이동하여 새로고침하여 구글 클라이드 에서 생성한 OAuth 클라이언트를 선택 합니다.

 

생성이후 앱서명 인증키 업로드 인증키를 이용하여 인증정보를 생성합니다.

 

마지막에 구글 클라우드에서 출시를 클릭하여줍니다.

 

 

 

Invalid Bundle. The bundle at 'MineDriller.app/Frameworks/UnityFramework.framework' contains disallowed file 'Frameworks'. (ID: fafa15eb-3157-4d26-8db1-8e29b68e3175)

 

Xcode 에서 빌드시 Always Embed Swift Standard Libraries 를  No 로 선택하면 된다.

GoogleAppMeasurement.framework/GoogleAppMeasurement(APMEventAggregates.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. file 

 

bitcode 가 활성화 되어 발생된 오류로 bitcode 를 비활성화 하여 빌드하면 정상적으로 빌드 된다.

 

 

 

Unity를 공부하며 Mesh 에대하여 제가 이해한 내용을 정리하였습니다.

 

Mesh

메시를 생성하거나 수정할 수 있는 클래스입니다.
메시에는 정점과 여러 삼각형 배열이 포함되어 있습니다.개념적으로 모든 정점 데이터는 동일한 크기의 별도 배열에 저장됩니다. 

 

Unity 에서의 mesh 란 쉽게 설명하여 3d 객체를 그릴때 기본이 되는 점(vertices), 선(triangles), 면(uv)을 가지고 다면체 도형입니다.

 

 


 

Mesh.vertices - 점

 

Unity - Scripting API: Mesh.vertices

The number of vertices in the Mesh is changed by assigning a vertex array with a different number of vertices. If you resize the vertex array then all other vertex attributes (normals, colors, tangents, UVs) are automatically resized too. RecalculateBounds

docs.unity3d.com

 

정점 위치의 복사본을 반환하거나 새 정점 위치 배열을 할당합니다.

메쉬의 정점 수는 정점 개수가 다른 정점 배열을 할당하여 변경됩니다.

정점 배열의 크기를 조정하면 다른 모든 정점 속성(법선, 색상, 접선, UV)도 자동으로 크기가 조정됩니다. 정점을 설정할 때 메시에 정점이 할당되지 않은 경우 RecalculateBounds가 자동으로 호출됩니다.

이 메서드는 월드 공간이 아닌 로컬 공간의 정점을 반환합니다.

 

3d 객체를 그릴때의 정점.

 

mesh.vertices = new Vector3[]{
	new Vector3(0,0,0),
	new Vector3(0,0,1),
	new Vector3(1,0,0)
};

 


 

Mesh.triangles - 선

 

Unity - Scripting API: Mesh.triangles

The array is a list of triangles that contains indices into the vertex array. The size of the triangle array must always be a multiple of 3. Vertices can be shared by simply indexing into the same vertex. If the Mesh contains multiple sub-meshes (Materials

docs.unity3d.com

메시의 모든 삼각형을 포함하는 배열입니다.

배열은 정점 배열에 대한 인덱스를 포함하는 삼각형 목록입니다. 삼각형 배열의 크기는 항상 3의 배수여야 합니다. 동일한 꼭지점을 인덱싱하는 것만으로 꼭지점을 공유할 수 있습니다. 메시에 여러 하위 메시(재질)가 포함된 경우 삼각형 목록에는 모든 하위 메시에 속하는 모든 삼각형이 포함됩니다. 이 함수를 사용하여 삼각형 배열을 할당하면 subMeshCount가 1로 설정됩니다. 여러 개의 하위 메시를 갖고 싶다면 subMeshCount  SetTriangles를 사용하세요 .

 

점을 연결할수있는 선이 되는 변수

 

mesh.triangles = new int[]{
    0,1,2
};

 

 


 

Mesh.uv - 면

 

Unity - Scripting API: Mesh.uv

This channel is also commonly called "UV0". It maps to the shader semantic `TEXCOORD0`. When you call Mesh.HasVertexAttribute, this channel corresponds to VertexAttribute.TexCoord0. By default, Unity uses this channel to store UVs for commonly used texture

docs.unity3d.com

첫 번째 채널의 텍스처 좌표(UV)입니다. 기본적으로 Unity는 이 채널을 사용하여 일반적으로 사용되는 텍스처(확산 맵, 반사 맵 등)에 대한 UV를 저장합니다. Unity는 UV를 0-1 공간에 저장합니다. [0,0]은 텍스처의 왼쪽 하단 모서리를 나타내고 [1,1]은 오른쪽 상단을 나타냅니다. 값은 고정되지 않습니다. 필요한 경우 0 미만 및 1 이상의 값을 사용할 수 있습니다.

 

정점과 동일한 지점의 텍스쳐의 좌표.

 

mesh.uv = new Vector2[]{
    new Vector2(0,0),
    new Vector2(0,1),
    new Vector2(1,0),
};

 

+ Recent posts