トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

虫歯を倒す2Dゲームを作る with iTween【バグ編】

前回の2Dゲーム製作の続きです。

ほとんど進んでいないに等しい

bibinbaleo.hatenablog.com

バイキンにタッチで表情を変える

バイキンをクリックするとやっつけれるようにするのですが、その時バイキンの表情を変えてみます。

表情・ポーズを切り替える | Live2D Manuals & Tutorials

公式マニュアルによるとanimatorのblendという機能を使うと、スクリプトから表情を変化させれるそうです。その場合表情パラメーターをいじるのではなく、変化後の表情をlive2Dで作って置いて、アニメーションとして取り込んで、それをブレンドする形でした。

f:id:bibinbaleo:20171005211207p:plain

マニュアルのスクリプトを動かすと、こんな感じでインスペクタのバーで表情を変えることができます。

Animated GIFs - Find & Share on GIPHYwww.giphy.com

この値を、クリックした時に変えるスクリプトを書かないと・・・

deltaTimeとか使って書いて見たけどうまくいかなかったので、結局表情は変えないでいいや・・・

健康な歯から虫歯へのフェードアウト

unityをやっているとたまに聞くiTweenというアセット。やっと使いました。

アニメーションがスクリプト経由で簡単にできるらしい。

スプライトの透明度を変えてフェードアウト的な処理をしてみました。

Animated GIFs - Find & Share on GIPHYwww.giphy.com

ちなみに透明度を下げるオブジェクトの下に虫歯画像を置いています。これはteratailで質問して得られた回答をもとに作りました。

https://teratail.com/questions/95199

本当は画像から画像へスムーズに変換する機能とかあるのかなと思ってたけど、ないのかな?

こんな感じです。

if ( Input.GetKeyDown( KeyCode.Space )){
            iTween.ValueTo(gameObject, iTween.Hash("from", 1f, "to", 0f, "time", 2f, "onupdate", "SetValue"));

        }

    void SetValue(float alpha) {
        // iTweenで呼ばれたら、受け取った値をImageのアルファ値にセット
        MainSpriteRenderer.color = new Color(255,255,255, alpha);
    }

 

参考

doggy.hatenablog.com

tech.camph.net

megumisoft.hatenablog.com

バイキンのランダム発生

前回Live2Dのモデルがプレハブ化できなくて、インスタンスによるランダム発生ができないって書きましたが、Live2Dの最新のSDKを入れたらできるようになったので、普通にプレハブを使ってランダム発生させます。

前回同様こちらを参考に

tiro105.hateblo.jp

こんな感じで1秒ごとにMakeEnemyされるようにしました。

        if (timeleft <= 0.0) {
            timeleft = 1.0f;
            MakeEnemy ();
        }

    void MakeEnemy() {
            GameObject enemy = (GameObject)Instantiate(enemyPrefab);
            Vector3 p = enemy.transform.position;
            p.x = Random.Range(-9, 9);
            p.y = Random.Range (-3, 3);
            enemy.transform.position = p;
    }

なんかすごく偏る気がするけど気のせいかな?

Animated GIFs - Find & Share on GIPHYwww.giphy.com

本当は歯の近くにバイキンを出したいのですが、やり方がよくわからないので、画面全体にランダムに出して、歯とバイキンの距離が近かったら歯が虫歯に変わる、って感じにしようと思います。 

歯とバイキンの距離が近くなったら、虫歯になる

distance関数で、バイキンと歯の距離が2以下になったらitweenを発動させるっていうスクリプトを作ったのですが、

UnassignedReferenceException: The variable objB of kin has not been assigned.
You probably need to assign the objB variable of the kin script in the inspector.

というエラーが出ます。

f:id:bibinbaleo:20171013145148p:plain

 調べたら、初期化ができてないからって書いてありました。

初期化って何?

westhillapps.blog.jp

hamazakifactory.hatenablog.com

なんかどうやってもこのエラーが治らない。ゲームは動くのですが、tweenされない。

クローンを消しても点数が入らない

現れたバイキンをクリックすると点数が入るように前回していました。

しかしプレハブ化してクローンとして現れた敵をクリックしても点数が入りません。

原因として、外部のスコアを管理しているスクリプトをバイキンにアタッチしているのですが、クローンのバイキンはそれがアタッチされてない状態になってしまうこと

元:

f:id:bibinbaleo:20171013155112p:plain

クローンだと

f:id:bibinbaleo:20171013155108p:plain

こうなってしまう。

f:id:bibinbaleo:20171013155102p:plain

内容としては下の記事が近そうなのですが、頭が回っていなくてこれを読んでもどうしたらいいか全然わかりません。

qiita.com

最後に

完成しない気がする。

2Dゲーム作ったことがないから作りたい、せっかくLive2Dも触り始めたからそれも組み合わせようっていうモチベーションで始めたけど、ゲームを作るのそんなに好きじゃないのかもしれない・・・

作っているのも面白いゲームじゃないのは明らかだし、今モチベーションがゼロだ〜

VRしようかな

 

こちらの記事も参考になりそう。

gametukurikata.com