이제 3D 세계가 있으므로 이 자습서의 이 섹션에서는 코인 수집 메커니즘을 정의하기 위해 첫 번째 스크립트를 추가하는 방법을 알려줍니다.이 메커니즘을 통해 플레이어가 코인을 수집할 수 있으며, 최근에 수집된 경우 코인 수집을 비활성화합니다.
코인 생성
스크립트를 작성하려면 코인으로 사용할 세계의 플레이스홀더 개체가 있어야 합니다.이전 섹션에서 만든 바다 스택 플랫폼과 마찬가지로 코인은 간단한 Part 개체일 수 있습니다.
코인을 생성하려면:
탐색기 창에서 새 폴더 를 세계 폴더에 추가하고 이름을 코인 으로 변경합니다.
코인 폴더에 실린더 부품을 삽입한 다음 부품의 이름을 코인으로 변경합니다.
부품을 선택한 다음, 속성 창에서
- 설정 벽돌 색상 을 금 으로.
- 재료 를 금속 으로 설정합니다.
- 설정 크기 를 0.6, 8, 4 설정합니다.
- 비활성화 CanCollide .이것은 엔진에 다른 부품이 코인을 통과할 수 있다고 알려 플레이어가 코인을 수집하기 위해 코인을 통과할 수 있음을 의미합니다.
- 고정 활성화.이것은 물리 관련 시뮬레이션으로 인해 코인의 위치를 결코 변경하지 않도록 엔진에 알려 플레이어가 위치를 영향을 주지 않고 코인에 접근할 수 있음을 의미합니다.
몇 개의 코인을 더 복제하고 테스트 목적으로 맵 주변에 배치합니다.
이제 실린더 부품은 코인처럼 보이고 물리 시뮬레이션을 방지하지만 플레이어가 수집할 수 있도록 코인에 논리를 추가해야 합니다.
스크립트 생성
코인을 수집할 수 있도록 하려면 플레이어가 그것을 만질 때 반응하고 싶습니다.Roblox 엔진은 코인에 무언가가 접촉할 때 알려줄 수 있지만, 스크립트에서 그것을 선언해야 합니다.스크립트를 생성하려면:
탐색기 창에서 서버 스크립트 서비스를 가리키고 ⊕ 버튼을 클릭하십시오. 컨텍스트 메뉴가 표시됩니다.
컨텍스트 메뉴에서 스크립트 를 선택합니다.새 스크립트가 ServerScriptService 아래에 표시되어 엔진에 스크립트를 서버에서 실행하도록 지시하고 클라이언트가 코드에 액세스하는 것을 방지합니다.
스크립트를 CoinService 로 이름 바꾸기.
기본 코드를 다음 코드로 바꿉니다: replace the default code with the following code:
-- 서비스 및 변수 초기화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를 인쇄합니다.
코드 설명다음 섹션에서는 스크립트가 더 자세하게 작동하는 방법을 설명합니다.
서비스와 변수 초기화
아마 다른 언어로 작성한 많은 코드와 마찬가지로, 스크립트 상단에서 나중에 필요한 변수를 정의합니다.우리의 코드는 팔로잉수행합니다:
모든 코인에 대한 참조 획득 - 스크립트는 다음 방법으로 모든 코인 개체에 대한 참조를 3D 작업 영역에 쿼리합니다.이 메서드는 관련된 개체와 연결된 모든 것을 포함하는 배열을 반환하며, 이 경우 이전에 만든 Workspace.World.Coins 폴더입니다.
전역 변수 정의 - COOLDOWN
서비스와 변수 초기화local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
이벤트 처리기 정의
Roblox 엔진은 물리적으로 3D 세계를 시뮬레이션하고 렌더링, 물리 및 네트워킹과 관련된 이벤트를 처리하기 위해 많은 논리를 처리합니다.이러한 이벤트 중 일부에서 자체 논리를 스크립트하는 것에 관심이 있을 때, 엔진이 나머지를 처리하도록 하면서 이를 수신하고 처리할 수 있습니다.이 경우 코인이 만지는 관련 이벤트를 수신하고 처리합니다.스크립트는 팔로잉수행하는 onCoinTouched() 메서드에서 이 이벤트를 처리하는 논리를 정의합니다.
코인이 활성화되었는지 여부를 감지합니다 - 모든 는 3D 세계에 개체가 존재하는지 여부를 정의하는 부울 특성을 가지고 있습니다.GetAttribute() 메서드로 인스턴스 특성을 가져올 수 있습니다.
플레이어가 코인을 터치했는지 여부를 감지합니다. - 코인이 활성화되어 있으면 메서드는 플레이어 서비스를 사용하여 코인에 접촉한 개체가 실제로 플레이어인지 확인합니다.터치 이벤트가 발생하면 Roblox 엔진은 코인을 만진 개체를 otherPart 매개변수로 전달합니다.스크립트는 otherPart의 부모가 플레이어에 속해 있는지 확인합니다.
플레이어가 코인을 터치하면 코인을 비활성화하고, 10초 후에 다시 활성화합니다 - 마지막으로, 플레이어가 코인을 터치하면 메서드가 코인을 비활성화하고, 10초 동안 대기한 후 컬렉션위해 코인을 다시 활성화합니다.task.wait()는 코드 실행을 완전히 일시 중지하지 않고 다른 스레드의 태스크를 동시에 실행하도록 하여 성능을 향상시키기 때문에 wait() 대신 사용됩니다.
이벤트 처리기 정의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 세계에서 표시됩니다.onCoinTouched() 처리기 메서드도 코인의 Touched 이벤트에 연결되어 이벤트가 발생할 때마다 실행됩니다.엔진이 터치를 감지하면 터치한 개체의 개체도 전달합니다, otherPart .
이벤트 처리기 연결for _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
메커니즘 플레이테스트
코인 컬렉션 메카닉이 의도한 대로 작동하는지 확인할 시간입니다. 경험을 플레이테스트하려면:
도구 모음에서 플레이 버튼을 클릭하십시오. Studio가 플레이테스트 모드로 들어갑니다.
캐릭터를 이동하여 코인을 터치하십시오.스크립트가 올바르게 작동하면 출력 창에 Player collected coin가 표시되고 코인은 재출현하기 전에 10초 동안 사라집니다.