셀 사용자 정의 패키지 만들기

6546 단어 PackageManagerUnityC#
최근의 Unity는 기능을 구분하여 PackageManager에서 원하는 것만 설치합니다.나도 어떻게 이런 포장을 만드는지 토론했다.

패키지 항목 레이아웃


우선 포장이 된 새로운 유니티 프로젝트를 제작한다.항목 내의 폴더 등을 다음 레이아웃과 결합
참조: Unity 매뉴얼https://docs.unity3d.com/Manual/cus-layout.html
Unity 매뉴얼에 따르면 Unity 프로젝트가 아니기 때문에 제작할 때 다른 프로젝트를 가져와야 합니다.나는 이것이 사용하기 좋지 않은 것 같아서 일반적인 프로젝트에 뛰어들었다.
<root>
  └── Assets
    ├── PackageContents
    │  ├── package.json             
    │  ├── README.md
    │  ├── CHANGELOG.md
    │  ├── LICENSE.md
    │  ├── Editor
    │  │     ├── [YourPackageName].Editor.asmdef
    │  │     └── EditorScript.cs
    │  ├── Runtime
    │  │     ├── [YourPackageName].asmdef
    │  │     └── RuntimeScript.cs
    │  └── Documentation~
    │
    │
    └── Tests
        ├── Editor
        │    ├── [YourPackageName].EditorTests.asmdef
        │    └── EditorTests.cs
        └── Runtime
              ├── [YourPackageName].RuntimeTests.asmdef
              └── RuntimeTests.cs

package.json 만들기


우선 패키지.json이라는 파일을 쓰세요.
참조:https://docs.unity3d.com/Manual/upm-manifestPkg.html
예제
{
    "name": "com.company.package",
    "displayName": "Package Name",
    "version": "1.0.0",
    "unity": "2019.2",
    "description": "A Test Package",
    "keywords": [
        "package"
    ],
    "category": "Utility"
}
더 많은 설정이 있지만 기본적으로 이런 설정이 있으면 문제없겠죠?
이름 = reverse url 형식의 패키지 이름
displayName = 인간이 쉽게 읽을 수 있는 이름
버전 = 패키지 버전(major.minor.patch)
unity=unity에 필요한 버전
설명문
키워드
category = 패키지 그룹 이름

C# 스크립트 만들기


이곳은 당연히 자유로운 곳이다.만들고 싶은 포장을 설치하다.예를 들면 Asset Bundle의 제작과 주변 시스템 불러오기?
편집기용이라면 Assets/PackageContents/Editor의 폴더를 사용할 수 있고, 게임용 스크립트라면 Assets/PackageContents/Runtime를 사용할 수 있습니다.

어셈블리 정의 생성하기


Assembly Definition을 추가하면 패키지에 대한 DLL을 만들 수 있습니다.이것은 메인 프로젝트의 컴파일 시간이 빨라져서 누구에게만 DLL을 주고 편리한 것입니다!추가만 하면 끝이니 넣으세요.
편집기와 Runtime 폴더에 각각 추가하고 편집기의 definition에서 참조하는 dll에runtime용 dll을 추가합니다

테스트 파일 만들기


개인적인 판단이지만 모처럼 좋은 기능이 있어 테스트용 스크립트를 추가할 수 있다.
  • Test 폴더는 편집기용과 실행용으로 나뉩니다
  • 테스트 스크립트 등이 만들어지지 않았을 때 테스트 폴더 → Create → Testing → Tests Assembly Folder를 마우스 오른쪽 버튼으로 클릭합니다
  • 만들어진 폴더를 Editor나 Runtime의 이름으로 변경하고, 안에 있는 assembly definition의 이름을 좋아하는 것으로 변경합니다
  • 폴더에서 마우스 오른쪽 버튼으로 클릭 → Create → Testing → C#Test Script를 선택하여 스크립트를 추가합니다
  • 완성된 테스트 스크립트는 대체로 이런 느낌이다
  • using UnityEngine;
    using UnityEngine.TestTools;
    using NUnit.Framework;
    using System.Collections;
    
    public class EditorTests {
    
        [Test]
        public void RunTests() {
            Asset.Pass();
        }
    
        [UnityTest]
        public IEnumerator RunTestsWithEnumerator() {
            yield return null;
        }
    }
    
  • 확인 방법: Unity 메뉴의 창 → General → Test Runner에 나타나는 윈도우에서 정상적으로 작동하는지 테스트합니다

  • * 앞으로 테스트 스크립트 잘 하세요!

    Verdaccio라는 npm repository에 게시


    나는 다음에 할 포장을 어디에 놓고 관리하고 싶으니 어디에 두어라.유니티의 Package Manager는 npm을 사용하기 때문에 자신이 만든 물건을 Package Manager에 제출하고 싶어서 협조가 필요합니다.Unity씨가 추천한 것은 Verdaccio입니다.(설치와 준비가 쉬워서 그런지 유니티는 내부의 다른 것을 사용한 것 같다)
    여기서 다운로드 및 설치:https://github.com/verdaccio/verdaccio
    설치 후command line의 패키지입니다.제이슨 폴더가 있어요.
    npm publish --registry http://localhost:4873
    
    등록 클릭!(물론 다른 기계에서 npm를 위탁 관리하려면 URL과 일치해야 한다)

    생산 프로젝트에 사용


    우선 유니티에게 우리가 만든 리포지토리가 어디에 있는지 알려줘야 한다.
    Packages라는 폴더의 manifest입니다.json을 열고 scoped Registries라는 json 대상을 추가합니다.
    URL, 이름, 패키지를 간단하게 추가하는 역방향 URL
    {
       "scopedRegistries": [
            {
              "name": "My Packages",
              "url": "http://localhost:4873",
              "scopes": [
                "com.company"
              ]
            }
        ],
        "dependencies": {
            "com.unity.ads": "2.0.8",
            "com.unity.analytics": "2.0.16",
            ..hogehoge..
         }
    }
    
    그리고 "dependencies"에서 자신이 발표한 패키지 이름과 버전을 정의합니다
    "dependencies": {
        "com.unity.ads": "2.0.8",
        "com.unity.analytics": "2.0.16",
        ..hogehoge..,
        "com.company.package": "1.0.0"
    }
    
    유니티로 돌아가면 패키지를 다운로드하여 사용할 수 있습니다!

    더욱 편리하게


    우선, 코드를 관리하려면gitrepository는 당연히 해야 한다.그리고 GitLab의 CI 기능을 이용하여 테스트 클래스를 자동으로 실행합니다. OK하면 npm에서 publish를 할 수 있습니다!
    · Git repo 제작
    /git runner 만들기 (CI에 쓰는 방법)
    ·git runner에 사용할 스크립트 추가 (루트 폴더에.gitlab-ci.yml 추가)
    제가 직접 쓴 스크립트가 그렇습니다.
    stages:
      - runTests
      - publish
    
    variables:
      version: "awk '$$1==\"m_EditorVersion:\"{print $$2}' ./ProjectSettings/ProjectVersion.txt"
    
    editor-tests:
      script: 
        - "echo 'Running Editor Tests...'"
        - "unityVersion=$(eval $version)"
        - "unity='/Applications/Unity/Hub/Editor/'$unityVersion'/Unity.app/Contents/MacOS/Unity'"
        - $unity -batchmode -runTests -projectPath . -testResults ./editmodeResults.xml -testPlatform editmode
      stage: runTests
      tags:
        - unity
      only:
        - master
    
    runtime-tests:
      script: 
        - "echo 'Running Runtime Tests...'"
        - "unityVersion=$(eval $version)"
        - "unity='/Applications/Unity/Hub/Editor/'$unityVersion'/Unity.app/Contents/MacOS/Unity'"
        - $unity -batchmode -runTests -projectPath . -testResults ./playmodeResults.xml -testPlatform playmode
      stage: runTests
      tags:
        - unity
      only:
        - master
    
    publish-npm:
      script:
        - "cd ./Assets/PackageContents"
        - "npm publish --registry http://localhost:4873/"
      stage: publish
      tags:
        - unity
      only:
        - master
    
    · 2단계(테스트 및 발표)
    ・ 편집기용 및 실행용 테스트 스크립트 실행(Project Versions의 텍스트에서 시작하는 유니티 버전 꺼내기)
    ・ 테스트 OK 하면 npm publish
    /주 지점만 이동(only: master)

    끝내다


    따로 포장하면 좋은 프레임으로 각 아이템을 사용할 수 있어서 정말 편리합니다!나중에 분류하는 게 힘들 수 있으니 조기 단계에서 포장하는 것을 추천합니다!

    좋은 웹페이지 즐겨찾기