color×2

自分なりに学んだ事を記すところ

unimgpicker-plusでプレイヤーにとっての課題を作れるようにする(その3)

その2の続きです。

自作課題のリサイズ

現状、表示はこんな感じです。

最悪です。嫌いな物がでかでかと主張しています。
(自分が嫌いな物を画像の選定基準としていたため)

これらの画像を同じサイズにしていきます。

 

まずは基準にする画像を決めます。
60×60で敵の画像を作っているので同じサイズの物を基準にします。
ライフ用の画像heartを複製してtask4として比較します。

ここで何日か止まっていたんですが、ついに方法を見つけました!!!!

unity公式のSprite Rendererの説明を読んでいるとこんな事が書いてありました。

Sprite Renderer - Unity マニュアル

Size (‘Sliced’ or ‘Tiled’)

スプライトの新しい Width と Height を入力して、正しく 9 スライスのスプライトをスケールします。

数字入れるとサイズ固定出来そうな書き方してたので使ってみます。

Draw ModeはSlicedに、サイズはWidth, Heightどちらも0.6にしています。

これでプレイしてみると…

おお!!!同じサイズになりました!主張が激しかったピーマンたちも大人しくしています。

ちなみに横長の画像だとどうなるのか??

『細長いヘビが細長いチュロスを食べているニッチなイラスト』らしいです。

チュロスを食べるヘビ | イラストクラウド

細い画像だと分かりにくくなっちゃいますね。部分的に切り抜くのではなく、指定のサイズに合うように押し込まれる感じみたいです。

トリミングできるようにするのは大変そうだったので今はやめておこうと思います。

ゲーム内に自作課題登場

これは簡単です。
Mainシーン(実際にゲームをするシーン)に移動して、敵のプレハブの設定を変えます。

同じようにSlicedにしてサイズを固定します。値は変更しません。

そして、ゲーム内で敵を生成・動かしていくスクリプト『EnemyParade.cs』があるのでそこに追記していきます。内容はTaskMuseumで書いたものとほぼ同じです。

using System.IO; //画像ファイル検索用

public class EnemyParade : MonoBehaviour
{
    string[] yourimages; //自作課題の画像ファイルのパスを格納

    //敵の配置,見た目変更
    private IEnumerator EnemyParadeReady()
    {
        //任意の場所で自作課題の画像を追加
        YourEnemyAdd();
    }

    //自作課題の画像をリストに追加
    void YourEnemyAdd()
    {
        //自作課題のスプライト名用
        int tmp = 1;
        
        //画像パス取得
        #if UNITY_EDITOR
        yourimages = Directory.GetFiles(@"Assets/Images/YourTask", "*.png");
        #elif !UNITY_EDITOR && UNITY_ANDROID //androidのみ
        yourimages = Directory.GetFiles(UnityEngine.Application.persistentDataPath, "*.png");
        #endif

        //画像を使える形に変える
        foreach (string path in yourimages)
        {
            //Texture2Dに変換
            byte[] bytes = File.ReadAllBytes(path);
            Texture2D texture = new Texture2D(2, 2);
            texture.LoadImage(bytes);

            //spriteに変換
            Rect rect = new Rect(0f, 0f, texture.width, texture.height);
            Sprite sprite = Sprite.Create(texture, rect, Vector2.zero);
            sprite.name = "yourenemy_" + tmp;

            //全ての敵画像が入ってるリストにspriteを格納
            EnemyTypeList.Add(sprite);
            tmp++;
        }
    }
}

spriteを生成した時に名前を付けていなかったので、sprite.nameと指定したものも追加しています。

これでプレイしてみると、

なんかズレてるぞ!?
緑色の線のBoxColliderは正しい位置にありますが、画像はズレてしまっています。

また悩んでたんですが、ようやく原因が分かりました。先程のスクリプトのここに注目します。

Sprite sprite = Sprite.Create(texture, rect, Vector2.zero);

その中のVector2.zeroがダメだとわかりました。このように変更します。

Sprite sprite = Sprite.Create(texture, rect, new Vector2(0.5f, 0.5f));

【Unity】スクリプトで様々な形のSpriteを作成する - Skeyllのブログ

このサイトを見ていてやっと気づきました。

よく分からなかった方は下のサイトも見るとなるほど!と思えるかもしれません。私はなりました。

【Unity UI】ピボットを知らないとヤバい! - 渋谷ほととぎす通信

目次のその2. 左下ピボット(X:0, Y:0)が正にやらかしてた事でした。中心点の座標には要注意ですね…

さて、修正してプレイすると…

ズレてない!!!普通に遊んでいても特におかしいところはありませんでした。
android実機でも動作確認しましたが、無事上手くいっていることを確認しました!

これでそれぞれのプレイヤーにとっての課題を作成し、実際に破壊する事が出来るようになりました!

unimgpicker-plusシリーズはここで終わりとして、今後どんな改良をしていくかリスト化しようと思います。

改良したいことリスト

・CustomYourTasksシーン
画像が選択されてない時は保存ボタンを非表示にする

・TaskMuseumシーン
自作課題がいない時は、制作することを促すメッセージを表示、誘導
自作課題を削除できるようにする

優先
・難易度の変化をつける(特に嫌いな奴のガード固く、スコアアップ等)
・課題への対抗手段を増やす、極稀に課題が全消えとかおもろそう

あとから
・BGMつける
・プレイヤーがダメージ受けた時のアニメーション
・設定、クレジット追加
チュートリアル
adobemicrosoftのアイコンを使うのは著作権的によくない、概念的な物にする

クレジット詳細
・効果音の表記
ADX(サウンド関連)の表記かなり気を付ける
https://game.criware.jp/products/adx-le/

いらん??
・カスタムステージ追加(破壊する課題を選べる)
・背景に力入れる(動くやつ)
・敵の種類を増やす
・チート出来ないようになってるか