FC2ブログ
    12 «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.» 02

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

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

     

    【Unity】コルーチン処理を別クラスにして共通処理にしたかった… 

    こんにちは。
    大坂です。

    最近は随分寒い日が多かったですが、今日は多少あったかいみたいですね。
    関東は明日から雨みたいですけど…orz

    さて今週もちょっとしたネタを!
    コルーチンっていつも自クラス内だけで使ってたんですけど、外のクラスのも呼べるんですね。
    まぁそうですよね…
    ちょっとサーバーからダウンロードした画像取得とかの処理を一か所にまとめたかったのでこんな感じにしてみましたが、
    もっといい方法あったら教えてくださいまし!

    共通クラスの処理
      Sprite file = null;

    public IEnumerator CreateSprite(string fileName) {
    // ダウンロードしたファイルが存在するかチェック
    if(System.IO.File.Exists(Application.persistentDataPath + "/" + fileName)) {
    string path;
    //エディタだと取得パスが違うので振り分け
    #if UNITY_EDITOR
    path = "file:///" + Application.persistentDataPath + "/"
    #else
    path = "file://" + Application.persistentDataPath + "/";
    #endif
    WWW www = new WWW(path + fileName);
    while(!www.isDone) {
    yield return null;
    }
    Texture2D tex2D = www.textureNonReadable;
    file = Sprite.Create(tex2D, new Rect(0, 0, tex2D.width, tex2D.height), Vector2.zero);
    }
    }

    public Sprite GetSprite() {
    return file;
    }

    ざっくりこんな感じ。
    一応ダウンロードしたファイルが存在するかチェックしてから処理開始してます。

    呼び出し側
      Image test;
    FileController fileController

    void Start() {
    // 共通処理クラスの取得
    fileController = …;
    // ファイル取得処理の呼び出し
    StartCoroutine(GetDownloadSprite({ファイル名}));
    }

    IEnumerator GetDownloadSprite(string fileName) {
    // コルーチン処理が終わってから次の処理に行かせたい。
    yield return StartCoroutine(fileController.CreateSprite(fileName));
    test.sprite = fileController.GetSprite();
    }

    これで目的の処理は達成できましたとさ。

    ではではまた来週ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    アプリ開発者の新年会いってきたよ!写真は1枚もありません(個人情報保護のため) 

    こにゃにゃちわ。坂内っす。

    1月22日にアプリ開発者の新年会ありましたので、行ってきました!

    人多かったでっす!

    結局何人いたんだろ?115人?

    沖縄から北海道、はては韓国から集まった盛大な飲みだった!幹事の方お疲れ様でした!

    人見知り激しいので、なかなか他の席に入り込んで行って仲良くするってのができないため、知ってる方との交流が増えてしまう悪い癖がありますが、今回は名刺12枚ほど頂きました。
    と、いっても。半分以上は知り合いですね。
    今思うと初めてアプリ開発者の飲みにいったのが、一昨年の夏ですか。
    1年半で色々な方と仲良くなれて嬉しいっす。
    今後も仲良くしてください。いやまじで。

    それと、飲み会等で「よくブログ見てます」って言われるとすげー嬉しいっすね。
    中身スッカスカなのに本当有難うございます!


    来週の月曜はちょっと技術系の話を書ければと思っております。

    あ、開発の方ですが、お待たせしております、ポケットガール2(仮)は、2月中旬に予約TOP10に出したいと思います。
    予定より1か月半遅れてしまいますが、3月中旬にはリリースができるように頑張って開発中でございます!

    最後に募集。
    「1月29日(金)19時くらいから、横浜中華街でシュラスコ食べ放題行きませんか?現在2名です。アプリ開発者からポケガファンまでだ、だ、だれでも来たれいww」

    もうね、本当に人見知りなのかどうか自分でも分からなくなってきました。

    ではアデュ~ノシ

    Category: その他日記

    tb 0 : cm 0   

    【Unity】Maskって便利ですよね? 

    こんにちは。
    大坂です。

    もう木曜日ですか。
    ……orz

    今週はMaskについて。
    スクロールの時とかに使ってますがなかなか便利な機能ですよね。
    マスクした背景から他の絵をはみ出させたくない時とかに使えます。

    こんな表示ですね。
     

    使い方は簡単で上で言う三角とか丸のImageオブジェクトにMaskを付けてあげるだけ。


    そのImageオブジェクトの子供にはみ出させたくないオブジェクトをおけば終わりです。


    では今週もこれにて。
    また来週ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    ポケットガール2完成間近か!? 

    雪積もってますね。
    明日はアイスバーンでしょう。
    通勤の方お気をつけてくださいませ。
    僕は今日明日共に家から出ません。

    3日連続昼飯がカップラーメンの坂内っす。

    大変お待たせしているポケットガール2の完成間近か!?



    はい!* ゚・*:.。.:*・゜+ d(*´∀`)b うそです +.:*・゜゚・*:. *




    1月中にはあげたかったんだけど・・・・・

    伸びに伸びて、2月末か3月か・・・・

    いやはや、難航しております。


    最近は1日中仕様検討会議とかばっかやってて魂やばいっすわ。

    1の焼き増しだけにはしたくない、ただポケットガールなんで、1やってた人が入り込みやすいUI。
    AじゃなくしたいけどAにしたい。

    うん。難しい。

    ストーリーとかNPCとかは全部新規なので、いいんですけどね!

    とりあえずこんな感じ。



    背景が未だに仮なのは気にしないでね!

    あとは演出とかエフェクトとかが一番の問題になります。

    その辺大の苦手メンバーなんで、誰かプロデュースしてくださいorz
    大金とかないんで、趣味とかでやってくれる人いませんか?orz
    案とかイメージ画像とかでいいんで。後はこっちで頑張って作ります!
    ゚(゚^∀^゚)゚。ギャーハッハッハッハッハッハハッハッハッハッハッハ !!

    あ、ポケガ2でやりたいこととしては、着せ替えっすね。

    何が着せ替えって、サーバの方に着せ替えデータ置けば、ゲーム中にリアルタイムに追加できる点。

    コラボとかやりたいと思うんですよ。

    服書いてもらうか、こっちで書くとして、その人の作った服をポケガ2で採用!とかが簡単にできちゃう予定!

    もちろんちゃんとした画像頂きますけど。

    どなたかコラボしませんか?

    まぁ、まだその辺の根底部分作ってないんですけど、サーバから着せ替えデータ持ってくるところは完成してる。

    という感じで。ポケガ2はもう少しかかりそうです。

    2はストーリーもあり、読んでも楽しいものになるかと思うので、もうしばらくお待ちくださいませ!


    では今日はこれにて!アデュ~ノシ

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    【Unity】Unityが非アクティブでも動作を進めさせておく。 

    こんにちは。
    大坂です。

    最近急に寒くなりましたね!
    昨日は一日会議して飲み行ってしまったので一日遅れです(ぇ
    泡盛はしばらく飲まないと思います…orz

    はい、今週も超小ネタですよ!
    Unityでゲームの動作確認をするときに他のことをちょこっとやってたい時とか、
    Unityが非アクティブの場合でもゲームの動作を進めておく方法です。
    Player SettingsでRun In Backgroundにチェックを入れるだけです!


    はい!以上ですよ!
    そんなことしたい人がいたらとっくに調べてますかね!

    では、また来週ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【Unity】【Unity】オブジェクトの親子関係って意外とめんどいよね。でもね、こうやったら子供が取れたんすわ!パート2!! 

    はい、こんにちは。坂内っす。
    はぁーーー しばれるねー!
    家おんぼろなんで隙間風はいってくるから、ちょー寒い!

    Unityでオブジェクトを検索する時ってどうしてます?
    基本Find?確かに楽ですけど、Findって多用すると重くなるってことで、なるべくなら始めからアサインしたりしてます。
    あとはFindGameObjectWithTag使ってTagで検索するってことやってます。

    また、子供の指定のオブジェクトを取ってきたりするのって意外とめんどいですよね。
    過去のブログで取ってくる方法も書いたりしていました。
    【Unity】オブジェクトの親子関係って意外とめんどいよね。でもね、こうやったら子供が取れたんすわ!

    ちょっと他の方法を試してみた。


    例えばオブジェクトのAをアサインした状態で、A>Panel>Set2>Button2のテキストを変えたい時。


    public class AssetTest1 : MonoBehaviour {

    public GameObject objA;
    public GameObject objB;

      void Start () {
    objA.transform.Find("Panel/Set2/Button2/Text").GetComponent().text = "aaaaa";
    }
    }


    これでいけますね。

    Set1やSet2の子供を色々といじるようであれば、Set1,Set2をアサインしてしまってもいいのかもしれません。
    こんな感じですね。


    using UnityEngine;
    using UnityEngine.UI;
    using System.Collections;

    public class AssetTest1 : MonoBehaviour {

    //public GameObject objA;
    //public GameObject objB;

    public GameObject objSet1;
    public GameObject objSet2;

    void Start () {
    objSet2.transform.Find("Button2/Text").GetComponent().text = "AAAAA";
    }
    }



    まぁ上記のようにしてもオブジェクトとれるよー というのに加えて、便利なアセットもあります。

    【LINQ to GameObject】

    これなんですけどね。

    これ使うと、色々とオブジェクトを取るのが楽になるとか?ならないとか?
    例えば、先ほどのButton2>Textを取る場合は・・・・・



    using UnityEngine;
    using UnityEngine.UI;
    using System.Collections;
    using System.Linq;
    using Unity.Linq;

    public class AssetTest1 : MonoBehaviour {

    public GameObject objA;
    public GameObject objB;

    void Start () {
    var button2 = objA.Descendants().Where(x => x.name == "Set2").Children().Where(x => x.name == "Button2").Descendants().Where(x => x.name == "Text");
    foreach(var item in button2) {
    item.GetComponent().text = "BBB";
    }
    }
    }


    あ、くっそめんどくせ。
    これめんどくさいのって、Set1とSet2の両方にButton2というのがあるからであって、オブジェクト名が1個しかないものについては、簡単だと思うんですよね。
    例えば、Button1のTextの名前を「Set2Button1Text」とかにしちゃう。

    こんな感じね。
    そうすれば、これでできる。


    using UnityEngine;
    using UnityEngine.UI;
    using System.Collections;
    using System.Linq;
    using Unity.Linq;

    public class AssetTest1 : MonoBehaviour {

    public GameObject objA;
    public GameObject objB;

    void Start () {
    var button1Text = objA.Descendants().OfComponent().Where(x => x.name == "Set2Button1Text");
    foreach(var item in button1Text) {
    item.text = "CCCC";
    }
    }
    }


    まぁ、楽になったよね。

    LINQ to GameObjectは他にも色々なコマンドがあります。
    再び、以下のオブジェクト配置をベースにこのアセットの機能の一部をご紹介!



    ●子供のオブジェクトを取る。
    objA.Child("Panel");
    ⇒ Panelオブジェクトが取れる
    ●親のオブジェクトを取る。
    objB.Parent();
    ⇒ Aオブジェクトが取れる。
    ●子以下についている全てのオブジェクトを取る。
    objA.Descendants();
    ⇒ B、TextA、TextB、TextC、Panel、Set1、Button、Text、Button1、Text、Button2、Text、Set2、Button、Text、Button1、Text、Button2、Textのオブジェクトが取れる。
    ●子以下についている全てのオブジェクトの中から特定オブジェクトを取る。
    objA.Descendants("Set1");
    ⇒ Set1オブジェクトが取れる。
    ●子以下についているオブジェクトから特定コンポーネントがついているオブジェクトを取る。
    objA.Descendants().OfComponent();
    ⇒ TextA、TextB、TextC、Set1>Button>Text、Set1>Button1>Text、Set1>Button2>Text、Set2>Button>Text、Set2>Button1>Text、Set2>Button2>Textのオブジェクトが取れる。
    ●LINQを条件として使用し、特定のオブジェクトを取る。
    objA.Descendants().Where(x => x.name.StartsWith("Button"));
    ⇒ Set1>Button、Set1>Button1、Set1>Button2、Set2>Button、Set2>Button1、Set2>Button2のオブジェクトが取れる。



    使いやすい方法で取るといいと思うよ!
    ただし、なんでもかんでもFindで終わらせると、あんまり良くないって話しです。

    ということで、役に立てばいいんすけどね。あでゅーノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【Unity】AndroidのURLスキームの設定【Andriod】 

    明けましておめでとうございます!
    今年もよろしくお願い致します!

    大坂担当ブログ今年1発目ですね。
    ネタ…ネタ…
    年初めからこんな感じでネタはありませんけど、どうしましょうかね。

    といってても仕方ないので今年も小ネタを積み重ねていきたいと思います。
    使うことがあるのかどうか、AndroidでURLスキームの設定ですね。
    とくにUnityのネタってわけじゃないですけど。
    設定はこんな感じでAndroidManifest.xmlに書くだけです。

    <activity
    android:name="com.unity3d.player.UnityPlayerProxyActivity"
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:screenOrientation="portrait" >
    <meta-data
    android:name="unityplayer.ForwardNativeEventsToDalvik"
    android:value="true" />
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="hogehoge"/>
    </intent-filter>


    太字のところがURLスキームの設定です。
    hogehogeのところを設定したいURLスキームにしてあげればOKです!

    では今週はこれにて!
    また来週ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    新年のご挨拶と、今年の抱負。 

    明けましておめでとうございます。

    今年も一年、株式会社ハルシオンシステムをよろしくお願い致します。

    年始1発目のブログでございます。はい、坂内っす。

    もちろん技術関連の話はなく、ただの挨拶とさせて頂きます。

    今年の抱負はこちら!
    「ポケガ2を始め、ポケットシリーズをもう少し充実させていこうと思うのと同時に、ほかのアプリも色々作っていき、合計10本は2016年にリリースする!」

    また皆様のお世話になるかと思いますが、どうぞ暖かく見守って下さいませ。

    まずは全力でポケガ2の完成に漕ぎ付きたいところです!!!

    また、今年も去年と変わらず技術系のネタがあり次第メモを書いていきます、皆さまのお役に立てれば幸いです。
    (去年末にまとめた技術系一覧もどうぞ こちら

    では、アデュ~ノシ

    Category: その他日記

    tb 0 : cm 0