在Flask中加载Unity WebGL

3

我是一个完全的新手,对Web和Unity不了解。我试图做的是在我的Flask服务器中运行Unity WebGL构建。

以下是我的文件夹层次结构:

web\
    templates\
        Build\
            UnityLoader.js
            WebBuild.json
        TemplateData\
            style.css
            TemplateData.js
        index.html
    app.py

app.py有3个根路径,用于加载由index.html文件请求的所有js文件:

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生成的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响应消息。但是Unity游戏未加载,没有框只有空白。在Firefox控制台中没有显示任何内容。我猜想Build/WebBuild.json没有加载?有人知道问题出在哪里吗?
编辑: 当我从Flask服务器控制台加载页面时,提供一些额外的信息:
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 -
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:您可以硬编码任何路径,不仅限于静态文件夹,在我的情况下是我的根项目。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接