레드 게이트 허브에서 스크립트 가능한 개체를 사용하는 방법

롤 플레잉 비디오 게임을 만들고 있으며 통계,속성 등을 다양한 항목에 할당하는 더 쉬운 방법이 필요하다고 가정합니다. 유니티 프리팹을 사용하여 이 작업을 수행한 다음 프리팹의 각 개별 복사본 값을 변경할 수 있지만,이 작업을 수행하는 것은 불편한 방법입니다. 우선,이 메서드를 사용 하 여 더 많은 메모리,뭔가 큰 게임을 만들기에 계획 하는 경우 보존 해야 할 수 있습니다. 또한 게임 내 오브젝트를 변경해야 하는 경우 프리팹의 복사본이 여러 개 있을 때 그렇게 하는 것이 효율적이지 않습니다. 이것은 특히 당신이 작업 할 수있는 더 큰 팀이있는 경우 문제가된다,그래서 당신은 다른 팀 구성원에 대한 변경 일을 쉽게 할 수 있습니다. 너가 팀안에 이지 않으면 비록,너가 일하는 때 이 방법은 너에 다만 더 단단할 것이.

이 같은 상황에서 일을 쉽게하기 위해,당신은 당신의 처리에 스크립트 객체가 있습니다. 그리고 스크립트 객체는 무엇입니까? 간단히 말해서,그들은 데이터 컨테이너입니다. 유니티 개발자는 이러한 컨테이너에 대한 기본 템플릿을 만들어 각 개체에 포함해야 하는 정보를 정의합니다. 그런 다음 스크립트 가능한 개체가 해당 템플릿에서 생성 된 다음 유니티 게임 개체에 의해 사용됩니다. 위의 예제에서는 단일 스크립트 가능한 개체를 사용하여 항목의 다른 속성을 정의할 수 있습니다. 그런 다음 해당 스크립트 가능한 개체가 항목의 모든 복사본에 의해 참조됩니다. 전에 항목의 통계를 변경 하려는 경우 항목의 모든 단일 복사본의 값을 변경 해야 합니다. 이제 스크립트 가능한 개체를 사용하면 하나의 개체(스크립트 가능한 개체)만 변경하고 해당 스크립트 가능한 개체 변경에서 데이터를 얻는 모든 개체 만 동시에 변경하면됩니다.

이러한 것들을 실제로 보고 새로운 프로젝트를 만드는 것이 항상 도움이 된다. 이 프로젝트는 스크립트 가능한 객체와 그들이 당신을 도울 수있는 방법을 보여줍니다. 이 프로젝트는 세 개의 문자를 나타내는 의미 세 게임 객체로 구성되어 있습니다. 각 문자는 스크립트 가능한 개체에서 일부 값을 상속합니다. 이러한 값은 최대 건강,공격,방어,속도 및 캐릭터의 이름과 색상입니다. 간단한 사용자 인터페이스는 이러한 값을 표시하므로 스크립트 가능한 개체를 적용한 결과를 쉽게 볼 수 있습니다. 너는 최종 목표가 있을 이니까,창조를 얻는 그것은 시간 이다.

프로젝트 설정

새 프로젝트에서 이러한 아이디어를 구현한다고 가정하면 그림 1 과 같이 유니티 허브 응용 프로그램을 열고 새 프로젝트를 만듭니다.

그림 1:새 프로젝트 만들기

다음 창에서 프로젝트에 원하는 이름을 지정하고 파일 경로를 결정합니다. 모든 템플릿에서 이 프로젝트를 수행할 수 있지만 이 예제에서는 그림 2 와 같이 3 차원 프로젝트 템플릿을 사용합니다. 그것은 당신이 함께 수행하고자하는 경우이 템플릿을 사용하는 것이 좋습니다.

그림 2:프로젝트 이름,유형 및 위치 설정

프로젝트를 만든 후에는 정리해야 합니다. 자산 창에서 창을 마우스 오른쪽 단추로 클릭하고 그림 3 과 같이 폴더 만들기->폴더 이름을 지정하여 세 개의 폴더를 만들어야 합니다.

그림 3: 새 폴더 만들기

당신이 여기있는 동안,그것은 가서 만든 세 가지 자료를 얻는 것이 좋습니다. 이 재질은 스크립트 가능한 객체가 지정하는 재질에 따라 다른 객체의 색상을 변경하는 데 사용됩니다. 이러한 재질을 만들려면 재질 폴더로 이동하고 마우스 오른쪽 버튼을 다시 클릭하고 이번에는 만들기->재질을 선택합니다. 재료의 이름을 지정할 때 색상과 상관 관계가있는 이름을 지정하는 것이 좋습니다. 예를 들어,이 첫 번째 자료는 빨간색으로 명명 될 수 있습니다. 이 색상을 설정하려면 새로 만든 재질을 선택하고 속성 창으로 이동해야 합니다. 알베도 필드에서,당신은,음,색상 선택기를 열려면 클릭 할 수 있습니다 그림 4 에 표시된 색상 선택기가있다.

그림 4:색상 선택기 열기

색상 선택기에서 작은 원을 이동하거나 색상 선택기 창의 아래쪽에 값을 직접 입력하여 색상을 변경합니다. 이 예제에서는 255,0,0 이 될 것입니다. 이 후에는 두 가지 재료를 더 만들고 색상을 지정해야합니다. 이 예제는 녹색과 파란색을 사용하지만 원하는 색상이 될 수 있습니다.

이제이 게임이 이루어지는 실제 장면을 만들 시간이 온다. 그것은 두 가지 주요 부분으로 구성–다양한 스크립트 객체와 문자를 나타내는 세 개의 캡슐에 주어진 통계를 표시하는 사용자 인터페이스가있다. “문자”는 가장 쉬운 부분이므로 거기에서 시작할 수 있습니다. 당신이 할 일은 계층 구조 창으로 이동 만들기 버튼을 클릭하고 그림 5 에 표시된 3 차원 객체->캡슐을 선택합니다. 이 세 번 수행하거나 첫 번째 개체를 복사,원하는 경우 당신은 또한 그들에게 이름을 부여 할 수 있습니다. 이 예제에서는 캡슐에 문자 1,문자 2,문자 3 이라는 이름을 부여합니다.

그림 5:캡슐 개체 만들기

서로 겹치지 않도록 위치를 변경해야 합니다. 개체의 위치를 변경하려면 계층 구조에서 개체를 선택하고 정보 보기에서 변환 구성 요소로 이동합니다. 그런 다음 엑스,와이 및 지 위치 지정 필드를 변경하여 원하는 위치로 개체를 이동합니다.

그림 6: 개체의 위치 편집

표 1 은 이 예에서 세 캡슐 모두의 정확한 위치를 보여줍니다.

표 1: 모든 개체와 세계에서 자신의 위치

개체

위치

와이 위치

위치

샤르 1

차 2

샤르 3

물론,당신이 원하는 경우이 숫자 중 하나를 조정 주시기 바랍니다. 다음은 스크립트 가능한 개체에 주어진 값을 표시하는 사용자 인터페이스입니다. 시작하려면 계층 구조의 만들기 단추를 클릭해야 하지만 이번에는 사용자 인터페이스->캔버스를 선택합니다. 그런 다음 새 캔버스 개체를 선택한 상태에서 만들기 버튼을 다시 클릭하고 이번에는 빈 자식 만들기를 선택합니다. 마지막으로,한 번 더 만들기 버튼을 클릭하고 이번에는 사용자 인터페이스->텍스트를 선택합니다. 새로 만든 텍스트 개체를 빈 게임 개체로 끌어다 놓은 다음 게임 개체 아래에 총 5 개의 텍스트 개체가 있도록 텍스트를 네 번 복제합니다. 완료되면 계층 구조가 그림 7 의 계층 구조와 같아야 합니다.

그림 7:현재 계층 구조

각 텍스트 객체는 스크립트 가능한 객체를 통해 주어진 이름 및 통계와 관련이 있으며,이러한 통계는 최대 건강,공격,방어 및 속도입니다. 텍스트 개체 이름을 나타내는 값으로 변경하는 것이 좋습니다. 따라서 첫 번째 텍스트 객체는 이름 _텍스트라고 할 수 있고 두 번째 텍스트 객체는 공격 _텍스트라고 할 수 있습니다. 또한 사용자 인터페이스가 어떻게 보이는지에 대한 시각적 정보를 제공하기 위해 기본 텍스트를 변경해야 합니다. 이 작업은 검사기의 텍스트 구성 요소로 이동하여 텍스트 값을 변경하여 수행됩니다. 그리고 마지막으로,그들은 모두 서로의 위에 쌓여 있지 않도록 자신의 위치를 조정합니다. 이를 쉽게 유지하기 위해 표 2 에는 모든 다른 개체 이름과 해당 값이 있어야 하는 항목이 나와 있습니다.

표 2:모든 텍스트 개체 및 기본 텍스트 및 위치 지정 값

게임 개체(캔버스 아래)의 이름을 문자 1 설명과 같이 좀 더 설명적인 것으로 바꾼 다음 부모 개체를 복제합니다. 두 중복의 이름을 문자 2 설명 및 문자 3 설명으로 바꾸고 세 개체를 캡슐 개체 위에 위치시킵니다. 이 예제에서는 문자 1 설명을-300,문자 2 설명은 0,문자 3 위치는 250 에 배치합니다. 모든 와이 과 지 위치 값은 0 으로 남습니다.

조금 긴 길 이었지만 프로젝트 설정이 완료되었습니다! 이제 프로그래밍이 진행되는 한 스크립트 가능한 개체가 어떻게 생성되는지 코딩하고 확인할 시간이 왔습니다. 자산 창에서 스크립트 폴더로 이동하여 마우스 오른쪽 버튼을 클릭하고 만들기->스크립트로 이동하여 두 개의 새 스크립트를 만듭니다. 이러한 스크립트는 문자표 및로드표라고해야합니다. 이 스크립트를 두 번 클릭하여 비주얼 스튜디오를 열고 코딩 프로세스를 시작합니다.

스크립트

스크립트 가능한 개체를 만들려면 먼저 재료와 스크립트를 만드는 데 사용한Create메뉴에 추가해야 합니다. 이렇게 하려면CreateAssetMenu속성을 사용하고 메뉴 내에서 기본 파일 이름 및 위치를 지정합니다. 또한CharStats클래스가 상속하는 클래스를 변경해야합니다. 하지만 이 스크립트는 대신ScriptableObject에서 상속해야 합니다.

menuName을 설정할 때 하위 메뉴 사용을 나타내는 슬래시 문자가 사용됩니다. 당신이 원하는 경우에,당신은 슬래시를 제거하고 단지 만들기 메뉴를 통해 더 이상 탐색 할 필요없이 존재하는 플레이어 단위 옵션을 가질 수있다. 이 경우,하위 메뉴는 주로 당신이 원하는대로 당신의 스크립트 개체를 구성 할 수 있음을 보여주기 위해 추가되었습니다. 이 경우 메뉴는 생성->캐릭터 생성->플레이어 유닛입니다. 원하는 경우 다른 스크립트 가능한 개체에서 동일한 경로에서 개체를 만들 수 있지만 항목과 같은 다른 만들기 옵션을 사용할 수 있습니다.

스크립트 가능한 객체이기 때문에 기본Start및 업데이트 메서드가 필요 없으므로 삭제할 수 있습니다. 이 개체의 주요 목적은 다른 개체에 주어진 데이터를 보유하는 것이지만 스크립트 가능한 개체가 데이터를 보유하는 것 이상의 작업을 수행하는 방법을 보여주기 위해 두 가지 사용자 지정 메서드도 만들어집니다. 데이터에 대해 말하면,이 객체가 보유하고있는 데이터를 정의하는 코드는 다음과 같습니다:

1
2
3
4
5
6

공개 문자열 문자 이름;
공개 지능 공격;
공개 지능 방어;
공개 지능 속도;
공공 지능 최대 건강;
공공 자료 뉴 컬러;

앞서 언급 한 바와 같이,각 스크립트 객체에는 네 가지 통계에 대한 이름과 일부 값이 포함되어 있습니다. 또한 스크립트 객체가 적용되면 어떤 캐릭터의 새로운 색상에 대한 정보를 보유하고 있습니다. 각각의 값은 유니티 편집기에 정의되어,물론,그들은 생성 된 모든 개체에 대해 다를 수 있습니다.

두 가지 방법은 간단하게 유지됩니다. 하나는 단순히 문자가 로드되었다는 메시지를 디버그 콘솔에 인쇄합니다. 이 메시지는LoadStats스크립트의Start메서드에 인쇄됩니다.

1
2
3
4

공공 무효 인쇄 메시지()
{
디버그.로그(“”+문자 이름+”문자가 로드되었습니다.”);
}

RandomizeStats, 두 번째 방법은 이름에서 알 수 있듯이 정확 하 게 않습니다. 스크립트 가능한 개체의 값을 1 에서 20 사이의 난수로 변경합니다. 나중에 새 값으로 사용자 인터페이스를 자동으로 업데이트하도록 프로젝트를 프로그래밍합니다. 그러나 그것은 심지어 가장 흥미로운 부분이 아닙니다! 스크립팅 가능한 개체의 데이터는 영구적이므로 게임이 종료될 때까지 세션에 대해 동일하게 유지됩니다. 이 기능은 일반적으로 오래된 개체가 삭제되고 새 장면이 열리면 새 개체가 다시 로드되므로 여러 장면으로 구성된 게임을 만드는 경우 특히 유용합니다. 그러나 스크립트 가능한 개체 데이터는 장면 간 전환에 영향을 받지 않습니다. 또한 편집기 자체가 닫힐 때까지 유니티 편집기에서 작업하는 동안 데이터는 동일하게 유지됩니다. 즉,편집기에서 게임을 실행하는 동안 스크립팅 가능한 개체 내의 데이터에 대한 변경 사항은 데이터 자체에 대한 변경 사항이 없는 경우 편집기에서 게임을 다시 플레이하면 표시됩니다.

이것이 차르스타트 스크립트의 전부이다. 그것은 오히려 간단 보일 수도 있지만,이 프로젝트는 완료되지 않았습니다. 자체 메서드와 데이터로 스크립트 가능한 개체를 만드는 기능을 프로그래밍했지만 캡슐 문자는 이러한 개체에 대해 아무것도 모릅니다. 그들에 관한 한,스크립트 가능한 객체는 존재하지 않습니다. 이 문제를 해결하려면 객체가 스크립팅 가능한 객체의 데이터를 사용하여 사용자 인터페이스를 업데이트하고 색상을 변경할 수 있도록 로드스태트 스크립트를 열고 코드를 작성해야 합니다. 코드는 그림 8 과 비슷해야 합니다.

그림 8:전체 문자표 스크립트

로드 문자표 스크립트

이 스크립트가 상속하는 클래스를 변경하는 것에 대해 걱정하지 마십시오. 기본MonoBehaviour은 정확히 필요한 것입니다. 대신 맨 위에 새 사용 문을 포함하십시오.

1
유니티 엔진 사용.유이;

이를 포함하면 사용자 인터페이스에서 텍스트를 가져와 스크립트 가능한 개체에 있는 값을 표시하도록 업데이트할 수 있습니다. 이제,클래스 자체에,변수로 시작.

1
2
3
4
5
6
7
8

// scriptable object
public CharStats charStat;
public Text nameText;
public Text attackText;
public Text defenseText;
public Text speedText;
public Text maxHealthText;
public MeshRenderer currentColor;

주석에 설명된 대로charStat변수는 사용되는 스크립트 가능한 개체입니다. 이 스크립트 가능한 객체를 얻는 것이 다른 변수를 선언하는 것과 다르지 않다는 것을 여기에서 볼 수 있습니다. 나중에 스크립트에서 개체 내에서 변수와 메서드를 가져와 이 스크립트에서 사용할 수 있습니다. 사실,CharStats에서 발견 된PrintMessage방법은 지금LoadStatsStart방법에 사용됩니다.

1
2
3
4
5

무효 시작()
{
차트 표시.인쇄메시지();
}

다른 외부 스크립트와 마찬가지로charStat을 호출 한 다음PrintMessage를 호출하여 해당 스크립트 가능한 객체에서 메서드를 찾습니다. 이 기능은 모두 비슷하거나 동일한 동작을 가진 개체가 있는 경우 특히 유용할 수 있습니다. 이 경우 개발자가 이 예제와 같이 디버그 콘솔에 메시지를 인쇄하는 것도 유용할 수 있습니다. 문제가 발생하고 스크립트 가능한 개체가 잘못되었다고 의심되는 경우 디버그 콘솔 메시지를 사용하여 문제를 찾을 수 있습니다.

현재DisplayStats가 존재하지 않는다는 오류가 있습니다. 이 문제를 해결하려면Update메서드 아래로 이동하여 이 코드를 추가합니다.

스크립트 가능한 객체에 저장된 값이 재생되기 위해 나오는 곳입니다. 이전에 선언 된 모든 텍스트 변수? 그들은 표시 할 데이터가 제공됩니다,그래서 당신은 편집기에서 설정 한 그 물음표는 이제 일부 값을 표시합니다. 또한 실제로 통계치는 아니지만currentColor.material을 호출하여 스크립트 가능한 개체에 설정된 재질로 설정하면 문자 색상이 변경됩니다.

두 번째charStats방법RandomizeStats는 아직 사용을 보지 못했기 때문에 장소를 찾아야합니다. Update메서드에서 프로그램은 스페이스 바를 눌렀는지 확인합니다. 있는 경우RandomizeStats를 호출하고 스크립트 가능한 개체에 새 값을 제공합니다. 그런 다음DisplayStat이 다시 호출되고 새 값이 표시됩니다.

1
2
3
4
5
6
7
8

무효 업데이트()
{
만약(입력.키 다운(키 코드.공간))
{
샤르스타트2018 년 11 월 15 일(토)();
}
}

이렇게 하면LoadStats스크립트가 종료되어 이 프로젝트의 코딩 부분이 종료됩니다. 코드는 그림 9 와 비슷해야 합니다. 이제 남은 것은 스크립트 가능한 객체를 몇 개 만들고LoadStats을 사용하여 캡슐 객체에 적용하고 이 새로운 기능을 시도하는 것입니다. 물론,유니티 편집기로 돌아 가기 전에 작업을 저장해야합니다.

그림 9:전체 로드 상태 스크립트

프로젝트 완료

스크립팅 가능한 개체를 사용하려면 먼저 해당 개체를 만들어야 합니다. 에셋 창의 스크립트 가능한 오브젝트 폴더 아래에서 마우스 오른쪽 버튼을 클릭하고 그림 10 과 같이 만들기->캐릭터 생성->플레이어 단위로 이동합니다.

그림 10: 새 플레이어 유닛 만들기,스크립트 가능한 개체

원하는 대로 개체의 이름을 지정할 수 있습니다. 이 예제는 전통적인 롤 플레잉 게임 클래스에서 이러한 개체를 기반으로하므로 전사,사냥꾼 및 마법사가 있습니다. 새 개체를 선택한 다음 속성 창으로 이동하여 다른 필드에 값을 지정합니다. 새 색상 필드를 채우려면 재료 폴더로 이동하여 그림 11 과 같이 원하는 재료를 클릭하고 필드로 드래그하면 됩니다.

그림 11: 개체의 새 색상 재질 설정

스크립팅 가능한 개체를 두 개 더 만들고 이전과 동일하게 수행하여 서로 다른 필드에 대해 서로 다른 값을 지정합니다. 이 작업이 완료되면 계층 구조 창으로 이동하여 문자 개체 중 하나를 선택하십시오. 그런 다음 그림 12 와 같이 애셋 창의 스크립트 폴더로 이동하여로드 스탯을 찾은 다음 인스펙터 창으로 드래그하여 로드 스탯 스크립트를 구성 요소로 제공합니다.

그림 12:객체에 로드표시 스크립트 연결

다음으로 로드표시 필드를 채워야 합니다. 먼저 첫 번째”문자”에서 사용할 스크립트 가능한 개체를 찾아 그림 13 과 같이 문자 통계 필드에 적용합니다. 스크립트 가능한 개체는 스크립트 가능한 개체 아래의 자산 창에 있습니다.

그림 13:스크립트 가능한 개체 문자 1 이

데이터를 가져올 위치 설정 이제 텍스트 필드를 채 웁니다. 계층 구조에서 캔버스를 확장한 다음 현재 편집 중인 개체와 상관되는 문자 설명 개체를 확장합니다. 예를 들어 문자 1 을 편집하면 문자 1 설명을 확장할 수 있습니다. 그런 다음 상위 개체 아래에 있는 텍스트 개체를 가져와 그림 14 와 같이 해당 필드에 적용합니다.

그림 14:모든 텍스트 필드 설정

텍스트 필드가 채워지면 객체의 메쉬 렌더러를 가져와야하므로 재질에 액세스 할 수 있으므로 색상 변경이 가능합니다. 인스펙터 창에서 메쉬 렌더러 구성 요소를 클릭하고 드래그하여 그림 15 와 같이 현재 색상 필드로 드래그하기만 하면 됩니다.

그림 15: 현재 색상 필드 설정

다른 두 문자 개체에 대해 이전 몇 단계를 반복하면 프로젝트가 완료됩니다. 준비가 되면 편집기 상단에 있는 재생 버튼을 클릭하고 거의 동일한 3 개의 객체가 서로 다른 값을 가지고 있는 것을 관찰합니다. 어떤 이유로 뭔가 오른쪽 찾고 되지 않습니다,확인 하는 첫 번째 장소는 스크립팅 가능한 개체 및 표시 하는 값 및 색상 당신이 원하는 것 들 자신을 보장 합니다. 또한 새 색상 필드를 다시 확인하십시오.

이 모든 숫자와 색상은 스크립트 가능한 객체에서 나오며 그 자체는 단일 템플릿에서 나옵니다. 당신은뿐만 아니라 더 많은 스크립트 객체를 만들고 객체의 부하 통계 구성 요소에서 문자 통계 필드에 연결하고 매우 다른 문자를 가질 수 있습니다. 게임을 실행하는 동안(그림 16)왼쪽 아래 모서리의 디버그 콘솔에 문자가 로드되었다는 메시지가 표시됩니다. 다른 두 개의 메시지가 있지만 창->일반->콘솔에있는 전체 디버그 콘솔을 열지 않고도 하나의 메시지 만 볼 수 있습니다. 당신은 또한 당신의 문자에 대한 몇 가지 완전히 새로운 통계를 얻기 위해 스페이스 바를 누를 수 있습니다. 게임을 중지한 다음 다시 실행하면 임의로 생성한 값이 계속 유지되어 스크립트 가능한 개체의 지속성을 보여줍니다. 개체에 직접 값을 수동으로 입력하거나 편집기를 닫았다가 다시 열어 원래 값으로 돌아갑니다.

그림 16:작업 중인 스크립팅 가능한 개체

결론

당연히 여러 유형의 개체에 대해 여러 유형의 스크립팅 가능한 개체를 만들 수 있습니다. 이 예제는 문자 클래스를 통해 사용을 보여 주었지만 앞서 언급 한 항목 예제도 있습니다. 그것은 심지어 아케이드 게임에서 발견 된 것을 연상시키는 파워 업으로 훨씬 작은 개체에 사용할 수 있습니다. 스크립트 가능한 개체를 사용하면 몇 번의 키 입력으로 데이터를 변경하고로드하고 결과를 거의 즉시 볼 수있는 깨끗하고 쉬운 시스템을 만들 수 있습니다. 스크립트 가능한 개체를 사용하면 여러 개체에 대해 하나의 템플릿을 사용할 수 있으므로 만들 스크립트가 줄어 듭니다. 프로젝트가 크든 작든,팀에 많은 멤버가 있는지 아니면 자신만 있는지 여부에 관계없이 스크립팅 가능한 개체는 모든 사람의 개발을 좀 더 쉽게 만들 수 있습니다.

You might also like

답글 남기기

이메일 주소는 공개되지 않습니다.