04 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 06

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【Unity】まだiOS対応中です・・・ 

こんにちは。大坂です。

先週から引き続きiOS対応中でっす。
色々躓いて時間がかかってますね。

先週紹介した
#if UNITY_IOS
System.Environment.SetEnvironmentVariable(”MONO_REFLECTION_SERIALIZER”, “yes”);
#endif
のお話はこれで正しく動きましたよ!

今週は「StreamingAssets」フォルダからテキストファイルを取ってくるところのお話。
もともとはこんな感じで取っていたのですが、
Application.dataPath + "/StreamingAssets/hoge.txt"
そんなのファイル無いよ!って怒られてしまいました・・・orz
ということで調べたら
Application.streamingAssetsPath
なんていうのがあるんですね。これでちゃんとテキストファイルが取得できました。
世の中の皆さんありがとう!

そんなこんなでゲーム的な動きの部分はほとんど解決して普通にゲームができるところまで来ましたね。
ちょっとボタンが押しにくかったりするので調整が必要そうですけど・・・。

今は広告周りの処理で嵌ってますよ~(T-T)
広告解決して、ボタン周り見直せば申請できそうですね!
そこからリジェクト祭りです!(ぇ
初めてだし、あんまり調べてないし、どの程度なのか・・・。
まぁなるようになりますかね?
ということでなんとなくiPhone版も進んでますよ~

ではまた来週~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】NGUIのAtlasについて 

熱い日と涼しい日がちょこちょこ入れ替わりますね。
皆さん風邪には注意しましょう。坂内です!

ルナダンがついに5000DL超えました!へいへーい!やったね!ヾ(´ー`* )ノ
次のバージョンアップで何個かコンテンツいれるよ!
チョーまっといて!

ってことで、開発ブログネタがございません。

目新しいことはやっておらず・・・バージョンアップに・・あ

そういえば、バージョンアップと同時に、少しでもゲーム画面を軽くしようと、DrawCallを1つでも減らす作業もやっています。

今まで、NGUIのAtlasとして、全画面共通のでっかーーーーいGuiAtlasなるものを用意し、そこに色々な画面のボタンやら背景やらを詰め込んでいたんですよ。
でもね、タイトル画面を開いただけでUnity上のVRAMがガッツリ減っていて、そのGuiAtlasで表示しているボタンを消したら、ガッツリ減ったというね。もうね、他の皆さんじゃアタリマエのことでぶち当たっているのが俺!
しらなかったーーー!!!!

ってことで、なるべくAtlasも分割して作り直したりしています!
前にどこかの記事で読んだんですが、同じAtlasを使用していても、DepthによってDrawCallが増えるという話、それとPanelを複数使用すると、その分DrawCallが増えるって話。
これ、何かというと、InspectorでUIPanelの一番下にある「Show Draw Calls」ってボタン押すとわかります。
ここ、ここ


この状態だと、DrawCallが12だということが分かります。
それと、DrawCallToolのところで、CharactorChipAtlasのオブジェクトが10個、BackGroundAtlasのオブジェクトが1個、CharactorChipAtlasが1個という順序になっているってことが分かります。


こんな感じ?

これを、↓のようにDepthの深さを合わせてあげると・・・・

(全て同じDepthでも問題はないが、同じDepthでなくてよい。)

こうなりました!


ということで、全Atlasの見直しと各画面オブジェクトのDepthとPanelをいじいじしております。

もちろん次のアップデートで鍛冶屋の機能も追加するのでそちらも作っております!

本日も役に立つか分からない記事でした!
では、アデュ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】iOS対応はじめました 

こんにちは。大坂です。

とうとう昨日からルナティックダンジョンのiOS対応を始めました。

とりあえず四苦八苦しながら作業を進め何とか実機転送できるところまで・・・。
全然進みません・・・orz
そもそもMac使ったことないのでやりづらくて仕方ないでっす。

画面が出たのはいいのですが、いきなりPlayerPrefsでデータをとってくるところで躓きました。
BainalyFormatterがiOSで使えないんですね~。
色々調べてJsonとか試していたのですが、今までのものを結構変えないとだめな感じで悩んでいたら、
坂内氏がこんなのを発見して教えてくれました。

#if UNITY_IOS
System.Environment.SetEnvironmentVariable(”MONO_REFLECTION_SERIALIZER”, “yes”);
#endif

んー。エラーは出なくなったけど。ちゃんとできてるのかな?
そのあとでまた別のエラー出たのでデータ取ってこれてるかできてるのか確認できず・・・。

進みが遅くていつ申請が出せるのかーって感じですががんばってiOS版だしますよ!

では、続き頑張ってきます。また来週~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】iTweenのGlobal座標、Local座標について 

月曜担当の坂内です!
だいぶ気温も上がってきて、生きにくい季節になってまいりました!

ルナダンのダウンロード数も伸び悩んできております!
まずまずは、4000ダウンロードは超えたんですけどね!ヽ( ´¬`)ノワーイ

https://play.google.com/store/apps/details?id=com.halcyon.lunadan

はい、こちらルナダンのダウンロードとなっております。Android専用です。まだの方はどうぞ落としくださいませ!
面白いよ!

iphone版の移植に取り掛かりたいのですが、修正・追加要件のバージョンアップにてんてこ舞いな日々でございます。
色々なご要望有難うございます!
今後もまだまだ色々なコンテンツ追加していき、長く遊べるゲームにしたいと思います!

iphone移植は明日くらいから進めれればなと!


さて、本日の開発関連のお話ですが・・・・

iTweenに関するお話です。

ネタないんですが、無理やりPickUP!!!

iTweenでオブジェクト移動するとき「iTween.MoveTo(gameObject,iTween.Hash("x",10f,"y",5f,"time",3f))」とかやってるんですが、local座標で動かしたい時ありません?ありますよね?

でもそのままだと、global座標が移動してすっごいところに行っちゃいます
(Inspectorのy座標のところが-300000とか!)

Local座標で動かしたい!そんな時には!islocal!!

公式のDocumentを見るとこんなことが書いてます・・・

「"islocal" boolean for whether to animate in world space or relative to the parent. False be default.」
http://itween.pixelplacement.com/documentation.php

ってことで、MoveTo,MoveFromの場合は、デフォルトではislocalがfalseになってますよ!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

iTween.MoveTo(gameObject,iTween.Hash("x",10f,"y",5f,"time",3f,"isLocal",true));

ハッシュにisLocalを使用すると、ちゃんとlocal座標で動いてくれました!

MoveAdd とかは特に関係ないようです・・・そりゃそうか、addだもんね・・・

ってことで、アデュ~!!

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】jarの呼び出しについて 

こんにちは、大坂です。

ルナダンのDL数は伸びてはいますが、だんだんと伸びが悪くなってますね。
考えて何か手を打たないといけません。
まずは何と言ってもユーザーの皆さんに楽しんでもらえるアップデートを続けていこうと思います。
本日予定のバージョンアップではお金の使い道が少し増えたりするので楽しみにしていてください!

で、本日のブログの話題です。
ちょっとUnityに対応していない広告をUnityで出そうとしたときにJavaクラス作ってそれを呼び出してみたので書いてみます。

java側はこんな感じで適当に。
package com.halcyon.halcyonad;

import android.app.Activity;

public class HalcyonAd {

public static void showAd(Activity activity) {
・・・省略
}

public static void closeAd(Activity activity) {
・・・省略
}
}

Eclipseのエクスポート機能でjarにしておきます。







出力したjarファイルをUnityの「Assets」-「Plugins」-「Android」の下に配置


最後にjarに書いたクラスのメソッドの呼び出し方。

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic("currentActivity");
// パッケージとクラス名を指定
AndroidJavaObject plugin = new AndroidJavaClass("com.halcyon.halcyonad.HalcyonGoodAd");
// 呼び出すメソッドと引数を指定
plugin.CallStatic("showAd", activity);

これだけで呼び出せます。やってしまえば簡単ですね。

呼び出すメソッドに戻り値があり受け取りたい場合は
plugin.CallStatic<bool>("showAd", activity);
などとすれば受け取れます。

ではでは、今週もこの辺でノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】NGUIとかルナダンとかMathf.CeilToInt 

こんにちは、坂内です。
ルナダン皆さんやって頂けましたか?

2週間ちょっとで2000DL達成しました!!
弊社としては最高の滑り出しです!(他まともなのがないとか言わないでorz

色々な要望、バグが上がってきており、てんてこ舞いな状態です!

バグといっても、プログラム的なものはほとんど無いのですが、今一番問題と思っているのが、機種依存で文字が出ない!というやつですね。

レビューのコメントにて「文字がでない」とコメントされた方申し訳ないです!

色々調べているのですが、わからない!!わけわかめ!

現在文字についてはNGUIのUILabelを使用しているのですが、GalaxyNote3・OptiomusGにて、このUILabelの文字が画面に表示されないという現象が起きているようです。
なにかこちらの現象について、お分かりの方いましたら、ちらっと教えて頂ければと!!いや、ちらっ どころかガツっと教えて頂きたい!

とりあえず現在は、一番要望で多かった「ゴールドの使い道を増やしてほしい」に対応すべく、鍛冶屋とかいうシステム作ってます!
え?開発ブログだろって?

それでは1個。

ある値をある値で割って、INTに切り上げる。という処理について

11÷3=3.666666・・・・
なので、切り上げて4にしたい。

int x = 11;
Debug.Log(Mathf.CeilToInt(x / 3));

結果は、3???

こんな時ありますよね?

以下のようにするとちゃんと4になります。

float x = 11;
Debug.Log(Mathf.CeilToInt(x / 3));

もしくは、

int x = 11;
Debug.Log(Mathf.CeilToInt((float)x / 3));

以上!

Category: 開発日記(Unity)

tb 0 : cm 2   

【Unity】時間の流れの変更 

こんにちは。
大坂です。

ルナティックダンジョンが1,000DL超えました!おめでとう!ありがとう!

リリース後に頂いているコメントの修正を行ってもっさり感がなくなったとの声ももらっているので、
快適なプレイができるようになっています!

では、今週の話題ですが、ゲームの速度を簡単に変えられるTime.timeScale・・・何もネタがなかったのでルナダンのアップデートで使ったやつです・・・。

使い方は簡単ですね~。
// 2倍
Time.timeScale = 2f;

// 1/2倍
Time.timeScale = 0.5f;

// 止める
Time.timeScale = 0f;

// 通常の速度
Time.timeScale = 1f;

といった感じです。

これをボタンのオンオフとかの処理と組み合わせれば、
時間の流れを変えてゲームの速度を簡単に倍速にしたり戻したりできますね。
ただ、「Time.timeScale = 0f;」をするとアニメーションとかも止まってしまうので、
ポーズメニューとかを作るときは工夫が必要な場合もありますね。

このところ手抜き感がすごいですが・・・。ネタ探すのがんばります。

では、今週はこの辺でノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】ルナダン500DL達成と電力消耗について 

こんにちわ!月曜の坂内っす。
ルナダンが公開1週間で500DL超えたです。ヾ( ̄∇ ̄=ノ バンザーイ♪ヾ(_ _)ノ モヒトツヾ= ̄∇ ̄)ノ バンザーイ♪
皆様のおかげでございます!

様々な意見も有難うございます!
操作性も含め、遊びやすく楽しいシステムを確立していこうと思います!

今回はルナダンの公開直後から数名の方に「電力消耗が多い」とのお声を頂きました。

それまでは、Unityの「QualitySettings」(Edit⇒Project Settings⇒Qualityにて開く)の※「VSync Count」の値を変更したりしてました。


ちなみにこのVSyncCount、リファレンス(http://docs-jp.unity3d.com/Documentation/Components/class-QualitySettings.html)ではこのように書かれています。「レンダリング処理をディスプレイのリフレッシュレートと同期させることでティアリングによる画像乱れを避けることができる。すべての垂直ブランク(VBlank)と同期をとるか、ひとつおきに垂直ブランクと同期をとるか、まったく同期しないとか、選択することができます。」

まぁ垂直同期のことっすよね。
ルナダンVer1.02までは、こちらの値を「Every Second VBlank」に設定していたので、30FPS(?)になっていました。
といっても、Androidは機種毎に変わるらしいですが??(よく分かってない
ただ、街など高FPSが必要もないところも30FPSのため、無駄に電力の消費がされていました。

そこで、街とダンジョンのFPSをシーン毎に変えようと、以下の試みを実装しています。

【街】
QualitySettings.vSyncCount = 0;
Application.targetFrameRate = 5; // FPSを5に設定
【ダンジョン】
QualitySettings.vSyncCount = 0;
Application.targetFrameRate = 25; // FPSを25に設定

それぞれ、void Start()の頭につけてみました。

これで、街ではFPSが5に設定され、ダンジョンでは25に設定されました。

ダンジョンのFPSを下げすぎると、戦闘がかくかくになってしまうため、これくらいがぎりぎりなのかな?と。
画面の遷移を見ていると、やはり装備画面の参照が多いため、街中では限界までFPSを下げてみました。

FPSの調整ではこれ以上は軽量化はきつそうなので、他にどうやって軽くするか考え中です・・・・

ルナダン触ってもらってる方いましたら、電力消費どうでしょうか?変わりました?
感想等コメントに頂けると助かります!
あ、それとUnityでの素敵な軽量化の方法知ってる方いましたらご教授下さいまし!

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】LineRendererをちょっとつかってみた 

こんにちは。
先週忙しくてブログを勝手に休んでごめんなさいm(_ _)m

何とか先週のうちにハクスラRPG! ルナティックダンジョンリリースできました!
皆さん遊んでくれましたか!?
GWで暇な人も暇じゃない人もダウンロードして頂けると嬉しいです!

現在はコメントで頂いた機能追加やバグFix作業中です。
こんな機能があったらいいな!とかバグって動かないんだけど!とかありましたらどんどん言ってくださいね!

さて、今週の話題です。
オブジェクト間を線でつなぎたい時とかに役に立ちそうなLineRendererについてです。



こんな感じで線でつなぎたい時ですね~。
まぁないかもしれませんが…。

では作り方について。
まずは空のGameObjectを作成して「Add Component」で検索に「line」と打つと「LineRendere」が出てくるので追加します。





こんなのが追加されます。各プロパティについてはこちらを参照すればわかると思います!(手抜き)

線を引いてつなげるには「Positions」の「Element」の座標をいじればいいだけですね。
プログラムからいじるときはこんな感じですね~。

キャラクターのオブジェクトを「char_1」「char_2」
線のオブジェクトを「line」としたとして。

GameObject char_1 = GameObject.Fine("char_1");
GameObject char_2 = GameObject.Fine("char_2");
LineRendere line = GameObject.Find("line").GetComponent<LineRenderer>();

line.SetPosition(0, char_1.transform.position);
line.SetPosition(1, char_2.transform.position);

気を付けるほどでもないですが、SetPositionで
Element1の値を変えるときは最初の引数を「0」
Element2の値を変えるときは最初の引数を「1」
とするところくらいですかね。

PositionsのSizeの値を変更するとElementも増えるので結構複雑な線も書けそうですね。
色々使いどころが出てくるのかな!?

ではでは今週はこんなところで~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0