Stingray 1.8リリース

前回はまったところで萎えて放置してました。すみません。

http://help.autodesk.com/view/Stingray/ENU/?guid=__stingray_help_release_notes_readme_1_8_html

困ってるところは解決してなさそうorz 気になったところ。

  • WebAssembly対応
  • スプラッシュスクリーンの追加が可能になったらしい。
  • HoloLensで動かない不具合が修正されたらしい(誰か動かしてみて)
  • plugin開発の情報が公開(これ今回のリリースと関係あったっけ?)。C++とJSを組み合わせるようだ。 github.com NativeCode不要ならJSだけで組めそうなようにみえる??

もうしばらく他の勉強して様子見かな… 日本語版リリースノート来たら更新するかも。

広告を非表示にする

Luaコンポーネントから他のコンポーネントを参照したい

仕事のほうが忙しく、久々の記事なのですが…
うまくいっておらず、途中経過のみ掲載。

Luaで作ったEntityComponentから、他のComponentを参照するため
以下のようなコードを書いたんだけれど、numがずっと0
(Test2Behaviourを付けたEntityは配置済み)

local query_cache = {}
-- Called once each frame. Optional.
function TestBehavior.update(world, dt)
    local script_component = stingray.EntityManager.script_component(world)--SimpleProject.script_component
    if script_component == nil then
        return
    end
    local world_entity_data = world_data[world]
    for entity, entity_data in pairs(world_entity_data) do
       local com, num = script_component:instances_with_script(entity, "Test2Behaviour", query_cache)
       if num ~= 0 then
           print("AA"..num)
       end
       local ents = script_component:entities_with_script("Test2Behaviour")

        for script_component_instance, script_component_data in pairs(entity_data) do

            -- TODO: Do your component's update logic here.
        end
    end
end

script_component:instances_with_script

一応SimpleProjectのscript_componentを引いて使ってみたりもしたけど結果は変わらず。
Component間通信ができないと色々辛いのでなんとかしたい。

ちなみにUnity3dのMonoBehaviourと違って、全てstatic classやsingletonで書くようなイメージ。

このスクリプトを記述する上での留意点は、すべてのゲーム ワールドでモジュールが関連付けられている「すべての」エンティティを処理する必要があることです。このスクリプトで各エンティティに対して定義するコンポーネント オブジェクトの個別のコピーはなく、ゲーム内にはこの Lua オブジェクトのインスタンスは 1 つ だけあります

引用元:http://help.autodesk.com/view/Stingray/JPN/?guid=__stingray_help_using_entities_script_behavior_html

参考:ScriptComponentのドキュメント
http://help.autodesk.com/view/Stingray/ENU/?guid=__lua_ref_obj_stingray_ScriptComponent_html

Scaleform StudioでUIを作って表示する

プロジェクト作成

適当なディレクトリにAssetBrowserからScaleform Studio Projectを作成

f:id:eims:20170216230555p:plain:w400

ボタンを一個配置する

f:id:eims:20170216230712p:plain:w400

boot.packageに登録する

content/UI/TestUI.s2dの場合以下のように登録する

s2d = [
    "content/UI/TestUI"
]

マウスカーソルを表示する設定を仕込む

script/lua/project.lua の Project.on_level_load_pre_flow関数に以下のコードを追記。

stingray.Window.set_mouse_focus(true)
stingray.Window.set_clip_cursor(true)
stingray.Window.set_show_cursor(true)    

TestUI.s2d/ButtonWidgets/Button_handler.luaを編集する 22行目からのコードを以下のように修正

clicked = function()
    print(actorName .. " button clicked")

    -- The code below gives an example of how to dispatch a custom event from this event handler function.

    local evt = { eventId = scaleform.EventTypes.Custom,
                  name = "TestButtonClicked",
                  data = "osaretayo" }
    scaleform.Stage.dispatch_event(evt)


end

LevelFlowに表示コードを仕込んでみる

以下の画像は content/UI/TestUI.s2d content/UI/TestUI.s2d/TestUI.s2dproj の場合の例。 実行してボタンを押すと、"osaretayo"とログに表示されるはず。 f:id:eims:20170216234252p:plain:w400
画像の通り、イベントが発行されたかどうか自分で確認するロジックにする必要があるようだ。

今回の参考記事 マウスカーソル表示の方法
forums.autodesk.com

公式ドキュメント
http://help.autodesk.com/view/Stingray/ENU/?guid=__stingray_help_creating_uis_using_flow_html

Wwiseを使ってBGMを再生する

気分転換にサウンドの演習を。

参考にしたチュートリアル動画ではSEの設定だったが、 なんとなくBGMの設定をした。

下準備

wwiseプロジェクトをStingrayのメニューから作成し、
メニューからwwiseのエディタを起動する
f:id:eims:20170214234730p:plain:w200
f:id:eims:20170214234738p:plain:w200

曲を取り込んでみる

Musicを右クリックして、Import Audio Filesを選択
f:id:eims:20170214235018p:plain:w400
Add Filesからファイルを選択。(mp3はwavにする必要あり)
f:id:eims:20170214235221p:plain:w400
曲をダブルクリックしてProperty Editorを表示、無限ループの設定をOnにする。
f:id:eims:20170215014143p:plain:w400

再生イベントの作成

Eventsタブに切り替え、Musicを右クリックしてPlayイベントを作成する
f:id:eims:20170215010407p:plain:w400
Audioタブから曲をドラッグ&ドロップする
f:id:eims:20170215010523p:plain:w400

出力する

サウンドバンクを開く
f:id:eims:20170215010641p:plain:w400
soundbank、platform、languageの三項目を選択するとGenerateボタンが押せるようになる。

Generateボタンを押す。

組み込む

boot.packageに以下の記述が無い場合は追記する。

wwise_dep = [
    "content/audio/*"
]

適当なLevelのLevel Flowを開く。 f:id:eims:20170215012955p:plain:w400

LevelLoadedノードからWwiseTrigerEventノードへ接続し、
作成したイベントの名前を入力する。
f:id:eims:20170215013117p:plain:w400
LevelをテストプレイするとBGMが流れる。

参考チュートリアル動画 area.autodesk.jp

一応スクショにファイル名が入ってしまっているので練習用に使った素材も記載しておく
wavestopmusic.itch.io

4K環境だとScaleform Studioのレイアウトが壊れる...

FHDに設定さげたもの
f:id:eims:20170212181921p:plain:w400

4K設定
f:id:eims:20170212181925p:plain:w400

Viewport上のクリック位置もずれてる。


とりあえずの対策

ScaleformStudio.exeのあるディレクトリに 以下の内容のファイルをqt.confという名前で保存

[Platforms]
WindowsArguments = dpiawareness=0

f:id:eims:20170212182734p:plain:w400
ボケボケだが、使えないよりはマシか。

元ネタはCryEngineのエディタのUIが4K環境で豆粒になってしまったとき、一時お世話になっていた設定。 www.reddit.com/r/cryengine/comments/4az4lu/cryengine_v_4k_display_fix
(はてなブログではredditの記事リンクが貼れないようになっているらしいので、非リンクでurlを記載)

voya.hatenablog.com

VSCode用のファイル非表示設定

なんでもかんでも左側のエクスプローラーに並んでいてゴチャゴチャしているので、
とりあえず目についた順にvscode上で弄らないと思うものを隠した。

// .vscode/settings.json
{
  "files.exclude": {
    "**/*.flow": true,
    "**/*.flow_nodes": true,
    "**/*.flow_editor": true,
    "**/*.package": true,
    "**/*.png": true,
    "**/*.PNG": true,
    "**/*.dds": true,
    "**/*.DDS": true,
    "**/*.texture": true,
    "**/*.wwise_bank": true,
    "**/*.wwise_dep": true,
    "**/*.wwise_bank_metadata": true,
    "**/*.wwise_metadata": true,

    "**/*.unit": true,
    "**/*.unit_anim": true,
    "**/*.material": true,
    "**/*.anim_clip": true,
    "**/*.anim_controller": true,
    "**/*.anim_skeleton": true,
    "**/*.blend_shapes": true,
    "**/*.fbx": true,
    "**/*.FBX": true,
    "**/*.dcc_asset": true,
    "**/*.import_options": true,
    "**/*.mlt": true,
    "**/*.entity": true,
    "**/*.level": true,
    "**/*.backup": true,
    "**/*.baked_lighting": true,
    "**/*.s2dactor": true,
    "**/*.s2dproj": true,
    "**/*.s2dscene": true,
    "**/*.ttf": true,

    "**/*.particle_editor": true,
    "**/*.particles": true,
    "**/*.physics": true,
    "**/*.physics_properties": true,
    "*_data/": true
  }
}

LevelViewportの軽量化

現在使っているマシンが4KノートなのでLevelViewportがすごく重い。
StingrayにUE4やCryEngineのようなレンダリング品質設定は無いので、 ビューポートのフレームレートを落とす。

f:id:eims:20170211175119p:plain:w400 f:id:eims:20170211175131p:plain:w400

高速アクションを作ろうといじっているわけではないのでこれで我慢。

広告を非表示にする