이제 3D 세계가 있으므로 이 튜토리얼의 이 섹션에서는 코인 수집 메커니즘을 정의하는 방법을 보여줍니다. 이 메커니즘을 통해 플레이어는 코인을 수집할 수 있으며, 최근에 수집된 코인은 수집을 비활성화합니다.
코인 생성
스크립트를 작성하려면 먼저 세계에 있는 자리 표시자 개체를 사용하여 코인으로 사용할 수 있습니다. 이전 섹션에서 만든 해양 스택 플랫폼과 같이 코인은 간단한 Part 개체일 수 있습니다.
코인을 생성하려면:
탐색기 창에서 새 폴더를 세계 폴더에 추가한 다음 코인으로 이름을 변경합니다.
코인 폴더에 실린더 부품을 삽입한 다음 부품을 코인으로 이름을 변경합니다.
부품을 선택한 다음 속성 창에서,
- Set BrickColor to Gold .
- 재료를 금속 으로 설정합니다.
- 크기 크기 를 0.6, 8, 4 로 설정합니다.
- 충돌 가능성 비활성화 를 사용하면 다른 부품이 코인을 통과할 수 있습니다. 이렇게 하면 플레이어가 코인을 통해 걸어갈 수 있으므로 플레이어가 수집할 수 있습니다.
- 앵커 를 활성화하십시오. 이렇게 하면 엔진이 어떤 물리 관련 시뮬레이션에 대해서도 코인의 위치를 변경하지 않도록 지시하므로 플레이어가 코인에 접근할 수 있으면서도 위치에 영향을 주지 않습니다.
몇 가지 코인을 더 복제하고 테스트 목적으로 맵 주위에 배치합니다.
이제 실린더 부품은 코인과 같이 보이고 물리 시뮬레이션을 방지하지만, 플레이어가 수집할 수 있도록 코인에 논리를 추가해야 합니다.
스크립트 생성
코인을 수집할 수 있도록 하려면 플레이어가 그것을 만질 때 반응하십시오. Roblox 엔진은 코인에 닿는 무언가를 감지할 수 있지만, 스크립트에서 그것을 선언해야 합니다. 스크립트를 생성하려면:
탐색기 창에서 ServerScriptService를 마우스로 오버하고 ⊕ 버튼을 클릭하십시오. 컨텍스트 메뉴가 표시됩니다.
컨텍스트 메뉴에서 스크립트를 선택합니다. 새로운 스크립트는 ServerScriptService 아래에 표시되며, 엔진이 서버에서 스크립트를 실행하도록 지시하고 클라이언트가 코드에 액세스하지 못하게 합니다.
스크립트를 CoinService 로 이름을 변경합니다.
다음 코드로 기본 코드를 대체합니다.
-- 서비스 및 변수 초기화local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- 이벤트 처리기 정의local function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- 플레이어가 코인을 만졌습니다coin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- 이벤트 수신기 설정for _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end이제 플레이어가 코인을 터치하면 코인이 10초 동안 사라지고 출력 로그에 Player collected coin 을 표시합니다.
코드 설명다음 섹션에서는 스크립트가 어떻게 작동하는지 자세히 설명합니다.
서비스 및 변수 초기화
다른 언어로 작성한 코드와 마찬가지로 스크립트 顶部에 변수를 정의하십시오. 우리 코드는 팔로잉수행합니다.
서비스 인스턴스 획득 서비스 인스턴스 획득 서비스 인스턴스 획득 서비스 인스턴스 획득 서비스 인스턴스 획득 서비스 인스턴스 획득 서비스 인스턴스 획득 서비스 인스턴스 획득 서비스 인스턴스 �
모든 코인에 대한 참조를 얻습니다. - 스크립트는 다음 GetChildren() 메서드로 3D 작업 공간에서 모든 코인 개체에 대한 참조를 얻습니다. 이 메서드는 작업 공간에 부모가 되는 개체에 대한 모든 부모를
전역 변수 정의 - COOLDOWN는 나중에 사용됩니다.
서비스 및 변수 초기화local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
이벤트 처리기 정의
Roblox 엔진은 3D 세계를 물리적으로 시뮬레이션하고 렌더링, 물리 및 네트워킹과 관련된 이벤트를 처리하는 많은 로직을 처리합니다. 이 이벤트 중 일부에 대해 스크립트를 작성하는 경우, 이 이벤
코인이 활성화되었는지 여부를 감지합니다. - 모든 Instance에는 3D 세계에 개체가 있는지 여부를 정의하는 Enabled 부울 특성이 있습니다. 여러분은 인스턴스 특성을 얻을 수 있습니다 0>Class.Instance:GetAttribute()|GetAttribute()0> 메서드
플레이어가 코인을 만질 때 코인을 감지합니다. - 코인이 활성화되면 코인을 만진 플레이어를 확인하기 위해 플레이어 서비스를 사용합니다. 터치 이벤트가 발생하면 Roblox 엔진은 코인을 만진 플레이어를 otherPart 매개 변수</
플레이어가 코인을 만질 경우 코인을 비활성화하고 10초 후에 다시 활성화합니다. - 마지막으로, 플레이어가 코인을 만질 경우 코인을 비활성화하고 10초 후에 다시 활성화하여 컬렉션을
이벤트 처리기 정의local function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- 플레이어가 코인을 만졌습니다coin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
이벤트 처리기 연결하기
모든 시뮬레이션 3D 개체는 BasePart 에서 상속되므로 Touched() 이벤트가 발생합니다. 다음 루프는 onTouchedEvent() 처리기를 모든 코인의 터치 이벤트에 연결하도록 팔로잉같이 연결합니다.
모든 코인을 루프합니다. - 일반 반복을 사용하여 코인 중 하나를 루프합니다.
이벤트에 처리기를 연결합니다. - 각 루프의 초기 시작 동안 코인은 기본적으로 3D 세계에 표시되므로 코인 처리기 메서드는 코인 처리기 메서드와 연결됩니다. onCoin
이벤트 처리기 연결for _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
메카닉 플레이테스트
코인 콜렉션 메커니즈가 제대로 작동하는지 확인할 때입니다. 경험을 테스트하려면:
메뉴 바에서 플레이 버튼을 클릭합니다. Studio가 플레이테스트 모드로 들어갑니다.
캐릭터를 이동하여 코인을 터치하세요. 스크립트가 올바르게 작동하는 경우 출력 창에 코인을 수집한 플레이어가 표시되고 코인은 10초 후에 다시 나타나기 전에 Player collected coin.