Skip to content

Latest commit

 

History

History
186 lines (124 loc) · 6.56 KB

File metadata and controls

186 lines (124 loc) · 6.56 KB

TypeScript Importer

TypeScript Importer for Unity

Releases GitHub license

English | 日本語

hero-image

概要

TypeScript ImporterはUnityにTypeScriptを導入するためのライブラリです。TypeScript Importerをプロジェクトに追加することで、.tsが自動でJavaScriptにトランスパイルされ、TypeScriptAssetとして扱えるようになります。

また、TypeScriptToLuaに対応した拡張も用意されています。これを利用することで、.tsをJavaScriptの代わりにLuaにトランスパイルすることが可能になります。詳細はTypeScriptImporter.Luaの項目を参照してください。

セットアップ

要件

  • Unity 2021.3 以上

TypeScript

TypeScriptがインストールされていない場合は以下のコマンドを実行してTypeScriptをインストールします。

Warning

TypeScript Importerを利用するには、TypeScriptがグローバルにインストールされている必要があります。

npm install -g typescript

Unity

  1. Window > Package ManagerからPackage Managerを開く
  2. 「+」ボタン > Add package from git URL
  3. 以下のURLを入力する
https://github.com/AnnulusGames/TypeScriptImporter.git?path=src/TypeScriptImporter/Assets/TypeScriptImporter

あるいはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記

{
    "dependencies": {
        "com.annulusgames.typescript-importer": "https://github.com/AnnulusGames/TypeScriptImporter.git?path=src/TypeScriptImporter/Assets/TypeScriptImporter"
    }
}

使い方

Assetsフォルダ以下に.tsファイルを追加することで、TypeScript Importerによって自動的にコンパイルが実行され、TypeScriptAssetに変換されます。

これは元のTypeScriptのソースコードとトランスパイル後のJavaScriptのソースコードの両方を保持するScriptableObjectです。

作成されたTypeScriptAssetは任意のJavaScriptの実行環境に渡すことができます。以下はJintを用いたサンプルです。

// example.ts
// これをResourcesフォルダ内に配置

declare function log(message: any): void;

log("hello!")
using System;
using UnityEngine;
using TypeScriptImporter;
using Jint;

public class Example : MonoBehaviour
{
    void Start()
    {
        var engine = new Engine()
            .SetValue("log", new Action<object>(Debug.Log));
        
        var asset = Resources.Load<TypeScriptAsset>("example");

        engine.Execute(asset.JavaScriptSource);
    }
}

型定義ファイル

TypeScript Importerは.d.tsファイルを認識してTypeScriptDeclarationAssetに変換します。これはTextAssetのように利用できるほか、他の.tsファイルから参照することが可能です。

tsconfig.json

Project Settings > TypeScript ImporterからTypeScript Importerが利用するtsconfig.jsonファイルを変更することが可能です。

img

tsconfig.jsonの詳細は公式ドキュメントを参照してください。

指定がない場合、TypeScript Importerが一時的なtscondig.jsonを生成して利用します。

TypeScriptImporter.Lua

TypeScriptImporter.Luaを利用することで、.tsをJavaScriptではなくLuaにトランスパイルできます。TypeScriptImporter.Luaは別パッケージとして提供されているため、追加のインストールが必要です。

TypeScriptToLua

TypeScriptImporter.Luaは内部でTypeScriptToLuaを利用します。TypeScriptToLuaがインストールされていない場合は以下のコマンドを実行してTypeScriptToLuaをインストールします。

Warning

TypeScriptImporter.Luaを利用するには、TypeScriptToLuaがグローバルにインストールされている必要があります。

npm install -g typescript-to-lua

Unity

  1. Window > Package ManagerからPackage Managerを開く
  2. 「+」ボタン > Add package from git URL
  3. 以下のURLを入力する
https://github.com/AnnulusGames/TypeScriptImporter.git?path=src/TypeScriptImporter/Assets/TypeScriptImporter.Lua

あるいはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記

{
    "dependencies": {
        "com.annulusgames.typescript-importer.lua": "https://github.com/AnnulusGames/TypeScriptImporter.git?path=src/TypeScriptImporter/Assets/TypeScriptImporter.Lua"
    }
}

TypeScriptToLuaAsset

.tsファイルをLuaとしてトランスパイルするには、有効なImporterを切り替える必要があります。ImporterのドロップダウンからTypeScriptImporter.Editor.TS2LuaImporterを選択します。

作成されたTypeScriptToLuaAssetは任意のLuaの実行環境に渡すことができます。以下はLua-CSharpを用いたサンプルです。

// example.ts
// これをResourcesフォルダ内に配置

console.log("hello!")
using System;
using UnityEngine;
using TypeScriptImporter;
using Lua;

public class Example : MonoBehaviour
{
    async void Start()
    {
        var state = LuaState.Create();

        state.Environment["print"] = new LuaFunction("print", (context, buffer, ct) =>
        {
            Debug.Log(context.GetArgument(0));
            return new(0);
        });

        var asset = Resources.Load<TypeScriptToLuaAsset>("example");

        await state.DoStringAsync(asset.LuaSource, cancellationToken: destroyCancellationToken);
    }
}

TypeScriptToLuaの挙動を調整するにはtsconfig.jsonを編集する必要があります。詳細はTypeScriptToLuaのドキュメントを参照してください。

ライセンス

MIT License