08 «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.» 10

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

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

 

【Unity】Excel使ってローカライズ試してみたんだが・・・・どうなんでしょかねorz 

おはようございます。坂内です。
だいぶ涼しくなってまいりました。
過ごしやすい季節ですがな!

現在あっぷるさんに申請だしているアプリは、ipadの時に広告がスゲー画面のど真ん中にでちゃうんでふざけんなってリジェクトされてます。
ええ、ipadなんてありませんから、試しようがないんですよね テヘ
ちくしょーーーー!!!!

とりあえず10月入ったらipadの1を知り合いからもらう予定・・・・
ちなみに今は、育成ゲーム作ってます。
いくつか絵ができ次第、予約TOP10に出そうかなとは思ってます。

で、今日の話題は、Excelファイルを使ってローカライズしてみよう?ってこと。
ちなみにUnity4.6ベータ使い続けてます。

色々と文字が多いアプリを作る際にめんどくさい(管理しやすいよう)にExcelファイルにて文字を管理しちゃいたいんですが、ローカライズはどうするの?って思った一瞬があったんですよね。
で、色々考えたんですが、ここにたどり着きました。ってお話です。

まずは、Excelが使えるように以下を落としてプロジェクトに入れちゃってください。
http://tsubakit1.hateblo.jp/entry/20131010/1381411760
こちら、テラシュールウェアさんのブログからです。テラさんスゲーよなーなんでも作っちゃうしー

で、上記の準備ができたら、適当なローカライズ用クラスを作ります。
using UnityEngine;
using System.Collections;

public class Localize : MonoBehaviour {

const int LOCALIZE_EN = 0; // ENシート
const int LOCALIZE_JA = 1; // JAシート

public static int localize;

void Awake () {
if (Application.systemLanguage != SystemLanguage.Japanese) {
localize = LOCALIZE_EN;
}else{
localize = LOCALIZE_JA;
}
}
}

んで、↓こんなエクセルをつくります。シートは「ENシート」と「JAシート」を作りました。
ENシートには英語の文言、JAシートには日本語の文言が入ってます。
エクセルのファイル名は「test.xls」にしました


test.xlsをインポートします。
インポートするときに、クラス名を決めます。
今回はクラス名を「LocalizeData」とかにしときました。


で、できあがったのがこちら。


ScriptableObjectなるものが出来上がるらしいです。

さてさて、お次はこいつを実際に使ってみます。


とりあえずTextおいておきます。
で、以下のLocalizeTestクラスを作ります。
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class LocalizeTest : MonoBehaviour {

public LocalizeData localizeData;

void Start () {
GameObject.Find("Text").GetComponent().text = localizeData.sheets[Localize.localize].list[0].title;
}
}

ここでは、実際にローカライズしたデータを使用するコードを書いときます。
localizeData.sheets[Localize.localize]
のところで、先ほどのLocalizeで日本語なのか英語なのかのシート分けを行っています。
今回は適当に、CanvasにこのLocalizeTestをつけました。


んで、public LocalizeData localizeData;に当たるものには、先ほど作ったScriptableObjectをつけます。
そのまま実行すると


のように日本語が出ます。

これ、Androidとかで英語にして実行するとちゃんと英語がでます。

と、こんな感じでローカライズできるんですかね?
でも、この方法だと1個1個のオブジェクトに対して無駄なコードを書いているような・・・・
もっと簡単な方法ないんですかね!?

ってところで、アデュ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

Thread: Unityゲーム制作

Janre: コンピュータ

Tag: Unity 
tb 0 : cm 0   

【Unity】Androidでもアプリ名のローカライズ・・・ 

こんにちは。大坂です。

iPhone6が出て巷では色々騒がれていますね。
まがったり・・・まがったり(ぇ
周りで買った人がいないですけど、どんな感じなんでしょうね。

さて、今週ですが・・・
先週と同じ話題でAndroid版…いらない気がするけどねネタがないので許してください。

一瞬なんですけどね・・
Unityの「Assets\Plugins\Android\res」に「values-ja」を作成して、「string.xml」ファイルをぶっこめば大体終わりです。
ファイルの内容な下記。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="app_name">ルナダン
</resources>

これで日本語の時のアプリ名が「ルナダン」で表示されますね。
それ以外の言語の時はアプリ名はPlayerSettingsのProductNameに設定した文字列になります。


ほかの言語でもローカライズしたいときはそれぞれフォルダ作って同じことをすれば変わります。
フランス語なら「values-fr」フォルダとか。

以上。
来週どうするかな・・。
ではではノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【TGS2014】いってきたでぃ? 

OHAYOU GOZAIMASU!!坂内です。

東京ゲームショウ2014行ってまいりました。
初めてTGS行くということで、ちょー 楽しみでしたが、結果は「ノ \ア・・ε=('A`;)oO(疲れた・・)」
いや、面白かったんですけどね!目的としてはPumoさんのブースにお邪魔することでしたし!
なんせ、最近数年は特にコンシューマのゲームとかやらないので、新しいタイトルに興味がないというかなんというか・・・

ちなみに行ったのは19日、ビジネスデーです。
中に入ると早速目についたのはこれ!

BattleFieldのブースでした。
BFシリーズはずっとやってるんだけど、最近年なのかFPSはあんまりやらなくなっ・・・

まぁそのあとは一通りまわって色々コンパニオンの写真を撮って(ぶれまくってスイマセン)
















と、まぁいくつか撮りまして。
まじぶれっぶれだな 全部・・・
そしてみんな可愛いどすなぁ

でPumoさんブースにお邪魔してきました!

こちらでは竹下様と色々な話ができてすげー 楽しかったです!
忙しい中お相手して頂きありがとうございました!
え?
もちろん写真も撮ってきました。

そのあと、Come-Come-Catさんと名刺の交換もできて有意義な感じでした!

また次回もいきたいなぁ・・・もちろんビジネスデーで・・・あとひたすら椅子がほしかった。
普段家に引きこもってるので、まじで足が爆発しそうでしたorz

Category: その他日記

tb 0 : cm 0   

【Unity】iOSのアプリ名のローカライズ【Xcode】 

こんにちは。
大坂です。

TGS今日からですね。今日明日はビジネスデイですけど。
明日行ってきます。

さて今週の記事です。
UnityでbuildしたXcodeプロジェクトでアプリ名をローカライズする方法ですね。
日本語と英語を例に。
まずUnityでbuildしたXcodeプロジェクトを開いて赤い四角のところをクリック。
スクリーンショット 2014-09-18 10-13-09

以下がでるので一番上のProject部分をクリック
スクリーンショット 2014-09-18 10-13-20

こんな画面が開くのでLocalizationsのところの「+」をクリック
スクリーンショット 2014-09-18 10-13-35

言語の一覧が出てくるので、追加したい言語を選ぶ。今回の記事ではJapaneseを選んでます。
スクリーンショット 2014-09-18 10-29-24

以下の画面が出てくるので「Finish」ボタンをクリック。
スクリーンショット 2014-09-18 10-13-49

そうするとこんな感じで言語が追加された状態になりますね。
スクリーンショット 2014-09-18 10-14-01

で、画面左のプロジェクトを開いていく赤い四角のファイルができてます。
スクリーンショット 2014-09-18 10-14-19

この2ファイルに以下を追加してあげればそれぞれ言語を変えたときにホームでアプリ名がそれぞれ設定したものになってます!
InfoPlist.strings(English)
CFBundleDisplayName = "LunaticDungeon";

InfoPlist.strings(Japanese)
CFBundleDisplayName = "ルナダン";

わかってれば簡単ですね・・。昨日ちょっとはまったのでメモという感じで。
ではまた来週~ ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】ほらほら~♪ 今日はみんな大好きスクロールビューの時間だよー♪by Unity4.6 

ブログのお時間がやってまいりました。
坂内っす。

今週の【AID勉強会】フェイルコン!アプリ失敗談大集合!」に参加します~
いつもながらの金髪やろうです。
捕まえてやってください。
前に前に行く人間じゃないんで、端っこでひっそりとしています。

ちなみに、19日に東京ゲームショー行きます!
Pumoさんブースには確実にお邪魔しますが、初ゲームショーなので、スゲー楽しみです!
19日いくよー って方、Twitterでお声かけて頂ければ、お話なんぞできればと思っております。

でだ。

引き続きUnity4.6の話題をやっていこうと思いますが。
いままでUnityというかNGUIでもさんざん苦労させてくれやがりました、スクロールビューについてちょこっと触ってしまっちまったんで、かるーく紹介ってか、やり方みたいなの?正しいか知りませんがね。書いちゃおうかなと!


まずはー Canvasを作成し、その下に空のGameObjectを作ります。
まぁ わかりやすく名前はscrollViewにしました。


で、作成したscrollViewにAddComponentで「Scroll Rect」をくっつけます。


さぁお次!
scrollViewの下にUI⇒Imageをくっつけます。
Imageにはお好きな絵でもくっつけといてください。

で、scrollViewのScrollRectコンポーネントにある、Contentに今作ったImageのオブジェクトをくっつけてやってください。


次に、scrollViewに「Mask」コンポーネントと「Image」コンポーネントを追加します。

そうすると・・・・

こんな感じになります。
これで実行してみましょう。
ちょこっと絵が移ってるところがドラッグできます。
scrollViewのScrollRectコンポーネントにある、HorizontalとVerticalのチェックを外すと、チェックを外した方向に動かなくなります。
縦スクロールのみにしたい場合はVerticalのチェックだけを入れておいてください。

一応これで、スクロールは完成です。
あとは適当にScrollBarのオブジェクトを作成し、scrollViewのHorizontalScrollbar等にくっつければ、スクロールバーも対応できます!!

わー 簡単!

それと、NGUIでいうTableとかGridとかで、絵をいっぱい並べたい時は次のようにしたらできました。
scrollViewの下に空のGameObjectおいて、そいつにGridLayoutGroupをつけて、その下にいっぱいImageを置く。

こんな感じで、テーブルみたいに敷き詰めることができましたとさ。

以上、みんな大好き(大嫌い?)スクロールビューを触ってみました!

アデュ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】iOSのカメラロールへのアクセス 

こんにちは。
大坂です。

今週も小ネタ。
iOSのカメラロールへのアクセスについてです。

まずは、こんな感じで「.mm」ファイルを作成します。
#import <Foundation/Foundation.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import <AVFoundation/AVFoundation.h>

/*
指定したパスの画像をカメラロールに保存するのに利用するネイティブコード。
*/
// 指定したパスの画像をカメラロールに保存する。
extern "C" void _ImageToAlbum (const char* path)
{
UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithUTF8String:path]];
ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
NSMutableDictionary *metadata = [[[NSMutableDictionary alloc] init] autorelease];
[library writeImageToSavedPhotosAlbum:image.CGImage metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
// 書き込み終了後、Unity側へコールバック。
UnitySendMessage("{呼び出すオブジェクト名}", "{呼び出すメソッド名}", [error.description UTF8String]);
}];
}
作成した「.mm」はUnityの「Plugins/iOS」に突っ込んでおきましょう。

次に呼び出す側です。使う部分だけですが…。
#if UNITY_IPHONE
// クラスの最初でインポート
[DllImport("__Internal")]
private static extern void _ImageToAlbum (string path);
#endif

public void CopyImage() {
#if UNITY_IPHONE
// 呼び出し部分
_ImageToAlbum ({ファイルパス});
#endif
}

// コールバック用のメソッド
void CallbackImageToAlbum (string error) {
// 処理
}
基本これだけで行けますね。
アプリで呼び出すメソッドを実行したら「カメラロールへのアクセス」のポップアップが表示されるので、許可すればカメラロールに指定したパスのファイルが保存されているはずです!

「.mm」で「AssetsLibrary」を使用しているのでXcodeとかでフレームワークの追加をお忘れなく!

ではこれにて。

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】uGUIをちょっと触ってみたよ?Slider使ってHPバーみたいなの作ってみようか。 

もっとハイペースでアプリを出していきたいです。
でも次アプリは1か月半くらいかかりそうなモノを考えています。
今作ってるやつは今週中にでも申請まで行ける予定・・・・
放置+引っ張り というちょっとひねくれた物ですが、面白いんでしょうか?

はい、坂内です。

ええと、前回はuGUIでCanvasの話でしたが、今回はSliderとTextについてちょっと触ってみちゃいました。
ってことで、かるーく 流してみようかと思います。

題名の通り、Sliderを使ってHPバーみたいなの作ってみようかと思います。

Sliderですが、まずは作成してみます。
Create>UI>Slider


こんな感じでSliderが作成されます。
実際に実行すると、つまみをつまめます!

つまみ いりません。
「Handle Slide Area」を消しちゃいます。
はい。これで見た目のつまみはなくなりました。

でもまだ触ることはできますね。

Sliderのコンポーネント「Slider」にある、「Interactable」のチェックを外します。


はい。これで触れなくなりました。

それでは、HPバーっぽいTexture(枠と中のバーは別でね)を用意して、Spriteにしておきます。
まずは、枠の絵を設定します。


Sliderオブジェクト⇒Imageコンポーネント⇒Source Imageに枠のSpriteをつけます。

次に、ゲージの中身のSpriteを設定します。

Fillオブジェクト⇒Imageコンポーネント⇒Source ImageにHPバーのHP部分(増えたり減ったりするところ)のSpriteをつけます。



こんな感じになりました。



あとはプログラムから触れればいいっしょ?


GameObject.Find("Slider").GetComponent().value = 値;



これだけでできるんですが、大事なのはImportいやUsing。

using UnityEngine.UI;

これ入れないとできませんでした。

ってことで、Textも同じ感じで触ることができましたとさ。


GameObject.Find("Text").GetComponent().text = "あうええええ";



ってとで、uGUI使いやすそうですね!

次あたりのアプリから使ってみようかな!
ただ、Textに対する装飾が全然できないような気がします・・・・NGUIのほうがまだ使い勝手良さそう・・・どうしましょうw

ってことで アデュ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】いろいろメモ的な感じ【Xcode】 

こんにちはー
大坂です。

涼しくなったと思ったらまた暑くなってきましたね!
ピーク時よりましですが、しばらくこんな感じの気温のようですね。

さてはて、今週もネタがないので自分用メモみたいな感じ。
Unity4.6?インストールだけしました(ぇ

1個目のメモ
iPhoneアプリのURLスキームについて。
相互送客とかリワードとかで設定していないと使えないので設定しました。
設定自体はXcodeで以下の画像のような設定。

スクリーンショット 2014-09-04_1
設定した後に実機のSafariにアプリを転送して、URLのところにスキーム名を入れて、アプリが起動したらOKですね!
今回の設定だと「LunaticDungeon://」といれてGoすると無事に起動できました。
一応Safariの画面。
スクリーンショット 2014-09-04_2

2個目
UnityでAdmobの全画面広告を出してみました。
まずはここからPluginを・・・https://github.com/googleads/googleads-mobile-plugins/
というか大体これで終わりなのですが・・・。

書いたコードは大体こんな感じ。
void Awake(){
if (mInstance == null) {
mInstance = this;
DontDestroyOnLoad(gameObject);

#if !UNITY_EDITOR
// インターステーシャルの準備
RequestInterstitial ();
#endif
} else {
Destroy(gameObject);
}
}

private void RequestInterstitial() {
string admobId;
#if UNITY_EDITOR
admobId = "";
#elif UNITY_ANDROID
// Android用のAdmobのIdを設定
admobId = AndroidInterstitialId;
#elif UNITY_IPHONE
// iPhone用のAdmobのIdを設定
admobId = iOSInterstitialId;
#else
admobId = "";
#endif
// Create an interstitial.
interstitial = new InterstitialAd(admobId);
// Register for ad events.
interstitial.AdLoaded += HandleInterstitialLoaded;
interstitial.AdFailedToLoad += HandleInterstitialFailedToLoad;
interstitial.AdOpened += HandleInterstitialOpened;
interstitial.AdClosing += HandleInterstitialClosing;
interstitial.AdClosed += HandleInterstitialClosed;
interstitial.AdLeftApplication += HandleInterstitialLeftApplication;
// Load an interstitial ad.
interstitial.LoadAd(createAdRequest());
}

private AdRequest createAdRequest() {
return new AdRequest.Builder()
.AddTestDevice(AdRequest.TestDeviceSimulator)
.AddTestDevice("0123456789ABCDEF0123456789ABCDEF")
.Build();
}

// 表示したいときに呼び出す
public void ShowInterstitial() {
#if !UNITY_EDITOR
// ロードが終わっているか確認
if(interstitial.IsLoaded()) {
ロードが終わっていたら表示
interstitial.Show();
} else {
ロードが終わってなかったらログ出して表示しない
print("Interstitial is not ready yet.");
}
#endif
}

// 次に出すときにもリクエストが必要なので広告がとじられたらリクエストを投げておく
public void HandleInterstitialClosed(object sender, EventArgs args) {
print("HandleInterstitialClosed event received");
RequestInterstitial ();
}


とこんな感じです。何かのお役にたてれば…。
まぁみんなそれぞれ実装してますかね。

では、今週はこれにて!
ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】久々のUnityネタ?やっぱり月曜しんどいっすわ。 

最近涼しい日が続いていますね。
寒いと思う方もちらほらと。風邪にはお気を付け下さいませ。
もう9月ということで、今年も残り4か月となりました。
ということで、坂内です。

無事にMacPeople2014年10月号に弊社ハルシオンシステムの記事が載りました!
見て頂けました?写真ひどいっすよね。凸凹コンビって感じ満載です。
身長差激しすぎ!

さて、本日の話題ですが、一部の方たちで盛り上がりを見せている、Unity4.6のβについてちょこっと触ったので、書いちゃいます。
といいつつも、これを書きながら初めて触ってるので、めちゃくちゃな事書くかもしれません。
是非突っ込んで下さいませ。

シーンを作ります。
Cameraができます。
Camera選択します。
なんすかこの白い丸・・・???

まぁ いいです。
早速、uGUIのボタンとやらを置いてみよう!

HierarcyのCreate⇒UI(!?)⇒Buttonを押してみた。



こんなんできました。

そして、Cameraを選択してみた。

おいいいいいいいいいいいい!ずれてるってよーー!
カメラの枠とUIの枠(?)がずれてますよーーーー!
意味わかめ。

なにこれー みんなこうやってやってるのー?!
一応、UI周りはButtonの親のCanvasが映しているようなので、ボタン自体は画面にでてるんですけどね。


で、CanvasのRenderModeを変えたら、次のように変化しました。
●Screen Space - Overlay
Canvasがカメラを担っていて、別のCameraからは映らない。
Overlayなので、一番手前にUIが来る。
CameraのMaskはEverythingになっているので、UIレイヤーも入っていますが、CanvasがButtonを映してる感じですかね?
ちなみにCanvasの位置は動かせません。


●Screen Space - Camera
これちょっと気持ちいい。
CanvasのRenderCameraに、MainCameraを入れると、そのカメラでUIも移すようになる。
そのため、UIの枠がCameraの枠と同じになります。(なのかな?)
これだと、UIのSortingLayerとSpriteのSortingLayerそれぞれのLayerが効くので、UIをSpriteの後ろに表示したり、手前に表示したりというのが可能。
Canvasの位置はCameraに付随。


●WorldSpace
こちらの表示順はScreenSpace-Cameraと同じで、SortingLayerが効きます。
それと、Canvasを自由に動かせます。
UIを映すのは、Cameraになります。


という感じで、本日のまとめ!

・Button等のUIを置くのはCanvasの子として配置する!(ボタン作ったりすると勝手にCanvasができあがる)
・CanvasのRenderModeによって、UIの映し方が変わる。
・月曜日は眠い。
・イカくんの難易度を下げる。
・そういえば、EventSystemってオブジェクトもできてたけど何だろう?

以上!
次回はuGUIでSliderでもやってみようかな。ボタンはみんなが色々書いてるようなので!

ってことで、アデュ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0