5丁目らへんのさよねん家

UnityとBlender初心者です。つまづいたこととか日常とか雑談とかいろいろ。

Unityつまずき WebGLでビルドしたゲームをAzureで公開したい

どうもお久しぶりです。さよねです。


卒業研究で作っていたゲームもだいぶ完成しました。
おもしろいかどうかは置いといて(というかあんま面白くはないんだけど)、利用者アンケートを取るためにゲームをWeb上で公開したいなーと思いまして、
調べたらWebGLなるものを使えばPlayerなしでもゲームを遊べると!
ほっほ~ならこれにアンケートサイトのリンクつけちゃえばだいぶ楽にアンケート収集ができるんじゃないか?

ってことで、WebGLでビルドしたUnityのデータを無料サーバーにアップしようとしたものの
「ファイルの転送容量は1MB」ってな。
んで、レンタルサーバー探しをしていたところ、先輩から「Microsoft Azureなら学生期間は無料で使えるよ」とのアドバイス。

さっそくFTPソフトを使用してファイルをアップロードしてみたところ、
アップロード途中にタイムアウトしてしまったりと何度もやり直しをしたものの、なんとかファイルをアップできました!

が、
"An error occured running the Unity content on this page. See your browser’s JavaScript console for more info~”とかなんとかエラーが…
f:id:sayone128:20151119162232p:plain

なんじゃこりゃーと思いながら調べたところ
原因はMIMEタイプが認識できないからとのこと。
[Unity] Unity5(Beta)で制作したゲームをWebGLで公開する | ftvlog

んで、上記のサイト参考にして.htaccessファイルを変更したものの変化はなし。
っていうかそもそもMIMEタイプってなんなんだろ…ってレベルなんですが…


さらに調べると、Azureの場合はweb.configというファイルを作ることでMIMEタイプを設定するとかなんとか

web.configファイルの作り方は以下を参考にしました。
Hosting a Unity WebGL Game with Azure WebApps | The Matrix is my Office

英語で全然わかんなかったけど…
とりあえず、さっきでてたエラーはきえました!消えました!が!!

肝心のゲームがひらかない!!!!

f:id:sayone128:20151119162952p:plain

真っ白になりました。
参考にした英語サイトに色々書いてそうなんだけど、英語だもんで全然分からない…

んもーーーどーなってんのさーーー


あ、ちなみに、ローカルでは普通にゲームは動きました。はぁ。


あ、あと探してるときに見つけた以下のサイトなんですが、Kuduというツールを使えばFTPソフト使わなくてもファイルのアップロードができるみたいです。jirolabo.hatenablog.com

SONY SmartBandTalk SWR30を購入した

つ、つ、ついに…
念願の!!
SmartBandTalkを買いました~~~~~~~

f:id:sayone128:20151030170948j:plain

f:id:sayone128:20151030170957j:plain

つけているところを見てはニヤニヤ

LifeLogアプリと連携して、歩数や睡眠時間を正確に測ることができたり
スマホと同期させまして、メールを読んだりハンズフリーで電話にでたりできます。
バッテリーは3日ほどもつもよう。

AppleWatchみたいなイメージだと分かりやすいですかね。

うひひひひひひひ
ずっとずっと欲しいと言いつづけ
指輪じゃなくSmartBandTalkを買ってくれる彼氏が欲しいとか言いながら
でもそんなん無理だろうから就活終わったら絶対買うんだと決め
やっと買うことができました。

にやけが止まりませぬ。

もっと色々できるらしいのでいじいじしていきます~~

Unityつまづき GetComponentがうまくいかなかった

どうもです。さよねです。


前回悩んだカメラの問題は、カメラを2台にして切り替えることでなんとかなりました。

んで、今回は、他のオブジェクトにくっついてるスクリプトの変数を、GetComponentを使って呼び出して使うべ!みたいなことをしようとしてたんです。

スクリプトはこんな感じ

private Displaycheck _Displaycheck; //DisplayC用コンポーネント

    void Start()
    {
        state = GameState.TITLE; //状態をタイトルに

        _Displaycheck = GameObject.Find("DisplayC").GetComponent<Displaycheck>;
    }

んだけども
Cannot convert method group `GetComponent' to non-delegate type `Displaycheck'. Consider using parentheses to invoke the method
なんてエラーがでまして

うううううーーー????なんでなんで??ってなってんたんですが、

原因は簡単でした。
GetComponentの後の括弧がなかったんですね

_Displaycheck = GameObject.Find("DisplayC").GetComponent();

にしたら治りました。

あぁ、括弧か… なら「括弧がないよ」と日本語で言ってほしい…

Unityつまづきメモ カメラにアニメーション追加

つまづいたのでどうつまづいたかを忘れないように自分用にメモします。
解決は一切してません☆


ミックンが長与町の地図上を走るってな3Dゲームを作ってるんですが、SmoothFollowってスクリプト使ってカメラ追従させてました。

だけどもそれだとミックンの顔を拝むことができないので、スタートしたときは正面にカメラを置いてミックンの顔を映し、そのあとアニメーションでぐりーっとカメラを後方に回して、そっからSmoothFollowでついてくようにできんかなーって考えました。

んで、カメラのanimationClipつくりーの、それをAnimationControllerで管理しーの、スクリプトで遷移状態の基準となるbool変数制御しーので、ぐりーっとカメラを回すまではいったんですが、そのあとなんかずっとカメラがガクガクしている。
ミックンを追いかけてる間ずっとかくかくしてるんですな。

SmoothFlowのスクリプトはもとからあるもんそんままなんで、中身ちゃんとみてないんですけど、そのSmoothFlowの中にアニメーション制御する内容もいれちゃったもんだからその辺でなんか不具合生じてるのかな…

Update関数を入れたもんだからなんか起きてるような気もするけどうーーん

とりあえず次はSmoothFllowの中身をちゃんと解読して、カメラかくかく改善したい。

Unityつまづき Audio再生ができない3

いよっしゃあああ

BGM再生の件、解決しました!!
できたら簡単じゃった…

前回、Update関数でAudioSource.Play()で実行すると、再生ボタン連打状態になって音楽が再生されぬ、ってなことを言ったわけですが

かんたんでした。
「音楽再生」ではなく、「音楽が流れてなかったら再生させる」ってな条件を一つ足してあげればよかったわけです。

以下AudioManagerのコードです

using UnityEngine;
using System.Collections;

public class AudioManager : MonoBehaviour {

    public AudioClip bgmP; //プレイ中のBGM
    public AudioClip bgmT; //タイムアップのときのBGM
    AudioSource audioSourceP; //プレイ中のAudioSource
    AudioSource audioSourceT; //タイムアップのときのAudioSource
    GameController gamecontroller; //GameContorollerコンポーネント

    // Use this for initialization
    void Start()
    {
        //AudioSourceを作成
        audioSourceP = gameObject.AddComponent<AudioSource>();
        audioSourceT = gameObject.AddComponent<AudioSource>();
        //AudioSourceにそれぞれ音楽クリップを登録
        audioSourceP.clip = bgmP;
        audioSourceT.clip = bgmT;

        //GameContorollerコンポーネント取得
        gamecontroller = GameObject.Find("GameController").GetComponent<GameController>();

        if (gamecontroller.state == GameController.GameState.PLAYING)
        {
            // プレイ中の音楽を流す
            audioSourceP.Play();
            audioSourceT.Stop();
        }
        if (gamecontroller.state == GameController.GameState.TIMEUP)
        {
            // タイムアップ中の音楽を流す
            audioSourceP.Stop();
            audioSourceT.Play();
        }
        
    }

    void Update()
    {
        if (gamecontroller.state == GameController.GameState.TIMEUP)
        {
            if (audioSourceT.isPlaying == false)
            { //BGMが再生されてなかったら
                // プレイ中の音楽を流す
                audioSourceP.Stop();
                audioSourceT.Play();
            }
        }
    }
}

前半のAudioSourceの生成とかわたぶんもっとシンプルにできますね…。
public宣言して選択するようにすればいいわけですから。

とりあえず、AudioSouce.isPlayingで再生かどうかを判断しています。
思った通りにながれました…

ちなみにこの状態だとループ状態で流れるのでご注意を。

あーよかった…

追記

タイムアップ時にBGMがなるようになったものの、ループ再生されるので
BGMtというbool変数を用いてBGMが1回しか再生しないように修正しました。

void Update()
    {
        if (gamecontroller.state == GameController.GameState.TIMEUP)
        {
            if ( audioSourceT.isPlaying == false && BGMt == false)
            { //一回も再生されてない上にBGMが再生されてない
                // タイムアップの音楽を流す
                audioSourceP.Stop();
                audioSourceT.Play();
                BGMt = true; //1回でも再生されたらBGMtをtrueに
            }
        }
    }

Unityつまづき Audio再生ができない2

こんばんわ。さよねです。


前回音楽の切り替えができないとわーわー喚いていましたが

テスト用に新たにプロジェクトを切り替え試してみた結果
AudioSource.Play()関数は問題なく使えました。

つまり切り替え部分のスクリプトがうまく行ってないってことだ!

と気づいてあれこれ試したところ

Play関数をUpdate関数内で実行しているところに問題がありました。

色々試した結果、現在のゲームの構造を簡単にいうと

GameControllerオブジェクトでゲームの推移状態を管理して
AudioManagerというオブジェクトでBGMを管理&再生して
AudioManagerからGameControllerの繊維状態を参照して音楽を切り替えるって形になってます。

んで、AudioManagerのUpdate関数内に再生する内容を入れてたもんだから、再生ボタン連打してるみたいな状態になって再生されなかったわけです。

色々構造を変えてみたりしてましたが、どうもずっとそれが原因だったみたいです。

Start関数のほうで再生するよ内容を盛り込んだら、普通にながれました。



んで、無事音楽がながれたのでやったーーと思ったわけですが

Start関数だと、一度しか実行しないので結局音楽の切り替えがおきない…
ううう
ゲーム状態の遷移自体はGameControllerのUpdate関数のなかでやってるわけで、
ゲーム遷移が「タイムアップ」になったタイミングで音楽を切り替えて再生したいわけです。

ですがUpdate関数のなかで「ゲーム遷移がタイムアップになったらBGM2を再生!」見たいな内容を入れると、先ほど説明したように再生されなくなるわけで。


んんんんんんんん
結局ふりだしに戻りましたどうしましょう…

Unityつまづき Audio再生ができない

どうもこんばんわ、さよねです

つまづいたうえに解決できないのでどこがどう解決できてないのかメモっときます


先日からゲームの制作に取り組んでいるわけですが、
プレイ中はBGM1を流しといて、タイムアップと同時にそのBGM1を停止し、別のBGM2を流したい

ってわけでごにょごにょやってるわけです。

スクリプトで制御したいわけですが、
AudioSource.Play()メゾットを使用するとエラーが…
そんなメゾットありませんぜ的なエラーだよなたぶん。

でもAudioSource.Playメゾット自体はちゃんと存在するはず。
下記のサイト通りに書いてるもん…

Unity - スクリプトリファレンス:


んで別の方法はないかとぐるぐるしてたら
AudioMixerなるものを発見。

あ、じゃぁそれでタイムアップになったらBGM1をミュートして、BGM2のミュートを解除したらいいんじゃないか??

なんてやってみましたけど、タイムアップのころにはBGM2が再生終わっちゃって、結局何も再生されない形に…
ふりだしに戻るです。


いまはBGMを長いものにしてごまかしてますがこれはうぬぬぬぬぬぬ


明日はこれをもって役場にあいさつにいくのにうごごごごごごごご


どーして再生されないおーーでぃおーーーーーー