どこまでも自由な日々

パソコン初心者主婦のブログです。

ヤン提督をつくろう その1

 blenderで大好きな銀河英雄伝説ヤン・ウェンリー提督を制作することにしました。

初心者のつくる2体目のモデルです。

前回はヘスティアちゃん。ということで男性は初。

顔から進めていっていますがなかなかうまくいかない。。

それでもそれなりに納得できるところまできたかも。

f:id:moph-moph:20150606173736p:plain

f:id:moph-moph:20150606173846p:plain

※色は作業用です

ちなみに髪色をかえるとキルヒアイス似に…f:id:moph-moph:20150606173822p:plain

どこまで愛が形になるか心配ですががんばります。

 

 

UnityでネストされたJSONデータを読み込む

データの読み込みにはJSONObjectを利用することにしました。

JSONObject - Unify Community Wiki

 

こちらのありがたいAssetはResourcesフォルダにインポートしたらそれでOK。

次は元になるJSONデータ・URLを用意。

{"coord":{"lon":100,"lat":28},"sys":{"message":0.0173,"country":"CN","sunrise":1433283805,"sunset":1433333572},"weather":[{"id":800,"main":"Clear","description":"Sky is Clear","icon":"01d"}],"base":"stations","main":{"temp":291.042,"temp_min":291.042,"temp_max":291.042,"pressure":659.73,"sea_level":1016.79,"grnd_level":659.73,"humidity":36},"wind":{"speed":0.75,"deg":244.002},"clouds":{"all":0},"dt":1433303679,"id":6643967,"name":"Gezan","cod":200} 

 元データ↑WorldWetherAPIより。

ところでみんな目視でデータ見るときどうしてるんだろう。

私はVisualJSONをとりあえず入れてるけど結局ブラウザの整形機能使うよね。

 

weatherのところが一度[ ]で囲まれてる。

前もこういうやつでハマった。

 

     IEnumerator Download() {
        WWW url = new WWW("http://api.openweathermap.org/data/2.5/weather?lat=28&lon=100");//JSONデータのURL

        yield return url;

        JSONObject json = new JSONObject(url.text);
//        Debug.Log(www.text); //生JSONデータ

 

      string weather = json.GetField ("base").str;

        Debug.Log(www.text); //ネストされてないデータ

        JSONObject arr = json.GetField("weather");
        Debug.Log ("一回目。天気のリストは" + arr);
        JSONObject arr2 = arr[0];
        Debug.Log ("まるっと取り出し。" + arr2);
        JSONObject result = arr2.GetField ("main");
        Debug.Log ("お天気は"+ result);  
    }

 

わーいできた!ヽ(=´▽`=)ノ

小一時間ハマったくせに超カンタンに取出せたよ。
 

Shooting Game チュートリアル iOS対応 第01回

プラグインを作成する(シェア機能)

iOSで、SNSシェアプラグインを入れるチュートリアル

すすめていきます。

 

こちらもおとなしく、作成済みプロジェクトをDLしてそれを開きます。

いつもどおりにアップデートの案内が出るので承諾。

1.1 シェア機能を実装する

まずはテクスチャのDL。

そしてコードを書き進める。

なるほど、iOSのコードを入れる処理があるのね!よかった!

externって何?

extern 修飾子は、外部で実装されるメソッドを宣言するために使用します。

 なるほど。

        Application.CaptureScreenshot ("screenShot.png");

スクショの取り方もわかった。

なんでOnGUIのところはif文なんだろう?

なぜ if 文で囲っているかというと, GUI.Buttton は押された時のみ true を返すので
こうすることで押した時のみ行う処理を書くことができます.

 (引用:[Unity][GUI] スクリプトから Button を作ろう - Qiita

とりあえず、カッコ内で生成しておけば押された時にTrueを返す、と覚えておけばいいのかな。

f:id:moph-moph:20150529091313p:plain

つづいてネイティブコードを書く!

Plugins/iOSフォルダ内にmmファイルを入れておくと、ビルドしたXcodeプロジェクトに自動でファイルを追加してくれます。

へぇ。

そんでファイルの作成(手動)

.mmって??.mじゃないの?と思っていたら。

Objective-C++(Objective-Cの中でC++を使う)では.mm。

.mmなら#importとかいらない、ということらしい。合ってる?

 

そしてソースコードを見ていく。

#endif

extern "C"{

}

お作法ということで書けばいいのかな。

 

と思ったらエラー。

autoreleaseと#endifを消してコンパイルOKになりました。

あと、platformもiOSにしておきました。

extern "C"{

void Shooting_Share(const char *text, const char *url, const char *textureURL){

NSString *_text = [NSString stringWithUTF8String:text];
NSString *_url = [NSString stringWithUTF8String:url];
NSString * _textureURL = [NSString stringWithUTF8String:textureURL];

UIImage *image = nil;

if([_textureURL length] != 0){
image = [UIImage imageWithContentsOfFile:_textureURL];
}

NSArray *actItems = [NSArray arrayWithObjects:_text, _url, image,nil];

UIActivityViewController *uiActivityViewController = [[UIActivityViewController alloc]initWithActivityItems:actItems applicationActivities:nil];

[UnityGetGLViewController() presentViewController:uiActivityViewController animated:YES completion:nil];
}
}

 でも、最初なんか狭いよ。

 f:id:moph-moph:20150531163338p:image

そのあとはいいんだけど。

f:id:moph-moph:20150531163520p:image

 

ということで完成ファイルを落として比べてみることにします。

…。

同じようです。

 

でもまあ実装方法がわかったので、自分のプロジェクトにもこれで入れられるね!

UIActivityViewController以外でも試してみたい。

 

 

Shooting Game チュートリアル モバイル対応 第04回(失敗)

第4回 バーチャルジョイスティック対応

すすめていきます。

4.1 バーチャルジョイスティックをアセットストアからダウンロード

ちょっとびっくりしました。

あのソフトもあれもそれもUnityだったのね、みたいな焦り?

とりあえずインポートします!必要なファイルだけということでちゃんと気をつけて。

f:id:moph-moph:20150531015115p:plain

いつものが出ました。そもそもUnity4.6用って書いてあるし大丈夫かな?

 

設置はしてみた。この場所からは動かせないのかしら。

f:id:moph-moph:20150531015350p:plain

そんでコードを書いてみると。

f:id:moph-moph:20150531020146p:plain

エラー。

CrossPlatformInputManagerに変更しても、エラー。

このクラスを使うって宣言しないとだめなんじゃない?

ってことで

using UnitySampleAssets.CrossPlatformInput;

を最初にいれてみると、CrossPlatformInputManagerでエラーは消えました。

でも、入力は受け取ってくれません。

iOSだから?ということでいまさらながらPlatformをiOSにしてみます。

 

はいー受け取らないー。

しかも敵やっつけなくなったー。

レイヤーがおかしくなってるっぽいー。

 

そもそものUnityバージョンが違うのがいけないのかもしれない。

ジョイスティックも伸びているし、これは黒帯対応のに使うべきアセット。

失敗ということでこのまま今回は置きます。残念。

 

 

Shooting Game チュートリアル モバイル対応 第03回

第3回 タッチパネル対応

すすめていきます。

3.1 タッチパネルに対応させる

ここでいきなりUnityRemoteというアプリの存在を知る。

iOSだけどインストールしてみました。

f:id:moph-moph:20150531013446p:plain

 

コンピュータとつないでEditerからPlayを押して、ということなのでやってみます。

設定はとりあえずDeviceだけ変えて。

 

f:id:moph-moph:20150531013611p:plain

 

プレイ。

 

すごい!!

こんなに簡単に実機テストできるなんて思っていませんでした。

コード変更、タップにも反応したしOKです。

 

また、「TouchクラスではなくEventクラスでタッチ情報を取得する」ほうが定石なのかな。

ということで素直に書き換え。めっちゃ簡単になった!

OnGUIメソッドはイベントドリブン的なやつ?

 

やー感動しました。

UnityRemoteにね!

 

 

 

Shooting Game チュートリアル モバイル対応 第02回

第2回 複数の解像度に対応する(引き伸ばす)

すすめていきます。

2.1 ゲームビューの画面サイズ変更

こちらは黒帯でなく引き伸ばしでの対応。

おとなしく12回終了時のデータをDLし、そこからすすめていくことに。

 

2.2 BackgroundとDestroyAreaの変更

うん、素直に広がったよ!

と、あれ、これだけ?

つまりデバイスのスクリーンサイズを取得しているということでいいんだよね。

 

Shooting Game チュートリアル モバイル対応 第01回

第1回 複数の解像度に対応する(黒帯を追加する)

モバイル対応していこうと思います。

 

黒帯の追加ときいて一番に思い浮かんだのがスクフェス!でした。

ってことはこれができるようになればスクフェスが作れるね(違)

 

1.1 ゲームビューの画面サイズ変更

Androidの端末は持っていないのですが、チュートリアルに沿ってAndroidで設定。

1.2 黒帯の追加

黒帯を追加。一番手前側にもってくるんですね。

 

1.3 プレイヤーの移動制限

チュートリアルでは何箇所かVector3になっているけどVector2のままでOK。

そのまま書きなおして、無事に背景部分だけ動きました。

 

続きます。