09 «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.» 11

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

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

 

【Unity】uGUIスクロールでボタンを作ったんだよ・・ 

こんにちは。
大坂です。

寒くて眠いです。

はい。今週もuGUIですよ。使って慣れないと・・。
NGUIと大体一緒なんですけどね。

さてはて、タイトル通り、スクロールビューの下にグリッドおいてボタンを並べたときのお話。
先週、スクロール部分のサイズの変更をプログラム側でして・・・ボタンを置いて。
よしできたとおもったら・・・あれ・・・ボタン押せないんですけどorz

まぁ単純な話なんですけどね。みんなこんなことでつまらないんだろうな・・。
構成はこんな感じ

で、「scrollBase」の内容

「button」の内容


これだと押せません。
uGUIはボタンとかコライダーがなくても押せるのはいいのですが、ボタンの親にImageとかついてるとそいつが邪魔して押せないみたいです・・・。


こいつね・・。こいつにも当たり判定が発生するので、下にいるボタンが押せないみたいです。
こんなところで時間とられるとかもうね・・。

あ、何に当たり判定があるかは、
アプリを実行してHierarchyの「EventSystem」をクリックして内容を見ると大体わかると教えてもらいました。
便利なのでお試しあれ。

今週もただのメモ的な感じ。
ではまた来週。
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 1   

【Unity】uGUIってそのままAndroidとかに入れると、画面比とかすんごいことなっちゃうよね? 

おはようございます。坂内っす。
ぽかぽかで気持ちのいい朝ですね。
夜には一気に寒くなるって話でしたので、外出する皆さんは、着るものとかご注意あれ。

土曜日はBBQとか、そのあとの飲みとかで大変な目にあいました。
えぇ 飲みすぎです。
昨日の午前中はちょっと気分がずっと悪いまま・・・
まぁ どうでもいいですね!

uGUI最近ずっと使っているけど、uGUIを使う上で、ごく基本なんですが、忘れると大変なことになるコンポーネントの話していませんでしたので、かるーく紹介。

例えばこんな画面を作ります。
こちらはUnity上の見た目です。こんな感じに配置しました。

これをそのままAndroidで実行すると・・・・・・



なんだってー!?どう見ても大きさおかしいジャマイカ!

って時ないです?もうないです?そうですよね。

そんな時は、Canvasにこいつをつけるんです!

「Reference Resolution」!!!

Matchを1にしてください。

これでAndroidで実行すると・・・・・


こうなる!

すごくね?

って感じのマメ知識でした。

アデュ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】uGUIちょっとさわりはじめました。 

こんにちは。大坂です。

涼しいを通り越して一気に寒くなりましたね・・。
天気が良くなればましになるのでしょうか・・・?

さて、ようやくUnity4.6でuGUIを触り始めました。
ほとんど何もやってないようなものなので、大したネタではないです。ごめんなさい。

「Rect Transform」のWidth、Heightをプログラムから変更する方法です。


とりあえず変更方法。
gameObject.GetComponent<RectTransform> ().sizeDelta = new Vector2(450,  800);
これだけなんですけどね・・。

スクロールビューでGridLayoutとか使ったときに中にオブジェクトを大量においてもスクロール部分のサイズが
勝手に変わってくれなかったので、プログラムから変えてみたのですが・・・。こういうものなのですかね。

ちなみにサイズを変更したときにどの方向にサイズを増やすかは、1個下の項目の「Pivot」をいじれば変わります。
今の画像の設定だと、X軸のサイズを変更した場合は左右に均等に増えて、
Y軸のサイズを変更した場合は下方向にサイズが増えます。
「Pivot」についてはこんな感じ。
Xを「0」にすると右方向、「1」にすると左方向
Yを「0」にすると上方向、「1」にすると下方向

と、まぁ短いですが今週はこれで。
こんな感じでちょっとした触り方のネタが増えそうです・・。

では、また来週ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】ResourcesフォルダからInstantiateしてます?意外と便利っすよね? 

午前中は昼過ぎまで打ち合わせ、午後は仕様検討の会議してたらこんな時間になってしまいました!
坂内っす。

現在本格育成シミュレーションゲーム制作中です。
何が本格かって?
放置育成じゃないっすよ?それだけなんですけどね。

で、本日の話題ですが、みなさんオブジェクトをInstantiateするときって、ふつうにPrefabをPublicとかにくっつけて、Instantiateしてます?
俺はずっとそうやってました。

でもInstantiateするオブジェクトが多岐にわたる場合とかめんどいっすよね。

って時に、ReosourcesフォルダからInstantiateしちゃえるらしいっす。

例えば、以下のようにResourcesフォルダにPrefabを置いておきます。
今回はCubeというPrefabを用意しました。


んで、なんか適当にPrefabをInstantiateしてみます。

using UnityEngine;
using System.Collections;

public class PrefabTest : MonoBehaviour {

const string DIR_CUBE_PREFAB = "Prefabs/";
const string NAME_CUBE_PREFAB = "Cube";
readonly Vector2[] RANDOM_POSI = {new Vector2(-5f,-10f),new Vector2(5f,10f)};
const float POSI_Z = 20f;

void Start () {
// Cube生成
for(int i = 0 ; i < 5 ; i++){
GameObject cube =
Instantiate(Resources.Load(DIR_CUBE_PREFAB + NAME_CUBE_PREFAB))
as GameObject;
float x = Random.Range(RANDOM_POSI[0].x,RANDOM_POSI[1].x);
float y = Random.Range(RANDOM_POSI[0].y,RANDOM_POSI[1].y);

cube.transform.localPosition = new Vector3(x,y,POSI_Z);
}
}
}


こんな感じで実行すると、こうなります↓


もちろんランダムなので、実行の度にCubeの場所が変わります。

GameObject cube = Instantiate(Resources.Load(DIR_CUBE_PREFAB + NAME_CUBE_PREFAB)) as GameObject;
の場所ですが、もちろん以下でもおk!

GameObject pref = Resources.Load(DIR_CUBE_PREFAB + NAME_CUBE_PREFAB);
GameObject cube = Instantiate(pref) as GameObject;

Resources.Load(Prefabの場所と名前);

で、できるようっす。

これで、prefabの名前に0とか10とかつけて、ランダムのオブジェクトが生成できるってことっすね。

あ、ちなみにこうやってInstantiateした時でも、Resources.UnloadUnusedAssets()とかで、リソース解放しないとダメなんですかね?

リソース解放まわりよく分かっていないんですよね・・・・・どなたか教えて頂ければ幸いです!

え?今頃こんなネタ書くなって?すいません

ネタ探しの旅に出ますorz アデュ~ノシ

Category: 開発日記(Unity)

Tag: Unity 
tb 0 : cm 0   

【Unity】SNS連携って 

こんにちは。大坂です。

早速ですが皆さんはアプリを作っていてSNS連携したいときってどうしていますかね?
前にブログでちょっと紹介した「Application.OpenURL」の方法が簡単なのですが、
最近だとアプリ内に仕込んだ画像やスクリーンショット画像も一緒に付けたいことがあるので、使用しているPluginの紹介。

social-connectorというプラグインです。
各SNSとの連携もできますし使い方も簡単です。

一応サンプルです。
画面のスクショを取ってツイートする感じのサンプルです。
IEnumerator
// 文言
String text = "ハルシオンシステム"
// URL
String url = "http://halcyon-system.com"
// スクショ
Application.CaptureScreenshot("image.png");
String path = Application.persistentDataPath + "/image.png";
// ソーシャルコネクターでSNS連携
SocialConnector.Share(text, url, path);

はい!これだけでできます!便利なプラグインもある物です。
iOSの場合はLINEのアイコン画像を入れる作業も必要になりますが、
これもプラグインのページに書いてあるのでそのままです。

ネイティブでいろいろできれば自分でもPluginとか作れるのでしょうが・・・。
JavaならまだしもObjective-cはさっぱりです。

では今週もこの辺でノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【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;

[System.Serializable()]
public class SaveData{
[System.Serializable()]
public class InnerClass{
public string ppppppp;
public int ggggggg;
}

public int aaaaaaa;
public float bbbbbb;
public string cccccccc;
public int[] ddddddd;
public InnerClass eeeeeeee;

}

と、まぁどんな形のクラスでもいいですが、シリアライズできるならそのままマルっと保存できちゃいます。
もちろん上記のように内部クラスがあっても問題ナッシング!
なんでも保存できちゃうのが素敵っすよね!
もちろん、AndroidiOSどっちも対応してます。

ということで、Unityのデータ保存ライフ楽しんで! アデュ~ノシ

Category: 開発日記(Unity)

Tag: Unity  Android  iOS 
tb 0 : cm 0   

【Unity】iOSアプリでipadの判別 

こんにちは。
大坂です。

日曜月曜あたりはは台風がすごかったですね。
また次の台風も直撃しそうですが・・。しかもかなり大型とか。

さて今週もすごく短い小ネタです。

UnityでiOSアプリのipadの判定方法です。
AndroidアプリとかiOSアプリとかは以下で判別できますよね。
#if UNITY_ANDROID
//Androidの処理
#elif UNITY_IPHONE || UNITY_IOS
//iOSの処理
#endif
とか。
で、iOS内でさらにipadを分けたい場合は「SystemInfo.deviceModel」を使用して。
if(SystemInfo.deviceModel.Contains ("iPad")) {
// ipadでの処理
}
とすれば振り分けられました。
必要な場面も少なそうですが、最近ちょっと使ったので。

今週はこれで終わり!
ではまた来週!
ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【その他の日記】ゲーム作りの反省と嘆き、今週の予定など  

台風がすごいっす。
雨風すごいっす。
坂内っす。

うちの庭に池ができました\(^o^)/

本日は技術的ネタ不足のため、ゲームを作っていく上での俺の嘆きと反省を箇条書きにしたいと思います。
「わかるわかる!」や「なんでそこで悩むんだよ!」等色々なご意見ありましたら、どしどし募集します。

ではっ!れっつらごー!

■面白さの作り方が分からない
■なんか世界感が統一されない
■物足りないと思って、色々考えていくうちにシステム増えすぎて、終わりが見えなくなる
■大雑把。もっと細かいところに目を向けたい
■適当。もっとこまk(ry
■演出が思いつかない。思いついても作り方が分からない
■クラスの継承とかすればいいのに、全然使ってない
■本みても、ばかだから理解できない
■ねむい
■エフェクトが思いつかない。思いついてもつk(ry
■カジュアルゲームがおm
■デザインが難しい 分かない センスない 
■ブログのネタがなくなる
■新しい技術を使うタイミングが分からないため、ずっとごり押し
■iphone持ってない。ipadも持ってない。Macなんてもっと持ってない
■UIが難しい。しっくりくるUIが考えられない
■いずれスマホで格闘ゲーム作ってみたいが、操作むずそう
■なんだかんだで、作り終わるまで時間がかかるものばっかりやってしまう
■カジュアル作っても1食分くらいしか稼げない。餓死しちゃいそう
■ルナダン?なにそれ?ってくらいの知名度。くそー!!かせいでやるうううう!!!
■AIDさんの交流会いきます
■AdGeneさんのビールナイトいきます
■ベネッセから情報流出おめでとう!募金してねって手紙きた。あふぉか!!
■人見知り
■コミュ症
■あ、晴れた!


ってことで、現在は育成ゲーム作成中です!
全て絵も描きおろし!
こいつは楽しみだぜぃ!

エンディングはなんと30種類以上!!(現在開発中のため変更の可能性はあります)
こいつは楽しみだぜぃ!

可愛い娘をあなたのお好きに育ててね!!!
こいつは楽しみだぜぃ!

では、アデュ~ノシ

Category: その他日記

tb 0 : cm 0   

【iOS】手動リジェクト時のメモ 

こんにちは。大坂です。

最近秋らしい気温になってきて過ごしやすいですね!
でも明日30度とか・・・やめてください!
気温差が激しいので皆さん体調を崩さないように気を付けてください。
・・・私はすでにだめですけどね。

さて、先日Appleさまに申請中のアプリでバグを見つけて手動リジェクトして修正版を上げようとしたときのお話です。
嵌ったというほどでもないですが、あんまり時間がないときにやっていたので、焦りました。

今までは修正したバイナリをそのままアップすれば再申請にできたはずと思ったのですが、どうもうまくいかない。
エラーをちゃんと見ればわかるのですが、仕様が変わったらしく、
ビルドバージョンを変えないといけなくなったみたいです。
Xcodeでちゃちゃっとバージョン変えてアップロードすればいけました。
アップロード後、ちょっと時間がたたないとitunes connectでアップロードしたバイナリが選択できないので、
焦らずちょっと待ちましょう。

色々キャプチャとかあればよかったのですが、取り忘れました。。
こんなこともあったと忘れない程度のメモで申し訳ないですorz

では今週はこれにてノシ

Category: その他日記

tb 0 : cm 0