Skip to content

やりたいことの整理 #19

@sthairno

Description

@sthairno

対象にしたい人

GUIを実装したいOpenSiv3D(旧Siv3Dではない)のユーザー

参考:https://siv3d.github.io/ja-jp/#siv3d-%E3%81%AE%E7%94%A8%E9%80%94

Web系は触れたことがあるけどSiv3D,C++未経験の人 (優先度低め)

  • 個人のスキルが大きく分かれる部活動,サークルの中では、共同でSiv3Dの開発をしようとするとC++を使える人だけが開発に参加できるという状況が生まれる
  • Webの人でもデザインできる、馴染みのあるHTMLを使えるような環境がほしい

自分自身 (優先度もっと低め)

  • ロマン
  • 実装したい欲を満たす
  • Reactの勉強
  • OpenSiv3Dでプレゼンする夢を見たい
  • パワポよりもインタラクティブでかっこいい見た目の画面が作れそう✨️

課題

  • 凝ったレイアウトが作りづらい
    • 現状は座標直打ちで、横に並べるなどの操作は難しい
      • フォントの場合:font(U"aaa").region()でサイズ取得→font(U"aaa").draw()で描画→位置を格納して次の要素を描画
  • 実装コストの問題
  • 完成度の問題
    • 前の項目と関連して、作品のコアとなる部分の実装やUXの調整に集中しづらい
    • 悪い意味で「Siv3Dらしい」のっぺりとした見た目のUIになる
    • 高専プロコンの自由課題部門では完成度が評価に影響する
  • カスタマイズ性の低さ
    • SimpleGUIは色や大きさなどの細かいカスタマイズができない

やりたいこと

Yogaを使ったレイアウトシステム (90%完了)

  • レイアウトのやりたいことはだいたい揃っている
    • 横に引き伸ばす
    • 右上に固定
    • 縦横に並べて配置
    • 間隔の調整
  • HTMLのdisplay: flexと同じ仕組み
    • Webと同じ画面が作れる→連携がしやすくなる
    • Web系の人にも馴染みがある
  • React NativeやUnityにも採用されている

Webデザイナーの実装 (60%完了)

Siv3Dを知っているがWebは知らない人向け、もしくはどちらも知らない人向け

#6

GUIシステムの開発 (0%完了)

  • イベントシステムや表示順の制御などを実装する
  • 見た目をカスタマイズ可能なUIコンポーネントの実装
    • デフォルトの見た目は用意する (SimpleGUIぽい配色にする予定)
    • draw関数を好きに置き換えられるようにする
      • ボタンであれば押し込み状態などを共有し、更新ロジックはシステム側で、状態の描画はユーザー関数でできるように
        • OpenSiv3Dはすでに描画に関するAPIはかなり充実しているため、そこまでカバーする必要はない
      • ゲームやハッカソンなど、テーマに沿ったデザインにできる (実戦に耐えうる形にできる)
  • Main.cppに書く行数は最小限にする
    • void Main()
      {
          FlexLayout::Layout layout(...);
          
          // ユーザー描画関数の設定
          layout.setRenderer(U"Button", [](State state){
              // stateの描画
          });
      
          // 参照の取得
          Button btn = layout.findButtonById(U"btnid");
      
          while (System::Update())
          {
              layout.update();
              
              // ボタンクリック時の処理
              if (btn.clicked())
              {
                  Print << U"Clicked!";
              }
              
              layout.draw();
          }
      }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions