FC2ブログ
    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やらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】ボタンを押しっぱなしにして処理を連続で行いたい場合とかね 

    こんにちは。
    大坂です。

    さてはて今週も木曜日です。
    なんかどこにでもあるネタですが。
    押しっぱなしにして処理を連続で行いたい場合なんかの時ね。

    まぁEventTriggerを使ってフラグ立ててUpdateで処理を呼び出すだけなんですけどね。

    とりあえずこんな感じのコード。
        public Text text;

    // 押したフラグ
    bool longTapFlg;
    // 押してから処理を連続で流すまでの時間
    const float LONG_TAP_TIME = 1f;
    // 時間のカウント用
    float longTapCounter;

    public void OnBtnDown() {
    // ボタンを押した時にフラグを立てる
    longTapFlg = true;
    }

    public void OnBtnUp() {
    // ボタンを離した時にフラグを落とす
    longTapFlg = false;
    // 時間のカウントを初期化
    longTapCounter = 0;
    }

    public void UpdateText() {
    // 適当に更新する処理
    counter++;
    text.text = counter.ToString();
    }

    void Update() {
    // フラグが立ったら時間をカウント
    if(longTapFlg) {
    longTapCounter += Time.deltaTime;
    // 設定した時間を越えたら処理をさせる
    if(LONG_TAP_TIME <= longTapCounter) {
    UpdateText();
    }
    }
    }


    あとは適当なオブジェクトにEventTriggerを付けて設定してあげれば行けますね。
    今回はボタンにつけてます。
    1クリックの処理もしたいときはボタンもつけてボタンのOnClickにも処理させたいのを付けておくとできますね。
    こんな感じ。


    で、動かしたのはこんな感じ。


    何となくそれっぽく動いてますね。
    今日もこれで終わりです。

    ではまたノシ

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    【ハルシオンブログ】TGS2017いってきたどー (いつもどおり報告だけ) 

    こんにちは!坂内っす。
    1週間経つの早いものですね!

    さて先週木曜~日曜にかけ東京ゲームショー2017なるものが開催されていました。

    今年も行ってきましたよ!
    ほら!


    金曜日(ビジネスデー)に行ってきました。

    中に入るとこう!


    はい、写真終了!

    あとはコンパニオンの写真しかとってな(それでも10枚くらい)い。

    あ、いくつかお邪魔したブースの写真があったかな…(ごそごそ








    他にも「from_.」のNakajimaさんブースや、「SOULLOGUE」のはちのすさんブースなど、いくつか見てきました。

    あ、ヤスヒロメットかぶってるの激写されました。


    毎年13時頃からゲームショー入って、4時間くらいしかないんすよね。
    全部見れないっすもんね。

    それも、たった4時間だけなのに足もげそうになるし。

    来年は朝から行って、1日まわってやるぞい!

    ではあでゅ~ノシ

    Category: その他日記

    tb 0 : cm 0   

    【ハルシオンブログ】TimeSpan(日付差分とかとったとき)のカスタム書式 

    こんにちは。
    大坂です。

    今日は昼は30度近くいくらしいですが、夕方、夜はひんやりらしいのでお出かけしている人たちはお気を付けを。
    出かけてたら遅いかもしれませんが…。

    では今週のネタです。
    日付差分を取った後にその差分をTextに出すときカスタム書式を使いたかったてお話です。
    差分を取るとTimeSpanになるのですがそいつのToStringがちょっと癖があるって感じなだけですが。

    とりあえず普通にToStringをするとこんな感じで取れます。
    ミリ秒以下を使いたいときはこれでも問題ないですかね。

    簡単なコード
    public class BlogTest : MonoBehaviour {
    public Text text;
    DateTime time;

    void Start () {
    // 現在から2時間後を設定
    time = DateTime.Now.AddHours(2);
    }
    void Update () {
    // 現在時刻との差分をテキストに表示
    text.text = (time - DateTime.Now).ToString();
    }
    }

    表示されてるテキスト

    ※クリックすると少しだけ動きます。

    ToStringにそのまま書式を設定できればいいんですけどできないので、こんな感じでやればできます。。

    text.text = new DateTime(0).Add(time - DateTime.Now).ToString("HH:mm:ss");


    これで指定した書式でちゃんと表示されますね。

    ※クリックすると少しだけ動きます。

    こんなことがしたい人がいるのか謎ですが、何かの参考になればいいですね!
    では今週もこれで終わりますノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unityで複数オブジェクトをアサインする時にいっぱいあるとめんどいですよね。こうすればいいらしいですよ? 

    こんにちは!
    台風過ぎたら暑いっすねぇ~ 坂内です。

    さて、今週は金曜日にTGS2017にいてきますよ!
    全然飲みでしか外出しないくらい歩いてないので、毎年TGS行くと足が攣ったり筋肉痛に・・・
    どんだけひ弱なんでしょうか。
    今年もいくつかのブースにお邪魔しますが、面白い話聞けたらいいなぁ
    とりあえずTGS終わった後に飲もうかなって思ってますが、金曜の夜海浜幕張辺りで飲みたいと思ってる方いたら、Twitterで@zabosamaまでお声かけください。

    それじゃUnityのお話。

    ちょっとした小技ですが、「複数のオブジェクトをまとめてアサインする方法」です。

    例えばこんな感じの物を作って。



    こんなコードを書いた場合。
    using UnityEngine;
    using UnityEngine.UI;

    public class TestBlog : MonoBehaviour {

    public Text[] texts;

    void Start () {
    for (int i = 0; i < texts.Length; i++) {
    texts[i].text = "テキスト" + i;
    }
    }
    }


    textsにuGUIのテキストを全部アサインしようとすると、こうやってました。



    めんどくさーーーーい!!

    これ、7個くらいならまだいいけど、20個とかそれ以上とかいちいちやってられませんよね!

    そんな時は以下のようにすると1発でできますよ!

    ①アサイン先のコンポーネントのInspectorをLock!!!
    ②テキストオブジェクトを全部選択して、アサイン先へドラッグ&ドロップ!!

    これだけ!!!





    ほら!ほらほら!
    めっちゃ簡単!

    あれ?皆さん知ってました?

    俺最近知りましたよ・・・・

    って簡単な小技でした!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】シーンにあるオブジェクトを別シーンに移すのに一回プレハブにして移すときは気をつけようねって話 

    こんにちは。
    大坂です。

    今週ももう木曜日ですね。
    あっという間に日が進んでいる気がします。
    年だからですかね?

    まぁ今週も適当なネタで書いていきますかね。

    現状作っているシーンのオブジェクトをそのシーンからは消して、新しいシーンに移すときなんかに一回プレハブにして移すんですかね?
    この前そんな感じでやった時にミスったので気をつけようねって話です。
    まぁそんなことする人はあんまりいないのかもしれませんが。

    とりあえずこんな感じでやると失敗するよと。








    うん。なくなりましたね。
    そりゃそうなんでしょう。
    ということでちゃんとプレハブのつながりを消しましょうということで、Hierarchyのプレハブのオブジェクトを選択して、
    メニューの「GameObject」-「Break Prefab Instance」をしましょうねというだけの話。
    これね。


    これやってから消したら解決です。


    ということで今週も適当に終わりです。
    ではまたです。ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】UnityにてInstantiateしたあとにSetParentしたらサイズがでかいんすけど?え?こうすればいいんじゃない?って話 

    こんにちは!
    もう来週TGSじゃないですか、やだー
    遠いな・・・・楽しみだけど。

    さて、Unityのちょっとしたネタ。

    PrefabをInstantiate化した後に、SetParentをするとサイズがぶっ飛ぶお話し。
    これ以前にも一度したことがあるんですが、ちょっと気になったTLがあったので書いてみます。


    さて、実験してみましょ。

    groupオブジェクトは空のGameObject。


    redオブジェクトと、blueオブジェクトはそれぞれPrefabにしておきます。

    Canvasオブジェクトに、以下のコンポーネントを付けます。

    [Test.cs]
    using UnityEngine;

    public class Test : MonoBehaviour {

    public GameObject redPref;
    public GameObject bluePref;

    void Start () {
    Instantiate(redPref);
    Instantiate(bluePref);
    }
    }



    これで実行しても↓こんな感じのサイズになってしまいます。
    といってもCanvasの下にないので表示されていませんが。


    それでは、親をgroupオブジェクトにしてInstantiateしてみましょう。

    using UnityEngine;

    public class Test : MonoBehaviour {

    public GameObject redPref;
    public GameObject bluePref;
    public Transform transformGroup;

    void Start() {
    GameObject redObj = Instantiate(redPref);
    redObj.transform.SetParent(transformGroup);

    GameObject blueObj = Instantiate(bluePref);
    blueObj.transform.SetParent(transformGroup,false);
    }
    }




    赤いオブジェクトの方が大きいまま、青いオブジェクトが小さい(想定サイズ)になります。

    違いは、青いオブジェクトのSetParentの第2引数に「false」を入れています。



    公式ドキュメントにも書かれていますが、第2引数がtrue(何も書かないとき)は「オブジェクトが以前と同じワールド空間位置、回転、およびスケールを維持」
    ということで、falseを入れてあげることでプレハブのサイズ等を反映する感じになるっぽいっす。

    ただし、以前ハルシオンブログで書かれているこちら
    http://halcyonsystemblog.blog.fc2.com/blog-entry-330.html

    こっちの方が楽なので、こっちでいいんじゃないかと。

    using UnityEngine;

    public class Test : MonoBehaviour {

    public GameObject redPref;
    public GameObject bluePref;
    public Transform transformGroup;

    void Start() {
    Instantiate(redPref,transformGroup,false);
    Instantiate(bluePref,transformGroup,false);
    }
    }





    ということでInstantiateしてSetParentする流れについてでした。

    それではあでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】いろんなシーンのクラスからアクセスが必要な時にやってること。 

    こんにちは。
    大坂です。

    今日はすごくジメジメいしていますね。
    Tiwtterのトレンドでも湿度100%とかって上がってました。。

    さて、今週もちょっとしたネタです。
    ゲームを作っているときに必要な情報を使用していろんなクラスからの処理をしたいときに、
    いろんなクラスで毎回GameObjectを探してGetComponentしてってやるのも面倒なので、Staticにアクセスできるようにすると楽だよねってお話です。

    とりあえずこんな感じ。
    public class ItemManager : MonoBehaviour {

    protected static ItemManager instance;
    public static ItemManager Instance {
    get {
    if(instance == null) {
    instance = (ItemManager)FindObjectOfType(typeof(ItemManager));
    }
    return instance;
    }
    }

    void Awake() {
    // シーン遷移では破棄させない
    DontDestroyOnLoad(gameObject);
    }

    public void AddItem(ItemData data) {
    // アイテムを追加する処理
    ~~~~~
    }
    }

    かなり簡略化した例ですけど、アイテムを管理するクラスです。
    ショップでアイテム買ったときとかドロップしたアイテムを拾うとか。
    違うシーンで使うことを想定している感じです。

    使い方はこんな感じ。
    public class ItemTest : MonoBehaviour {
    void Start() {
    ItemData data = new ItemData();
    // アイテム情報を作る処理は省略
    ~~~~~
    ItemManager.Instance.AddItem(data);
    }
    }

    簡単に処理を呼び出せますね。

    と、こんなクラスを利用してゲームを作ったりしてますよってお話でした。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】UnityのuGUIで、ImageのサイズをTextのサイズと連動したいよねって時のやり方。 

    こんにちは。坂内っす。
    いきなり涼しくなってきました。
    風邪にお気をつけてくださいまし。

    さてもういくつねるとTGSですね。
    多分今年も行くんじゃないかと思ってます。

    さて、Unityのお話。

    uGUIのImageの表にTextを置き、Textの量によって後ろのイメージのサイズも大きくしたい!!

    こういうのね。




    普通にImageの子供にText置くだけだと、こうなっちゃいますよね。




    以下の設定をすると背景のサイズも変わりますよ。




    背景のImageの設定
    [追加]Vertical Layout Group
    [追加]Contet Size Fitter
    ⇒Vertical FitをPreferred Sizeへ変更

    Textの設定
    [追加]Contet Size Fitter
    ⇒Vertical FitをPreferred Sizeへ変更

    はい、これだけ。

    ちなみにImageのPivot-Yを「1」にすることで、上部の位置を固定して、以下のような動きになります。
    (こっちのほうが使うかな)




    ということで、本日はこれまで!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0