【ハルシオンブログ】Androidでバックボタンでアプリを終了させるとき?
こんにちは。
大坂です。
今日から11月ですね!
今年もあと2ヶ月です…orz
さて、今週もタイトル通りですが、Unityでアプリを作ったときのAndroidアプリのバックボタンのお話。
終わらせるだけならこんな書き方ができるよってだけですが。
とりあえず今までやってた方法。
これでバックボタン押すと終了します。
これを1行にできる。
これでもバックボタンを押すとアプリが終了されますね!
簡単にアプリを終わらせたいだけならこれで十分な機能なので紹介でした。
では超絶に短いですが今週もこれにてノシ
大坂です。
今日から11月ですね!
今年もあと2ヶ月です…orz
さて、今週もタイトル通りですが、Unityでアプリを作ったときのAndroidアプリのバックボタンのお話。
終わらせるだけならこんな書き方ができるよってだけですが。
とりあえず今までやってた方法。
void Update () {
if(Input.GetKeyDown(KeyCode.Escape)) {
Application.Quit();
}
}
これでバックボタン押すと終了します。
これを1行にできる。
void Start () {
Input.backButtonLeavesApp = true;
}
これでもバックボタンを押すとアプリが終了されますね!
簡単にアプリを終わらせたいだけならこれで十分な機能なので紹介でした。
では超絶に短いですが今週もこれにてノシ
【Unity】みなさん、データの保存ってどうやってます?俺はこうやっちゃってます。
こんにちは!坂内です。
台風19号でかいっすね。直撃御免って感じですが、みなさん大丈夫でしょうか?
いきなり肌寒くなってきて、風邪にも注意でごわす。
さて、本日はUnityにおけるデータの保存についてちょこっと書いてみます。
皆さんUnityでゲームを作る際、データの保存はどのように行ってますか?
基本、少ないデータならばPlayerPrefs、もしくはテキストとかのデータファイルに書き込みってのが一般的なんですかね?
他にもDBとしてSQLiteとか使えるようですが、使ったことありません。うひひ
PlayerPrefsですと、「string」「int」「float」くらいしか使えませんよね?
これってめんどいですよね。色々なデータをわざわざintとかfloatに変えないと保存できないし、ロードの際にも逆に変換とかしないといけないと・・・・・
そういえば、どこかにPlayerPrefsXというのもありましたね。以前ちょっと使ったことはあります。
ってことで、僕はいつも以下のクラスを使っております。(これどこかのサイトで見つけたんだと思ったけど・・・どこか忘れました)
「FileController.cs」
「SaveData.cs」実際に保存されるクラス
と、まぁどんな形のクラスでもいいですが、シリアライズできるならそのままマルっと保存できちゃいます。
もちろん上記のように内部クラスがあっても問題ナッシング!
なんでも保存できちゃうのが素敵っすよね!
もちろん、Android、iOSどっちも対応してます。
ということで、Unityのデータ保存ライフ楽しんで! アデュ~ノシ
台風19号でかいっすね。直撃御免って感じですが、みなさん大丈夫でしょうか?
いきなり肌寒くなってきて、風邪にも注意でごわす。
さて、本日はUnityにおけるデータの保存についてちょこっと書いてみます。
皆さんUnityでゲームを作る際、データの保存はどのように行ってますか?
基本、少ないデータならばPlayerPrefs、もしくはテキストとかのデータファイルに書き込みってのが一般的なんですかね?
他にもDBとしてSQLiteとか使えるようですが、使ったことありません。うひひ
PlayerPrefsですと、「string」「int」「float」くらいしか使えませんよね?
これってめんどいですよね。色々なデータをわざわざintとかfloatに変えないと保存できないし、ロードの際にも逆に変換とかしないといけないと・・・・・
そういえば、どこかにPlayerPrefsXというのもありましたね。以前ちょっと使ったことはあります。
ってことで、僕はいつも以下のクラスを使っております。(これどこかのサイトで見つけたんだと思ったけど・・・どこか忘れました)
「FileController.cs」
using UnityEngine;
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class FileController : MonoBehaviour{
public FileController(){
}
public static bool Save<T>( string prefKey, T serializableObject ){
MemoryStream memoryStream = new MemoryStream();
#if UNITY_IPHONE || UNITY_IOS
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
#endif
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize( memoryStream, serializableObject );
string tmp = System.Convert.ToBase64String( memoryStream.ToArray() );
try {
PlayerPrefs.SetString ( prefKey, tmp );
} catch( PlayerPrefsException ) {
return false;
}
return true;
}
public static T Load<T>( string prefKey ){
if (!PlayerPrefs.HasKey(prefKey)) return default(T);
#if UNITY_IPHONE || UNITY_IOS
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
#endif
BinaryFormatter bf = new BinaryFormatter();
string serializedData = PlayerPrefs.GetString( prefKey );
MemoryStream dataStream = new MemoryStream( System.Convert.FromBase64String(serializedData) );
T deserializedObject = (T)bf.Deserialize( dataStream );
return deserializedObject;
}
public void save(SaveData data) {
// 保存用クラスにデータを格納.
FileController.Save("{PlayerPrefsに保存するキー}", data);
PlayerPrefs.Save();
}
public SaveData load() {
SaveData data_tmp = FileController.Load("{PlayerPrefsに保存するキー}");
if( data_tmp != null){
return data_tmp;
}else{
return null;
}
}
「SaveData.cs」実際に保存されるクラス
using System.Collections; |
と、まぁどんな形のクラスでもいいですが、シリアライズできるならそのままマルっと保存できちゃいます。
もちろん上記のように内部クラスがあっても問題ナッシング!
なんでも保存できちゃうのが素敵っすよね!
もちろん、Android、iOSどっちも対応してます。
ということで、Unityのデータ保存ライフ楽しんで! アデュ~ノシ
【Unity】NGUIでのロングタップ処理
モンスラが好評です!ありがとうありがとう!
あと少しで1万DLいきまっす!!
現在は来年1,2月にリリースをしたいと思っている
RPGを開発中!RPG開発中!大事なことなので2回言いました。
これまた面白いものになりますので楽しみにしてください!
モンスラの新機能を考えながら新しいアプリのリリース!
はたまたiphoneにモンスラを移植するか・・・
何に手を付けたらいいのか悩んでいる坂内です。
さて、今日はNGUIにおけるロングタップについてです。
まぁ簡単なのでみなさんすでに実装されていると思いますが、
今回ロングタップを実装しようとして、なにか簡単にやる方法はないかと
ぐーぐる先生に聞いたのですが、なんも教えてもらえなかったので
適当に実装してみました。
手順は以下です。
①NGUIでボタンつくりまーす
②スクリプト用意しまーっす。
③UIButtonだと、On Clickしかないため、UIButton Messageを用意しまーす。
④もいっこUIButton Messageを用意しまーっす。
終わり。
では順番に説明をば。
【1 ボタンつくりまーす】
これはそのままですね、ボタンをNGUIのWigetWizardから作成します。

適当な絵を用意したので、Labelは消しております。

【2 スクリプトを用意しまーっす】
今回用意したスクリプトは以下になります。
はじめのlongTapDurationは、ロングタップの時間を指定しています、2秒ロングタップすれば
ロングタップ時の処理を実行するってことっすね。
lastTapは、タップを始めた時間を保存するやつっす。
メソッドといえば、OnTapが押された時、OnReleaseは離された時の処理っす。
Updateにて、「押されている、且つ押され始めてからlongTapDurationの時間が経った場合」の条件で
print分を処理しています。
この際、tapFlgをfalseにしないとずっと押されていると処理が行われてしまいまっす。
【3 UIButtonだと、On Clickしかないため、UIButton Messageを用意しまーす】
ButtonにUIButton Messageを追加します。
「Add Component」⇒「NGUI」⇒「Interaction」⇒「Button Message」で追加できます。
追加したら、先ほどのスクリプトを設定しているオブジェクトを「Target」に設定し、
「Trigger」をOnPressに変更し、「Function Name」に先ほどのスクリプトで作った
OnTapにします。

【4 もいっこUIButton Messageを用意しまーっす】
3と同じくUIButton Messageを追加します。
追加したら先ほどと同じ感じで「Target」の設定を行います。
「Trigger」はOnReleaseに変更し、「Function Name」にはOnReleaseを設定します。

これでおしまいっ!
いちおうこれでできましたが、もっと簡単な方法あったらおせーてくださいませっ!
ではっ ノシ
あと少しで1万DLいきまっす!!
現在は来年1,2月にリリースをしたいと思っている
RPGを開発中!RPG開発中!大事なことなので2回言いました。
これまた面白いものになりますので楽しみにしてください!
モンスラの新機能を考えながら新しいアプリのリリース!
はたまたiphoneにモンスラを移植するか・・・
何に手を付けたらいいのか悩んでいる坂内です。
さて、今日はNGUIにおけるロングタップについてです。
まぁ簡単なのでみなさんすでに実装されていると思いますが、
今回ロングタップを実装しようとして、なにか簡単にやる方法はないかと
ぐーぐる先生に聞いたのですが、なんも教えてもらえなかったので
適当に実装してみました。
手順は以下です。
①NGUIでボタンつくりまーす
②スクリプト用意しまーっす。
③UIButtonだと、On Clickしかないため、UIButton Messageを用意しまーす。
④もいっこUIButton Messageを用意しまーっす。
終わり。
では順番に説明をば。
【1 ボタンつくりまーす】
これはそのままですね、ボタンをNGUIのWigetWizardから作成します。

適当な絵を用意したので、Labelは消しております。

【2 スクリプトを用意しまーっす】
今回用意したスクリプトは以下になります。
using UnityEngine; |
はじめのlongTapDurationは、ロングタップの時間を指定しています、2秒ロングタップすれば
ロングタップ時の処理を実行するってことっすね。
lastTapは、タップを始めた時間を保存するやつっす。
メソッドといえば、OnTapが押された時、OnReleaseは離された時の処理っす。
Updateにて、「押されている、且つ押され始めてからlongTapDurationの時間が経った場合」の条件で
print分を処理しています。
この際、tapFlgをfalseにしないとずっと押されていると処理が行われてしまいまっす。
【3 UIButtonだと、On Clickしかないため、UIButton Messageを用意しまーす】
ButtonにUIButton Messageを追加します。
「Add Component」⇒「NGUI」⇒「Interaction」⇒「Button Message」で追加できます。
追加したら、先ほどのスクリプトを設定しているオブジェクトを「Target」に設定し、
「Trigger」をOnPressに変更し、「Function Name」に先ほどのスクリプトで作った
OnTapにします。

【4 もいっこUIButton Messageを用意しまーっす】
3と同じくUIButton Messageを追加します。
追加したら先ほどと同じ感じで「Target」の設定を行います。
「Trigger」はOnReleaseに変更し、「Function Name」にはOnReleaseを設定します。

これでおしまいっ!
いちおうこれでできましたが、もっと簡単な方法あったらおせーてくださいませっ!
ではっ ノシ
【Unity】Unity&Orthelloによる2Dゲーム作成⑦
はい、こんにちわ坂内でっす。
Unity難しいでっす。
土曜出社してAndroidゲーム【モンスラ】バージョンアップしたでっす。
今回の目玉は必殺技の追加、クリティカルヒット追加、フェアリー追加でしたが、実は軽くなってるんです!
Drawcallが劇的に減ってるんですよ!
Ver1.1まではフルメンバー(村人200人+ユニット199人x6クラス)の場合、Drawcallが200ほど。
重いです!これ重いんですよ!
Ver1.1までは各クラスごとにAtlasを用意し、合計7Atlasを使用していました。
Ver2では少しでも軽くしようと、GUIまわりのAtlasを一つにしたり、ユニットのAtlasを1つにまとめたりしたところ、なんとDrawCall30!!!
この劇的変化!! DrawCall 200 ⇒ 30!!
ただし、スマホだとさすがにSpriteの多さが問題か、重いんです!
DrawCallの問題だけじゃあぁないっすね!!
今後軽くする方法を検討してみますが、ちょっとこれ以上はきついかな?
タップ時の攻撃エフェクトを他のAtlasと1つにしてみようという案は考えてますが・・
あと、Unity4.3によって2Dゲームまわりにどのような変化がくるか楽しみですね!!
と、いうことで今後もモンスラよろしくお願いします!
Unity難しいでっす。
土曜出社してAndroidゲーム【モンスラ】バージョンアップしたでっす。
今回の目玉は必殺技の追加、クリティカルヒット追加、フェアリー追加でしたが、実は軽くなってるんです!
Drawcallが劇的に減ってるんですよ!
Ver1.1まではフルメンバー(村人200人+ユニット199人x6クラス)の場合、Drawcallが200ほど。
重いです!これ重いんですよ!
Ver1.1までは各クラスごとにAtlasを用意し、合計7Atlasを使用していました。
Ver2では少しでも軽くしようと、GUIまわりのAtlasを一つにしたり、ユニットのAtlasを1つにまとめたりしたところ、なんとDrawCall30!!!
この劇的変化!! DrawCall 200 ⇒ 30!!
ただし、スマホだとさすがにSpriteの多さが問題か、重いんです!
DrawCallの問題だけじゃあぁないっすね!!
今後軽くする方法を検討してみますが、ちょっとこれ以上はきついかな?
タップ時の攻撃エフェクトを他のAtlasと1つにしてみようという案は考えてますが・・
あと、Unity4.3によって2Dゲームまわりにどのような変化がくるか楽しみですね!!
と、いうことで今後もモンスラよろしくお願いします!
【Unity】Unity&Orthelloによる2Dゲーム作成⑤
はいはーい 月曜の坂内っす。
ちょっとしたOrthelloを使用した時のコツを。
普通のオブジェクトの場合、iTweenを使用することで簡単に透明度を変更できます。
透明度を1⇒0⇒1と繰り返すことで、オブジェクトの点滅を実装することができます。
cubeというオブジェクトを作成し、マテリアルを張ります。
透過が可能なShaderを指定します。
そして、以下のコード書くことでcubeオブジェクトの点滅が可能になります。
上記コードの説明をしますと、「cubeオブジェクトの色要素 a (アルファは透過度)を2秒かけて0にする。
0になったら今度は2秒かけて1にする(pingpongによって動作を繰り返す)」となります。
これで簡単に点滅が可能です。
しかし!BUT!!!
OrthelloのSpriteは上記と同じことを行うとエラーがでてしまいます。
ナゼカ?
エラーをみると、Colorプロパティが無いといわれます。
そう、OrthelloのSpriteではShaderが「mobile/Particles/Alpha Blended」になるため、Colorプロパティが存在しないからです。
しかし、よく見るとOTSpriteの中に「Alpha」というプロパティが存在します。

これを0⇒1⇒0とすることで、点滅を実装することが可能です。
では、どのようにこれをいじるのか?
iTweenのメソッドには「ValueTo」というものが用意されています。
これは、値をaからbにするというもので、使い方は以下のように使います(たぶん)。
0から1まで2秒かけて変わる。

となります。
これを踏まえて、以下のようにコードを書けば・・・・
こんな感じで、OrthelloのSpriteを点滅することができます。
以上!なにかのお役に立てたらこれ幸い。
ちょっとしたOrthelloを使用した時のコツを。
普通のオブジェクトの場合、iTweenを使用することで簡単に透明度を変更できます。
透明度を1⇒0⇒1と繰り返すことで、オブジェクトの点滅を実装することができます。
cubeというオブジェクトを作成し、マテリアルを張ります。
透過が可能なShaderを指定します。
そして、以下のコード書くことでcubeオブジェクトの点滅が可能になります。
void Start(){ |
上記コードの説明をしますと、「cubeオブジェクトの色要素 a (アルファは透過度)を2秒かけて0にする。
0になったら今度は2秒かけて1にする(pingpongによって動作を繰り返す)」となります。
これで簡単に点滅が可能です。
しかし!BUT!!!
OrthelloのSpriteは上記と同じことを行うとエラーがでてしまいます。
Material doesn't have a color property '_Color' |
ナゼカ?
エラーをみると、Colorプロパティが無いといわれます。
そう、OrthelloのSpriteではShaderが「mobile/Particles/Alpha Blended」になるため、Colorプロパティが存在しないからです。
しかし、よく見るとOTSpriteの中に「Alpha」というプロパティが存在します。

これを0⇒1⇒0とすることで、点滅を実装することが可能です。
では、どのようにこれをいじるのか?
iTweenのメソッドには「ValueTo」というものが用意されています。
これは、値をaからbにするというもので、使い方は以下のように使います(たぶん)。
void Start(){ |

となります。
これを踏まえて、以下のようにコードを書けば・・・・
using UnityEngine; |
こんな感じで、OrthelloのSpriteを点滅することができます。
以上!なにかのお役に立てたらこれ幸い。