我正在尝试自动化某些Unity3D进程,以便可以从PHP脚本中调用它。
我已经创建了一个shell脚本,调用一些UNITY命令行来创建项目和执行方法,如果我在终端中使用它,工作正常。
问题是当我将它用于PHP脚本时:
- 我正在使用shell_exec
命令来执行我的脚本,并且所有shell方法都有效(ls,mkdir,echo)但是当我调用应用程序时没有任何事情发生。
我正在阅读这是apache的权限问题,但几个小时后我仍然没有找到解决方案。
我在我的mac(Sierra)中安装了一个服务器,启用了apache和PHP 5进行测试。
此致 加布里埃尔
编辑1
我在这里添加我的代码
如果我在终端中执行它,这是我的shell_script
。
#!/bin/bash
UNITY_EXEC=/Applications/Unity_5.6.1f1/Unity.app/Contents/MacOS/Unity
if [ -z "$2" ]; then echo "You must provide a path to the bundle assets and a path to the resulting bundle."; exit 1; fi
export UNITY_ASSET_BUNDLE_PATH=${2}
CREATION_TIME=`date +%s`
ASSET_BUNDLE_PROJECT_DIR=/tmp/AssetBundle-${CREATION_TIME}
echo "Creating temporary project.";
${UNITY_EXEC} -batchmode -quit -createProject ${ASSET_BUNDLE_PROJECT_DIR};
echo "Copying resources from source folder to assets folder.";
cd $1; cp -r . ${ASSET_BUNDLE_PROJECT_DIR}/Assets;
echo "Finding assets.";
cd ${ASSET_BUNDLE_PROJECT_DIR};
ASSETS_TO_BUNDLE=`find Assets -type f -not -name *.meta -not -name .DS_Store -not -name AssetsBundler.cs | sed 's/^.\///g' | sed 's/^/assetPathsList.Add("/g' | sed 's/$/");/g'`
mkdir ${ASSET_BUNDLE_PROJECT_DIR}/Assets/Editor/;
cat << EOT >> ${ASSET_BUNDLE_PROJECT_DIR}/Assets/Editor/AssetsBundler.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
public class AssetsBundler{
public static void Bundle(){
List<string> assetPathsList = new List<string>();
${ASSETS_TO_BUNDLE}
ArrayList assetList = new ArrayList();
foreach(string assetPath in assetPathsList)
{
UnityEngine.Object[] assets = AssetDatabase.LoadAllAssetsAtPath(assetPath);
foreach(UnityEngine.Object asset in assets)
{
assetList.Add(asset);
}
}
UnityEngine.Object[] allAssets = (UnityEngine.Object[]) assetList.ToArray(typeof(UnityEngine.Object));
BuildPipeline.BuildAssetBundle(allAssets[0], allAssets, "${UNITY_ASSET_BUNDLE_PATH}", BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, BuildTarget.Android);
}
}
EOT
echo "Building the bundle.";
${UNITY_EXEC} -batchmode -quit -projectProject ${ASSET_BUNDLE_PROJECT_DIR} -executeMethod AssetsBundler.Bundle;
这是我的PHP_script
<?php
$old_path = getcwd();
chdir('./AssetBundleBuilder/');
$output = shell_exec('./AssetBundleBuilder ./Bundlify ./result.unity3d');
chdir($old_path);
echo $output;
?>
如果我从firefox执行我的PHP脚本,我会收到所有echo
消息作为输出,以便告诉我该脚本正在运行。问题是UNITY呼叫不起作用。
答案 0 :(得分:0)
我会回应自己。
最后我得到了一个使用套接字的解决方案。我在python中创建了一个服务器套接字,在每个连接中调用bash脚本,我的客户端套接字在php中,这是我从浏览器调用的文件。
谢谢! 加布里埃尔