first commit
This commit is contained in:
commit
b365b56211
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"name": "bit/taskman_unity",
|
||||
"description": "taskman unity utils",
|
||||
"homepage": "https://git.bit5.ru/composer/taskman_unity",
|
||||
"require": {
|
||||
"php": ">=7.4"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": ["unity.inc.php"]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,161 @@
|
|||
<?php
|
||||
namespace taskman;
|
||||
use Exception;
|
||||
|
||||
task('unity', function()
|
||||
{
|
||||
$unity_path = guess_unity_app_dir();
|
||||
if(is_win())
|
||||
{
|
||||
$unity_app_path = "'$unity_path/Editor/Unity.exe'";
|
||||
run_background_proc($unity_app_path, ['-projectPath', '.']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$cmd = guess_unity_app_dir()."'Unity.app/Contents/MacOS/Unity' -projectPath . > /dev/null 2>&1&";
|
||||
system($cmd, $res);
|
||||
}
|
||||
});
|
||||
|
||||
task('unity_kill', function()
|
||||
{
|
||||
$proc_id = unity_find_proc_id();
|
||||
if($proc_id)
|
||||
{
|
||||
echo "Found Unity process '$proc_id', killing it...\n";
|
||||
system("kill -9 $proc_id");
|
||||
sleep(5);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "No Unity process found to kill\n";
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function unity_exec($func, $build_target = "", $quit = true, $batchmode = true)
|
||||
{
|
||||
global $GAME_ROOT;
|
||||
|
||||
$proj_path = normalize_path("$GAME_ROOT/");
|
||||
|
||||
$log_file = "$GAME_ROOT/build/unity.log";
|
||||
ensure_rm($log_file);
|
||||
|
||||
$pid_file = "$GAME_ROOT/build/unity.pid";
|
||||
|
||||
$username = getor('UNITY_ACCOUNT_USERNAME', null);
|
||||
$password = getor('UNITY_ACCOUNT_PASSWORD', null);
|
||||
|
||||
$shared_cmd = "-projectPath $proj_path -logFile $log_file "
|
||||
. ($batchmode ? "-batchmode" : "")
|
||||
. " -accept-apiupdate"
|
||||
. ($quit ? " -quit" : "")
|
||||
. ($build_target ? " -buildTarget $build_target" : "")
|
||||
. ($func != "" ? " -executeMethod $func" : "");
|
||||
|
||||
if($username !== null && $password !== null)
|
||||
$shared_cmd .= " -username \"$username\" -password \"$password\"";
|
||||
|
||||
$pid = unity_run_proc($shared_cmd);
|
||||
if(!$pid)
|
||||
throw new Exception("Error starting cmd: $shared_cmd");
|
||||
|
||||
while(!is_file($log_file))
|
||||
usleep(200000);
|
||||
|
||||
return array($log_file, $pid);
|
||||
}
|
||||
|
||||
function unity_batch_exec($func, $build_target = "", $notify = true)
|
||||
{
|
||||
global $GAME_ROOT;
|
||||
|
||||
try
|
||||
{
|
||||
list($log_file, $pid) = unity_exec($func, $build_target, /*$quit = */ true, /*$batchmode = */ true);
|
||||
|
||||
watch_running_process($pid, $log_file,
|
||||
array(
|
||||
'Exiting batchmode successfully'
|
||||
),
|
||||
array(
|
||||
'UnityException:',
|
||||
'Aborting batchmode due to failure',
|
||||
'Launching bug reporter',
|
||||
': error CS',
|
||||
'Unrecognized assets cannot be included in AssetBundles:'
|
||||
)
|
||||
);
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
function unity_run_proc($shared_cmd)
|
||||
{
|
||||
$app_dir = get('UNITY_APP_DIR');
|
||||
echo "Unity App dir: $app_dir\n";
|
||||
|
||||
if(is_win())
|
||||
{
|
||||
$unity_app_path = $app_dir . "Editor/Unity.exe";
|
||||
$cmd = "powershell.exe (Start-Process '$unity_app_path'-ArgumentList '$shared_cmd' -passthru).Id";
|
||||
}
|
||||
else
|
||||
{
|
||||
$cmd = "'$app_dir/Unity.app/Contents/MacOS/Unity' $shared_cmd > /dev/null & echo $!";
|
||||
}
|
||||
|
||||
exec($cmd, $out, $ret);
|
||||
if($ret !== 0)
|
||||
throw new Exception("Error starting Unity: $cmd ($ret)");
|
||||
return trim($out[0]);
|
||||
}
|
||||
|
||||
function unity_find_proc_id()
|
||||
{
|
||||
global $GAME_ROOT;
|
||||
|
||||
exec("ps aux | grep 'Unity' | grep -i 'projectpath' | grep -v grep", $out);
|
||||
foreach($out as $line)
|
||||
if(preg_match('~.*?\s+(\d+).*-projectpath\s+(.*?)\s+-~i', $line, $ms))
|
||||
if(strpos(realpath($ms[2]), realpath($GAME_ROOT)) === 0)
|
||||
return $ms[1];
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function guess_unity_app_dir()
|
||||
{
|
||||
global $GAME_ROOT;
|
||||
|
||||
if(getenv("UNITY_APP_DIR"))
|
||||
return getenv("UNITY_APP_DIR");
|
||||
|
||||
$path = "/Applications/Unity/";
|
||||
if(is_win())
|
||||
$path = getenv("ProgramFiles")."/Unity/";
|
||||
|
||||
$proj_version_file = $GAME_ROOT.'/unity/ProjectSettings/ProjectVersion.txt';
|
||||
if(is_file($proj_version_file))
|
||||
{
|
||||
list($_, $unity_version) = array_map('trim', explode(":", file($proj_version_file)[0]));
|
||||
if(is_dir("{$path}Hub/Editor/$unity_version/"))
|
||||
$path .= "Hub/Editor/$unity_version/";
|
||||
}
|
||||
return $path;
|
||||
}
|
||||
|
||||
function get_unity_dir()
|
||||
{
|
||||
$app_dir = get('UNITY_APP_DIR');
|
||||
|
||||
if(is_win())
|
||||
return "$app_dir/Editor/Data";
|
||||
else
|
||||
return "$app_dir/Unity.app/Contents/";
|
||||
}
|
||||
|
Loading…
Reference in New Issue