我绝对是Web和Unity的新手。我想做的是在Flask服务器中运行Unity WebGL构建。
这是我的文件夹层次结构:
web\
templates\
Build\
UnityLoader.js
WebBuild.json
TemplateData\
style.css
TemplateData.js
index.html
app.py
app.py
具有3个根,以加载js
要求的所有index.html
文件:
app = Flask(__name__, static_url_path='/templates')
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
@app.route("/")
def index():
return render_template("index.html")
@app.route('/templates/Build/<path:path>')
def send_Buildjs(path):
return send_from_directory('templates/Build', path)
@app.route('/templates/TemplateData/<path:path>')
def send_Templatejs(path):
return send_from_directory('templates/TemplateData', path)
if __name__ == "__main__":
app.run(port=4555, debug=True)
index.html
是Unity for WebGL应用程序默认生成的文件,做了一些细微修改:
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unity WebGL Player | VisualNN</title>
<link rel="shortcut icon" href="{{ url_for('static', filename='TemplateData/favicon.ico') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='TemplateData/style.css') }}">
<script src="{{ url_for('static', filename='TemplateData/UnityProgress.js') }}"></script>
<script src="{{ url_for('static', filename='Build/UnityLoader.js') }}"></script>
<script>
var gameInstance = UnityLoader.instantiate("gameContainer", "{{ url_for('static', filename='Build/WebBuild.json') }}", {onProgress: UnityProgress});
</script>
</head>
<body>
<div class="webgl-content">
<div id="unityContainer" style="width: 960px; height: 600px"></div>
<div class="footer">
<div class="webgl-logo"></div>
<div class="fullscreen" onclick="unityInstance.SetFullscreen(1)"></div>
<div class="title">VisualNN</div>
</div>
</div>
</body>
</html>
在我的Firefox浏览器图标已加载中,所有js
文件也已加载。我收到图标和js
文件的202和304响应消息。
但是团结游戏没有加载,没有盒子就空了。 Firefox控制台中没有任何显示。
我猜测Build/WebBuild.json
未加载?有人知道这是什么问题吗?
编辑
当我从Flask Server控制台加载页面时,一些额外的信息:
127.0.0.1 - - [10/May/2019 18:34:55] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [10/May/2019 18:34:55] "GET /templates/TemplateData/style.css HTTP/1.1" 304 -
127.0.0.1 - - [10/May/2019 18:34:55] "GET /templates/TemplateData/UnityProgress.js HTTP/1.1" 304 -
127.0.0.1 - - [10/May/2019 18:34:55] "GET /templates/Build/UnityLoader.js HTTP/1.1" 304 -
127.0.0.1 - - [10/May/2019 18:34:55] "GET /templates/TemplateData/webgl-logo.png HTTP/1.1" 304 -
127.0.0.1 - - [10/May/2019 18:34:55] "GET /templates/TemplateData/fullscreen.png HTTP/1.1" 304 -
答案 0 :(得分:0)
我将分享我在Reddit上找到的答案
https://www.reddit.com/r/flask/comments/ab7i9d/how_to_make_the_unity_webgl_build_work_with_flask/
答案 1 :(得分:0)
这是最简单的解决方案,您只需要在app.py上更改静态文件夹和模板文件夹路径,下面是一个示例:
`app = Flask(__name__, static_folder="./", template_folder="./")
@app.route('/')
def home():
return render_template("index.html"), 200
if __name__ == "__main__":
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port = port)`
有了这个,您不需要每次发布时都对index.html进行任何更改。 P.D:您可以硬编码所需的任何路径,而不仅仅是静态文件夹,在我的情况下,这是我的根项目