ゲーム開発チーム「丸ダイス」の開発ブログです! 公式サイトはこちら

【おしながき】ゲームマーケット2022秋

さかだちの街の開発が追い込みな丸ダイスです!

なんと、サークル丸ダイスとして初めてゲームマーケットに出ます!

スペースは

10/30(日)日-ア06

です!

1.「ウレスジアラスジ 〜 天才小説家に転生した私が考えた絶対売れるタイトルを発表します 〜」3000円

gamemarket.jp

それっぽいワードを組み合わせて、最強のクソ長あらすじタイトルを作るゲームです。

カオスすぎる面白タイトルが爆笑を誘う・・はずが、どう組み合わせても意外とありそうになってしまい微妙な失笑に包まれると話題のネタ系ボドゲです。

新作、初頒布ですよ! ほかのどこでも買えません!

以上です! では会場でお会いしましょう!

【おしながき】コミックマーケット100

こんにちは! 丸ダイスです!

場所は

8/13(土)1日目 西し-19a

です!

1.「さかだちの街」(C100体験版)100円

youtu.be

さかだちをして視点をひっくり返すことでぶら下がってることになっちゃう

製作中のさかだちパズルアクションです!

インディーゲームコネクト2022、東京ゲームダンジョンで展示した内容と大体同じで、序盤のワールドを体験出来るものです!

ダウンロードURLのついてポストカードを頒布します!

ほか既作

他では手に入らないディスク版ですが、今月中に販売されるSteam版、Switch版の翻訳やコントローラー対応はないです!

ファングッズだと思って頂ければ。


「さかだちの街」の完成版も翻訳済みSteam版が初出の可能性があり、「コミケでパッケージ版を初出」も段々過去のものになっていくのかもな・・

という思い。 冬コミも出るかどうか・・ちょっと考え中です。

【Unity】unityroomのゲーム中で動画を再生する方法【Video Player】

例えば、このアニメーションロゴ動画をゲームの起動時に再生したい! www.youtube.com

そのやり方です。WebGL上でUnity の Video Playerを使うのは困難ですが、AWSを使ったら出来ました。

※動画の利用は出来ましたが、問題があって起動時にロゴ動画は表示してません(最後まで読むとわかります)

1. AWSにパブリックアクセス可能な動画を用意

WebGLから再生するには、unityroomからアクセス出来る場所に動画を置いておく必要があります。

1.1. AWSのアカウント登録

AWSAmazon Web Service)は、IT業界では超有名なサーバーサービスです。

メールアドレス、クレカ等を用意してこちらのURLからポチポチ押していれば簡単にアカウントが作れます。

1.2. アカウントのブロックパブリックアクセスを設定

「このアカウントのブロックパブリックアクセス設定」→「編集」

全チェックを外して「変更の保存」 ※セキュリティがゆるいので、AWSを他用途でも使うなら適宜見直して下さい

1.3. S3ストレージにバケットを作成

バケット(ファイルを入れるフォルダのようなもの)を作成します。

AWSのコンソールから サービス/ストレージ/S3 を選択。

バケットを作成」をクリック。

バケットに被りのない適当な名前を付けます。

画像のようにチェックを設定し、全パブリックアクセスを有効にします(放置するとマズいのでこれ以後は最後まで進んで下さい)

バケットを作成」する

1.4. 動画を置く

作成したバケットをクリックして

アップロードを選択。

アップロード画面に動画をドラッグ&ドロップして、上げるファイルを確認して「アップロード」

無事にアップロード完了。「閉じる」。

1.5. 動画URLを取得

オブジェクト(ファイル)のリンクをクリック

動画のURLをコピー。Unity上で使うので、どこかにメモして下さい。ブラウザに貼ればそのまま表示出来るはず。

1.6. バケットポリシー設定

バケットの「アクセス許可」から・・

バケットポリシーの「編集」

以下の内容を入れて「変更の保存」。 バケット内のファイルが読み取れるようにします。 (marudice-test-test はバケット名で置き換えて下さい)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::marudice-test-test/*"
        }
    ]
}

1.7. CORSの設定

多分これが一番大事です。 CORSというのは、ざっくり言うとウェブサイトAのファイルをウェブサイトBが勝手に表示するのを禁止するルールです。 ウェブサイトAに「ウェブサイトBは友達だから表示していいよ」と書いてある場合のみ表示でき、その設定をしています。

CORSの「編集」から・・

以下のコードを貼り付けて「変更の保存」します。

[
    {
        "AllowedHeaders": [],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "https://unityroom.com"
        ],
        "ExposeHeaders": []
    },
    {
        "AllowedHeaders": [],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "https://object-storage.tyo1.conoha.io"
        ],
        "ExposeHeaders": []
    }
]

※CORSの設定についてはこちらを参考にしました。 S3でCORSの設定を行う | AutomationTechブログ

1.8. 不要なパブリックアクセスを閉じる

ゆるゆるガバガバな設定になってるので、閉じます。

ブロックパブリックアクセスの「編集」から

上3つをチェックして「変更の保存」

2. VideoPlayerで動画を再生

2.1. Video Playerの設定(超シンプル版)

適当なGameObjectにVideoPlayerをAddComponentから追加して、 Sourceを「URL」に、Cameraにシーン内のカメラをアタッチします

※RenderTextureを使ってCanvas RawImageに描画なども出来ます。詳しくはこちら や、Unity VideoPlayerで検索ゥ!!

2.2. スクリプトから再生

以下のコードで再生します。 ゲーム本体と別のサーバーに動画があるのでネットワーク状況で読み込み失敗があり、エラー処理は必須です。

    public UnityEngine.Video.VideoPlayer video;
    void Start()
    {
        video.url = (動画ファイルのURL);
        video.prepareCompleted += PrepareCompleted;
        video.errorReceived += ErrorReceived;
    }

    // エラー発生時に呼ばれる
    private void ErrorReceived(UnityEngine.Video.VideoPlayer vp, string message)
    {
        Debug.LogWarning($"動画の読み込みに失敗しました. message:{message}");
        vp.errorReceived -= ErrorReceived;
        vp.prepareCompleted -= PrepareCompleted;
        // エラー時処理
    }

    // 動画の読み込みが完了したら呼ばれる
    void PrepareCompleted(UnityEngine.Video.VideoPlayer vp)
    {
        Debug.Log("動画ロード完了");
        vp.prepareCompleted -= PrepareCompleted;
        vp.Play();
    }

以上です!!

先週作ったゲームに、タイトル画面で「E+R+U+I」を同時押しするとロゴ動画が再生されるバックドアを仕込んであるので、動作確認出来ます!

フラッグマニア エクストリーム パズルxクイズ | フリーゲーム投稿サイト unityroom

3. 起動時に即動画を再生すると起きる問題

この方法で、よく話題に上がるCORSの問題も解決しunityroom上で動画は再生出来ましたが、実は使ってません。

どうも、WebGLのVideo Playerは埋め込みWebGLが非アクティブな状態ではPlay()を読んでも動画が進まない問題(仕様?)があるようで、 「ゲームの起動時に動画を再生」とすると、「ページ読み込み後にWebGL画面をクリックしない限り動画が再生されない」という挙動になりました。

Run in backgroundなども試しましたが、解決不能なようなので諦めました

3.1. え、じゃあどうやったの?起動時にロゴ動画出てるじゃん?

Adobe After Effects から Unity Animation に気合で目コピしました!

元々のロゴアニメ動画も1時間くらいで作ったので、1時間で終わりました。

Video Playerの技術検証と調査は2日くらいかかってます・・・。つら・・・。

【Visual Studio】複数箇所の同時編集を改行付きでやる方法

Alt+Shiftを押しながら上下キーを押すと、複数行に同じテキストを入力出来ることは有名ですが

複数行選択のまま改行をすると、上下左右キーでカーソル位置を変えても複数行選択が維持されます

なので、動画のように似たような関数をまとめて作るみたいな時に活用できます。

youtu.be

自動フォーマットで選択箇所がおかしくなったりもするのでややクセがありますが、うまく使えば役に立ちそうです。

【Unity】タイルが呪われることがある【Tilemap】

タイルパレット上のタイルが呪われる(?)ことがあるようです。

f:id:marudice:20220227183610p:plain

こちらは開発中のゲームのタイルパレットです。 パレットの画像の位置は、TileがBridge4なのにSpriteがPlayerInvになっていて、Bridge4タイルの本来のSpriteではないです。 似た現象として、TileがnullでSpriteだけ残ったりもします。

どうやら、なにかのきっかけで2つのタイルごとに組み合わせで呪われるようで、このケースではBridge4とPlayerInvの組が呪われています。 一度タイルがこの状態になると、呪われたタイルをA, Bとして

  • (TileがNonなので)パレット上でSpriteが表示されているにも関わらず消しゴムでは削除出来ない
  • パレット上でタイルAを置くと、もう一方のタイルBもタイルAに切り替わる
  • パレット上でタイルAを消すと、タイルBも消える

といったことが起きてしまいます。 パレット上からタイルを消してもダメなようでタイルを作り直すくらいしか解決策がなく、非常にやっかいです。

発生のきっかけは、パレットへのタイル追加がバージョン管理上で衝突した後に起きているような雰囲気です。

呪われたTileやSpriteのGUIDをパレット上で検索すると参照カウンタの配列にヒットするので、参照カウンタが壊れているのかもしれません。

【Unity】タイルパレットでセルサイズをはみ出したスプライトを使う方法【Tilemap】

タイルマップの基本的な使い方についてはこのあたりが参考になります。 【Unity】タイルマップの基本的な使い方 - コガネブログ

TilePaletteにセルのサイズより大きいスプライトを配置すると、次の動画のように突然パレットが壊れることがあります。

youtu.be

これはバグではなく、Palette SettingsのCell Sizingが「Automatic」になっていることで起きています。デフォルト設定なので、知らずに混乱する人も多いのでは(参考:タイルパレットの作成 - Unity マニュアル

なので、次の画像のように「Manual」に変えてやれば

f:id:marudice:20220214222110p:plain

セルよりも大きいタイルも問題なく配置出来ます。

youtu.be

大きい飾り系の絵は、区切って複数タイルとして配置も出来ますが、大きいまま1タイルとして配置出来た方が楽で、オススメです。

youtu.be

また、ピボット位置が底面から半セル分上にあると、タイルを地面にくっつけて置けて便利です。

Sprite Editor を開いて、Pivot Unit Modeを Pixels にして・・

f:id:marudice:20220214223626p:plain

Custom pivotのYに Pixels per unit の半分(ここでは32 なので 16 )を入れましょう。

f:id:marudice:20220214225059p:plain

最後の動画のように、どんなサイズのスプライトも地面にぴったりくっついてくれます!

Beautify 2 を2Dドット絵ゲームに使う時、Sharpenに要注意

ついさっきこんな記事を書いておいてアレなのですが、

marudice.hatenablog.jp

  • 2Dドット絵ゲーで
  • Beautify 2 を使って
  • Sun Flare を使う

時限定のハマりポイントがあったので紹介します!(元記事に備考として書くには長いので分けてます)

元記事のようにSun Flareで光をTilemap地形で遮る表現をする時、標準のSpriteシェーダでは不可能です。

ライティングを受ける不透明シェーダを使うことでTilemapでSun Flareを遮ることが出来ます。

例えばShaderGraphなら画像のような設定で可能ですが、こうすると・・

f:id:marudice:20220201185306p:plain

なぜか画面がガビガビになります。

f:id:marudice:20220201185440p:plain

拡大して問題ない時(右側)と比較してみると、元のドット絵には書かれてない境界線が現れています。

f:id:marudice:20220201185643p:plain

どうやらこれはSharpenというBeautifyのポストプロセスが原因のようでした。

画像のように、SharpenのIntensityを0にしてやることで治ります。

f:id:marudice:20220201185909p:plain

Sharpenは標準で有効になっているばかりか、 不思議なことに BeautifyをレンダラーFeatureに追加した状態だと、カメラのPostProcessが有効なだけで起きてしまうようです。 (PostProcessにBeautifyを追加していなくても)

低解像度の絵作りを行うゲームでBeautify 2 を使う際には要注意です。