在Flask中加载Unity WebGL

时间:2019-05-10 16:29:38

标签: python html flask unity-webgl

我绝对是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 -

2 个答案:

答案 0 :(得分:0)

答案 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