@rage-against-the-pixel/unity-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +63 -0
- package/dist/android-sdk.d.ts +7 -0
- package/dist/android-sdk.js +144 -0
- package/dist/android-sdk.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +298 -0
- package/dist/index.js.map +1 -0
- package/dist/license-client.d.ts +25 -0
- package/dist/license-client.js +411 -0
- package/dist/license-client.js.map +1 -0
- package/dist/logging.d.ts +44 -0
- package/dist/logging.js +147 -0
- package/dist/logging.js.map +1 -0
- package/dist/unity-editor.d.ts +26 -0
- package/dist/unity-editor.js +333 -0
- package/dist/unity-editor.js.map +1 -0
- package/dist/unity-hub.d.ts +73 -0
- package/dist/unity-hub.js +902 -0
- package/dist/unity-hub.js.map +1 -0
- package/dist/unity-project.d.ts +13 -0
- package/dist/unity-project.js +87 -0
- package/dist/unity-project.js.map +1 -0
- package/dist/unity-version.d.ts +14 -0
- package/dist/unity-version.js +186 -0
- package/dist/unity-version.js.map +1 -0
- package/dist/utilities.d.ts +44 -0
- package/dist/utilities.js +291 -0
- package/dist/utilities.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.UnityEditor = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const logging_1 = require("./logging");
|
|
40
|
+
const utilities_1 = require("./utilities");
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
class UnityEditor {
|
|
43
|
+
editorPath;
|
|
44
|
+
editorRootPath;
|
|
45
|
+
procInfo;
|
|
46
|
+
pidFile;
|
|
47
|
+
logger = logging_1.Logger.instance;
|
|
48
|
+
autoAddNoGraphics;
|
|
49
|
+
constructor(editorPath) {
|
|
50
|
+
this.editorPath = editorPath;
|
|
51
|
+
if (!fs.existsSync(editorPath)) {
|
|
52
|
+
throw new Error(`The Unity Editor path does not exist: ${editorPath}`);
|
|
53
|
+
}
|
|
54
|
+
fs.accessSync(editorPath, fs.constants.X_OK);
|
|
55
|
+
this.editorRootPath = UnityEditor.GetEditorRootPath(editorPath);
|
|
56
|
+
this.pidFile = path.join(process.env.RUNNER_TEMP || process.env.USERPROFILE || '.', '.unity', 'unity-editor-process-id.txt');
|
|
57
|
+
const match = editorPath.match(/(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)/);
|
|
58
|
+
if (!match) {
|
|
59
|
+
throw Error(`Invalid Unity Editor Path: ${editorPath}`);
|
|
60
|
+
}
|
|
61
|
+
const unityMajorVersion = match.groups?.major;
|
|
62
|
+
if (!unityMajorVersion) {
|
|
63
|
+
throw Error(`Invalid Unity Major Version: ${editorPath}`);
|
|
64
|
+
}
|
|
65
|
+
this.autoAddNoGraphics = parseInt(unityMajorVersion, 10) > 2018;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the full path to a Unity project template based on the provided template name or regex pattern.
|
|
69
|
+
* @param template The name or regex pattern of the template to find.
|
|
70
|
+
* @returns The full path to the matching template file.
|
|
71
|
+
* @throws Error if the template directory does not exist, no templates are found, or no matching template is found.
|
|
72
|
+
*/
|
|
73
|
+
GetTemplatePath(template) {
|
|
74
|
+
let templateDir;
|
|
75
|
+
let editorRoot = path.dirname(this.editorPath);
|
|
76
|
+
if (process.platform === 'darwin') {
|
|
77
|
+
templateDir = path.join(path.dirname(editorRoot), 'Resources', 'PackageManager', 'ProjectTemplates');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
templateDir = path.join(editorRoot, 'Data', 'Resources', 'PackageManager', 'ProjectTemplates');
|
|
81
|
+
}
|
|
82
|
+
// Check if the template directory exists
|
|
83
|
+
if (!fs.existsSync(templateDir) ||
|
|
84
|
+
!fs.statSync(templateDir).isDirectory()) {
|
|
85
|
+
throw new Error(`Template directory not found: ${templateDir}`);
|
|
86
|
+
}
|
|
87
|
+
// Find all .tgz files in the template directory
|
|
88
|
+
const files = fs.readdirSync(templateDir)
|
|
89
|
+
.filter(f => f.endsWith('.tgz'))
|
|
90
|
+
.map(f => path.join(templateDir, f));
|
|
91
|
+
if (files.length === 0) {
|
|
92
|
+
throw new Error(`No templates found in ${templateDir}`);
|
|
93
|
+
}
|
|
94
|
+
this.logger.ci(`Available templates:`);
|
|
95
|
+
files.forEach(f => this.logger.ci(` > ${path.basename(f)}`));
|
|
96
|
+
// Build a regex to match the template name and version (e.g., com.unity.template.3d.*[0-9]+\.[0-9]+\.[0-9]+\.tgz)
|
|
97
|
+
// Accepts either a full regex or a simple string
|
|
98
|
+
let regex;
|
|
99
|
+
try {
|
|
100
|
+
regex = new RegExp(template + ".*[0-9]+\\.[0-9]+\\.[0-9]+\\.tgz");
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
throw new Error(`Invalid template regex: ${template}`);
|
|
104
|
+
}
|
|
105
|
+
// Filter files by regex
|
|
106
|
+
const matches = files.filter(f => regex.test(path.basename(f)));
|
|
107
|
+
if (matches.length === 0) {
|
|
108
|
+
throw new Error(`${template} path not found in ${templateDir}!`);
|
|
109
|
+
}
|
|
110
|
+
// Pick the longest match (as in the shell script: sort by length descending)
|
|
111
|
+
matches.sort((a, b) => b.length - a.length);
|
|
112
|
+
const templatePath = matches[0];
|
|
113
|
+
if (!templatePath) {
|
|
114
|
+
throw new Error('No matching template path found.');
|
|
115
|
+
}
|
|
116
|
+
return path.normalize(templatePath);
|
|
117
|
+
}
|
|
118
|
+
async Run(command) {
|
|
119
|
+
let isCancelled = false;
|
|
120
|
+
const onCancel = async () => {
|
|
121
|
+
isCancelled = true;
|
|
122
|
+
await this.tryKillEditorProcess();
|
|
123
|
+
};
|
|
124
|
+
process.once('SIGINT', onCancel);
|
|
125
|
+
process.once('SIGTERM', onCancel);
|
|
126
|
+
let exitCode;
|
|
127
|
+
try {
|
|
128
|
+
const commandStr = `\x1b[34m${this.editorPath} ${command.args.join(' ')}\x1b[0m`;
|
|
129
|
+
this.logger.startGroup(commandStr);
|
|
130
|
+
exitCode = await this.exec(command, pInfo => { this.procInfo = pInfo; });
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
if (error instanceof Error) {
|
|
134
|
+
this.logger.error(error.toString());
|
|
135
|
+
}
|
|
136
|
+
if (!exitCode) {
|
|
137
|
+
exitCode = 1;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
this.logger.endGroup();
|
|
142
|
+
if (!isCancelled) {
|
|
143
|
+
await this.tryKillEditorProcess();
|
|
144
|
+
if (exitCode !== 0) {
|
|
145
|
+
throw Error(`Unity failed with exit code ${exitCode}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
GetLogsDirectory(projectPath) {
|
|
151
|
+
const logsDir = projectPath !== undefined
|
|
152
|
+
? path.join(projectPath, 'Builds', 'Logs')
|
|
153
|
+
: path.join(process.env.GITHUB_WORKSPACE || process.cwd(), 'Logs');
|
|
154
|
+
try {
|
|
155
|
+
fs.accessSync(logsDir, fs.constants.R_OK);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
this.logger.debug(`Creating Logs Directory:\n > "${logsDir}"`);
|
|
159
|
+
fs.mkdirSync(logsDir, { recursive: true });
|
|
160
|
+
}
|
|
161
|
+
return logsDir;
|
|
162
|
+
}
|
|
163
|
+
GenerateLogFilePath(projectPath, prefix = undefined) {
|
|
164
|
+
const logsDir = this.GetLogsDirectory(projectPath);
|
|
165
|
+
const timestamp = new Date().toISOString().replace(/[-:]/g, ``).replace(/\..+/, ``);
|
|
166
|
+
return path.join(logsDir, `${prefix ? prefix + '-' : ''}Unity-${timestamp}.log`);
|
|
167
|
+
}
|
|
168
|
+
async exec(command, onPid) {
|
|
169
|
+
if (!command.args || command.args.length === 0) {
|
|
170
|
+
throw Error('No command arguments provided for Unity execution');
|
|
171
|
+
}
|
|
172
|
+
if (!command.args.includes(`-automated`)) {
|
|
173
|
+
command.args.push(`-automated`);
|
|
174
|
+
}
|
|
175
|
+
if (!command.args.includes(`-batchmode`)) {
|
|
176
|
+
command.args.push(`-batchmode`);
|
|
177
|
+
}
|
|
178
|
+
if (this.autoAddNoGraphics &&
|
|
179
|
+
!command.args.includes(`-nographics`) &&
|
|
180
|
+
!command.args.includes(`-force-graphics`)) {
|
|
181
|
+
command.args.push(`-nographics`);
|
|
182
|
+
}
|
|
183
|
+
if (!command.args.includes('-logFile')) {
|
|
184
|
+
command.args.push('-logFile', this.GenerateLogFilePath(command.projectPath));
|
|
185
|
+
}
|
|
186
|
+
const logPath = (0, utilities_1.getArgumentValueAsString)('-logFile', command.args);
|
|
187
|
+
let unityProcess;
|
|
188
|
+
if (process.platform === 'linux' && !command.args.includes('-nographics')) {
|
|
189
|
+
unityProcess = (0, child_process_1.spawn)('xvfb-run', [this.editorPath, ...command.args], {
|
|
190
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
191
|
+
detached: true,
|
|
192
|
+
env: {
|
|
193
|
+
...process.env,
|
|
194
|
+
DISPLAY: ':99',
|
|
195
|
+
UNITY_THISISABUILDMACHINE: '1'
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
unityProcess = (0, child_process_1.spawn)(this.editorPath, command.args, {
|
|
201
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
202
|
+
detached: true,
|
|
203
|
+
env: {
|
|
204
|
+
...process.env,
|
|
205
|
+
UNITY_THISISABUILDMACHINE: '1'
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
const processId = unityProcess.pid;
|
|
210
|
+
if (!processId) {
|
|
211
|
+
throw new Error('Failed to start Unity process!');
|
|
212
|
+
}
|
|
213
|
+
onPid({ pid: processId, ppid: process.pid, name: this.editorPath });
|
|
214
|
+
this.logger.debug(`Unity process started with pid: ${processId}`);
|
|
215
|
+
// make sure the directory for the PID file exists
|
|
216
|
+
const pidDir = path.dirname(this.pidFile);
|
|
217
|
+
if (!fs.existsSync(pidDir)) {
|
|
218
|
+
fs.mkdirSync(pidDir, { recursive: true });
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
try {
|
|
222
|
+
var existingProcInfo = await (0, utilities_1.readPidFile)(this.pidFile);
|
|
223
|
+
if (existingProcInfo) {
|
|
224
|
+
const killedPid = await (0, utilities_1.tryKillProcess)(existingProcInfo);
|
|
225
|
+
if (killedPid) {
|
|
226
|
+
this.logger.warn(`Killed existing Unity process with pid: ${killedPid}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
// PID file does not exist, continue
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Write the PID to the PID file
|
|
235
|
+
fs.writeFileSync(this.pidFile, String(processId));
|
|
236
|
+
const logPollingInterval = 100; // milliseconds
|
|
237
|
+
// Wait for log file to appear
|
|
238
|
+
while (!fs.existsSync(logPath)) {
|
|
239
|
+
await new Promise(res => setTimeout(res, logPollingInterval));
|
|
240
|
+
}
|
|
241
|
+
// Start tailing the log file
|
|
242
|
+
let lastSize = 0;
|
|
243
|
+
let logEnded = false;
|
|
244
|
+
const tailLog = async () => {
|
|
245
|
+
while (!logEnded) {
|
|
246
|
+
try {
|
|
247
|
+
const stats = fs.statSync(logPath);
|
|
248
|
+
if (stats.size > lastSize) {
|
|
249
|
+
const fd = fs.openSync(logPath, 'r');
|
|
250
|
+
const buffer = Buffer.alloc(stats.size - lastSize);
|
|
251
|
+
fs.readSync(fd, buffer, 0, buffer.length, lastSize);
|
|
252
|
+
process.stdout.write(buffer.toString('utf8'));
|
|
253
|
+
fs.closeSync(fd);
|
|
254
|
+
lastSize = stats.size;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
// ignore read errors
|
|
259
|
+
}
|
|
260
|
+
await new Promise(res => setTimeout(res, logPollingInterval));
|
|
261
|
+
}
|
|
262
|
+
// Write a newline at the end of the log tail
|
|
263
|
+
// prevents appending logs from being printed on the same line
|
|
264
|
+
process.stdout.write('\n');
|
|
265
|
+
};
|
|
266
|
+
const timeout = 10000; // 10 seconds
|
|
267
|
+
// Start log tailing in background
|
|
268
|
+
const tailPromise = tailLog();
|
|
269
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
270
|
+
unityProcess.on('exit', (code) => {
|
|
271
|
+
setTimeout(() => {
|
|
272
|
+
logEnded = true;
|
|
273
|
+
resolve(code ?? 1);
|
|
274
|
+
}, timeout);
|
|
275
|
+
});
|
|
276
|
+
unityProcess.on('error', (error) => {
|
|
277
|
+
setTimeout(() => {
|
|
278
|
+
logEnded = true;
|
|
279
|
+
reject(error);
|
|
280
|
+
}, timeout);
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
// Wait for log tailing to finish
|
|
284
|
+
await tailPromise;
|
|
285
|
+
// Wait for log file to be unlocked
|
|
286
|
+
const start = Date.now();
|
|
287
|
+
let fileLocked = true;
|
|
288
|
+
while (fileLocked && Date.now() - start < timeout) {
|
|
289
|
+
try {
|
|
290
|
+
if (fs.existsSync(logPath)) {
|
|
291
|
+
const fd = fs.openSync(logPath, 'r+');
|
|
292
|
+
fs.closeSync(fd);
|
|
293
|
+
fileLocked = false;
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
fileLocked = false;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
fileLocked = true;
|
|
301
|
+
await new Promise(r => setTimeout(r, logPollingInterval));
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return exitCode;
|
|
305
|
+
}
|
|
306
|
+
async tryKillEditorProcess() {
|
|
307
|
+
if (this.procInfo) {
|
|
308
|
+
await (0, utilities_1.tryKillProcess)(this.procInfo);
|
|
309
|
+
await (0, utilities_1.killChildProcesses)(this.procInfo);
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
this.logger.debug('No Unity process info available to kill.');
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
static GetEditorRootPath(editorPath) {
|
|
316
|
+
let editorRootPath = editorPath;
|
|
317
|
+
switch (process.platform) {
|
|
318
|
+
case 'darwin':
|
|
319
|
+
editorRootPath = path.join(editorPath, '../../../../');
|
|
320
|
+
break;
|
|
321
|
+
case 'linux':
|
|
322
|
+
editorRootPath = path.join(editorPath, '../../');
|
|
323
|
+
break;
|
|
324
|
+
case 'win32':
|
|
325
|
+
editorRootPath = path.join(editorPath, '../../');
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
fs.accessSync(editorRootPath, fs.constants.R_OK);
|
|
329
|
+
return editorRootPath;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
exports.UnityEditor = UnityEditor;
|
|
333
|
+
//# sourceMappingURL=unity-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unity-editor.js","sourceRoot":"","sources":["../src/unity-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ExecOptions } from './utilities';
|
|
2
|
+
import { UnityVersion } from './unity-version';
|
|
3
|
+
export declare class UnityHub {
|
|
4
|
+
executable: string;
|
|
5
|
+
rootDirectory: string;
|
|
6
|
+
editorInstallationDirectory: string;
|
|
7
|
+
editorFileExtension: string;
|
|
8
|
+
private logger;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Executes the Unity Hub command with the specified arguments.
|
|
12
|
+
* @param args Arguments to pass to the Unity Hub executable.
|
|
13
|
+
* @param silent If true, suppresses output logging.
|
|
14
|
+
* @returns The output from the command.
|
|
15
|
+
*/
|
|
16
|
+
Exec(args: string[], options?: ExecOptions): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Prints the installed Unity Hub version.
|
|
19
|
+
*/
|
|
20
|
+
Version(): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Installs or updates the Unity Hub.
|
|
23
|
+
* If the Unity Hub is already installed, it will be updated to the latest version.
|
|
24
|
+
*/
|
|
25
|
+
Install(): Promise<string>;
|
|
26
|
+
private installHub;
|
|
27
|
+
private getInstalledHubVersion;
|
|
28
|
+
private getLatestHubVersion;
|
|
29
|
+
/**
|
|
30
|
+
* Returns the path where the Unity editors will be installed.
|
|
31
|
+
* @returns {Promise<string>} The install path.
|
|
32
|
+
*/
|
|
33
|
+
GetInstallPath(): Promise<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Sets the path where Unity editors will be installed.
|
|
36
|
+
* @param installPath The path to set.
|
|
37
|
+
*/
|
|
38
|
+
SetInstallPath(installPath: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Locate and associate an installed editor from a stipulated path.
|
|
41
|
+
* @param editorPath
|
|
42
|
+
*/
|
|
43
|
+
AddEditor(editorPath: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Attempts to find or install the specified Unity Editor version with the requested modules.
|
|
46
|
+
* @param unityVersion The Unity version to find or install.
|
|
47
|
+
* @param modules The modules to install alongside the editor.
|
|
48
|
+
* @returns The path to the Unity Editor executable.
|
|
49
|
+
*/
|
|
50
|
+
GetEditor(unityVersion: UnityVersion, modules: string[]): Promise<string>;
|
|
51
|
+
/**
|
|
52
|
+
* Lists the installed Unity Editors.
|
|
53
|
+
* @returns A list of installed Unity Editor versions and their paths.
|
|
54
|
+
*/
|
|
55
|
+
ListInstalledEditors(): Promise<string[]>;
|
|
56
|
+
private checkInstalledEditors;
|
|
57
|
+
private getLatestHubReleases;
|
|
58
|
+
/**
|
|
59
|
+
* Patches the Bee Backend for Unity Linux Editor.
|
|
60
|
+
* https://discussions.unity.com/t/linux-editor-stuck-on-loading-because-of-bee-backend-w-workaround/854480
|
|
61
|
+
* @param editorPath The path to the Unity Editor executable.
|
|
62
|
+
*/
|
|
63
|
+
private patchBeeBackend;
|
|
64
|
+
private getEditorReleaseInfo;
|
|
65
|
+
private fallbackVersionLookup;
|
|
66
|
+
private checkEditorModules;
|
|
67
|
+
private getModulesContent;
|
|
68
|
+
private installUnity;
|
|
69
|
+
private installUnity4x;
|
|
70
|
+
static GetPlatformTargetModuleMap(): {
|
|
71
|
+
[key: string]: string;
|
|
72
|
+
};
|
|
73
|
+
}
|