FC2ブログ
    05 «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.» 07

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

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

     

    【ハルシオンブログ】Unityのパッケージマネージャーにローカル通知のやつがあったので試してみたよ(Android) 

    こんにちは。坂内っす。

    そういえばUnity+スマホでのローカル通知って、今簡単にできるんです?
    試しにやってみました。
    あ、iOS版は色々めんどそうなので、Android版のみ行っています。

    ①パッケージマネージャーで、「Mobile Notifications」をインストール


    ②Project SettingにMobileNotificationの項目が増えているので、アイコンタイプとアイコンを指定


    ③ローカル通知用クラスの作成
    【LocalNotification.cs】

    using Unity.Notifications.Android;

    public static class LocalNotification {

    private static string ChannelId = "ch_0";

    ///
    /// 通知チャンネルの登録
    ///

    public static void Initialize() {
    AndroidNotificationChannel channel = new AndroidNotificationChannel{
    Id = ChannelId,
    Name = "Channel Name",
    Importance = Importance.High,
    Description = "Description"
    };
    AndroidNotificationCenter.RegisterNotificationChannel(channel);
    }

    ///
    /// ローカル通知を登録
    ///

    /// タイトル
    /// 本文
    /// 何秒後に通知をするか
    public static void ReserveNotification(string title, string body, int afterSec) {

    // 通知チャンネルを登録
    Initialize();

    // 通知を送信する
    AndroidNotification notification = new AndroidNotification {
    Title = title,
    Text = body,
    // アイコンをそれぞれセット
    SmallIcon = "icon_0",
    LargeIcon = "icon_1",
    // 今から何秒後に通知をするか?
    FireTime = System.DateTime.Now.AddSeconds(afterSec)
    };
    AndroidNotificationCenter.SendNotification(notification, ChannelId);
    }
    }


    で、呼ぶところはこんな感じ。

    【Blog2020629.cs】

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Blog20200629 : MonoBehaviour
    {
    void Start()
    {
    LocalNotification.ReserveNotification("ポケガからのお知らせ", "冒険がおわったよ。きてみてさわって。", 30);
    }
    }



    こんな感じ。

    これで起動すると、ちゃんとローカル通知が来るよ!



    あっ!!



    アイコン(小)がでてない!?


    で、確認すると・・・・



    小さい方のプレビューが出てませんね。
    もとのアイコンのファイルが1024x1024で大きいからだめなのかな?

    こんなのが書いてますね。


    Only icons added to this list or manually added to the `res/drawable` folder can be used by notifications.
    Small icons can only be composed simply of white pixels on a transparent backdrop and must be at least 48x48 pixels.
    Large icons can contain any colors but must be not smaller than 192x192 pixels.


    小さいアイコンは48x48で、透過背景に白だけで書いてね。

    なるほど。

    そんな感じで小さいアイコンできるらしいっす。



    48x48でこんなの作ってみた。



    なったw

    こんな感じで、簡単にローカル通知が導入できるようになりましたね!

    問題はIOSだけど・・・・・それはまた・・・・今度‥書くかもしれないし、書かないかもしれない!

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Visual Studio でオートフォーマットの無効化 

    こんにちは。
    大坂です。

    タイトル通りですが、Visual Studio でオートフォーマットの無効化したいときのお話。
    設定は、「ツール」-「オプション」でオプションを開いてC#の場合は以下でできます。


    オートフォーマットをタイミング別で有効、無効が変えられます。
    プロジェクトでフォーマットを決めてやっていれば無効にする必要もないんですけどね。
    自分の場合は、フォーマットが決まっていないときに別のテキストに一旦コードを貼り付けて、
    戻したときにフォーマットが変わってGitにあげるときに差分が出てしまうのが嫌で貼り付け時のは無効化したりしています。

    それぞれのタイミングの説明はここにあるので確認してみてください。
    https://docs.microsoft.com/ja-jp/visualstudio/ide/reference/options-text-editor-csharp-formatting?view=vs-2019

    ではでは、今週もこの辺でノシ

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    【ハルシオンブログ】 DoTweenProを長年もっていたけど、Proの機能使ったことがなかった!何ができるかちょっと調べてみたよ!  

    こんにちは。坂内っす。

    梅雨ですな。

    朝から雨がしとしとと降り続いています。

    そういえばDoTweenってProを入れているのに、普通にしか使っていなく、Proの良さを知らないままです。

    一体DoTweenProには何があるのか少し調査。

    【其ノ1:DoTween Pathコンポーネント】
    オブジェクトにAddComponentをして、Inscpectorで設定することで、Tweenをすることができる。
    つけた後に、SHIFT+CTRL+クリックで、好きなパスを作れる。



    適当にこんなパスを作ってみる。



    DoTweenPathでDurationやDelay、Ease、Loopなども設定できる。
    Eventなんかもここで設定できるので、大体のことがInspectorで設定することができる感じ。

    ただ、スタートのタイミングは別途呼ばないといけなそうなので、実行した直後から勝手に動くもの以外は、TweenOptionのAutoPlayを外しておかないといけないぽい。

    コードから呼べば動かすこともできる感じですかね。


    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using DG.Tweening;

    public class Blog20200622 : MonoBehaviour
    {
    public DOTweenPath dtPath;

    IEnumerator Start() {
    yield return new WaitForSeconds(3f);
    dtPath.DOPlay();
    }
    }


    dtPathにはDoTweenPathがついているCubeをアサイン。



    こんな感じで動かすことができました。


    【其ノ2:DoTween Animationコンポーネント】
    オブジェクトに対するアニメーションを設定できます。
    設定できるアニメーションの種類はこんな感じ。



    結構色々できますね。

    この辺の値をいじいじすることで、お好きなアニメーションのTweenが作れちゃう。

    もちろんそうなんだけど、うれしい機能としては、実行しなくても見れるところ。



    こんな感じで、動きを確認できる!

    これがProのいいところ!?


    軽くみたところ、この2つがProだけの機能ですかね。

    とても使いやすいけど、1つのオブジェクトに対して、複数のTweenをやるときはどうするんだろうか・・・・

    結局コードでアニメーションをくみ上げて動かす感じになるのかな?

    そうなると、結局Proいらないじゃないってなっちゃいますね・・・・

    「ボタンを押したときにこういう感じでTweenさせたい」等の決まった動きだけならProだけで全然問題ないですが。
    もちろんコードで書くわけではないので、デザイナーさんがいじり倒しやすいという利点もありますね。

    ということで、DoTweenProのPro独自の機能についての紹介でした。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】LinqのFirstって条件指定できるんですね。 

    こんにちは。
    大坂です。

    梅雨でジメジメしますね。
    コロナもまだまだ気をつけないといけなさそうですが、蒸し暑い日が多いので、みなさま熱中症には気をつけてくださいませ。

    さて今週もLinqの小ネタ。
    Firstって最初の要素とってくるだけで何に使うんだろうと思っていましたが、条件に一致した最初の要素をとれるんですね。

    こんな感じ。Lastもあるとわかりやすいのでついでに書ています。

    public class Test : MonoBehaviour
    {
    public class Item {
    public int itemType;
    public int itemId;
    public string itemName;

    public Item(int type, int id, string name) {
    itemType = type;
    itemId = id;
    itemName = name;
    }
    }

    void Start()
    {
    // 最初と最後のItemTypeが「0」
    List items = new List() { new Item(0, 1, "Test_1"), new Item(1, 2, "Test_2"), new Item(0, 3, "Test_3") };

    // ItemTypeが「0」の最初の要素を取得
    Item item_1 = items.First(x => x.itemType == 0);
    Debug.Log($"First:{item_1.itemType}:{item_1.itemId}:{item_1.itemName}");

    // ItemTypeが「0」の最後の要素を取得
    Item item_2 = items.Last(x => x.itemType == 0);
    Debug.Log($"Last:{item_2.itemType}:{item_2.itemId}:{item_2.itemName}");
    }
    }

    結果。


    使いどころがあるかどうかはまた微妙なところですが、紹介です。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】3Dオブジェクトの色を変えたい!こんな感じで色かえれますよね。  

    こんにちは坂内でっす。

    東京でのコロナ感染者が47人超えましたね・・・・
    また100人とか超えてちゃうのかなぁ・・・・
    早く落ち着いてくれえええ


    さて、Unityで3Dオブジェクトの色を変える方法。

    [Blog20200516.cs]

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

    public class Blog20200615 : MonoBehaviour
    {
    public MeshRenderer objCubeMeshRenderer;

    public Button btnChangeColor;

    void Start()
    {
    btnChangeColor.onClick.AddListener(ChangeColor);
    }

    void ChangeColor() {
    Color randomColor = new Color(Random.Range(0, 255) / 255f, Random.Range(0, 255) / 255f, Random.Range(0, 255) / 255f);
    Debug.Log(randomColor.r + ":" + randomColor.g + ":" + randomColor.b);
    objCubeMeshRenderer.materials[0].color = randomColor;
    }
    }



    こんな感じのコードを書いて、ボタンとCubeをアサインしておきます。



    で、実行。



    これでできました。

    MeshRenderer.materials[0].color を変えることで、色を変えれます。

    また、以下でも色を変えれますね。

    objCubeMeshRenderer.material.color = randomColor;

    どちらでも使えるようです。

    Renderer.materials[0]とRenderer.materialが同じものをさしているのかな?

    こんな感じでオブジェクトの色を変えれます!

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】メソッドもラムダ式で書けたりするんですね。 

    こんにちは。
    大坂です。

    なんかメソッドもラムダ式で書けるんですね。
    C#6から使えたみたいです。

    こんな感じ。

    public class Item {
    public int itemNo;
    public string itemName;
    }
    // ラムダ式で書ける
    public Item GetItem(int itemNo) => items.Find(x => x.itemNo == itemNo);


    まぁこの辺の書き方は好み次第だと思いますが・・・。
    一応こんな書き方もできるみたいですよという紹介でした。

    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity+VSのデバッグをしてみた。 

    こんにちは!坂内です。
    皆様ご機嫌麗しゅう?
    私奴は全然飲みに行けてなくて体調が悪くなりそうな、ならなそうな感じです。
    早くコロナ落ち着いて飲みに外行けるようになってほしいですね。

    さて、あんまりうちでは使っていないですが、Unity+VisualStudioで、簡単にデバッグする方法があるので、紹介します。

    大体Debug.Log()ですましちゃうんですけどね・・・・


    using UnityEngine;

    public class Blog20200608 : MonoBehaviour {

    int intAAA = 5;
    int intBBB = 10;

    void Start()
    {
    Debug.Log(intAAA);
    Debug.Log(intBBB);

    int calc = intAAA + intBBB;
    Debug.Log(calc);
    }
    }



    こうしちゃえば中身全部見れるんだけど、デバッグモードで確認する方法はこんな感じ。

    ①ブレークポイントを設定する。
     コード上で止めたい行でF9を押すことで、ブレークポイントを設定できます。
     ブレークポイントの行は赤いラインが付きます。
     

    ②デバッグモードを設定する。
     デバッグ>Unityデバッガーのアタッチを選択。
     
     
     対象のプロジェクトを選択し、OKを選択。
     
     
    ③ブレークポイントで値を確認。
     ②の状態でUnityの実行をすると、ブレークポイントで止まるので、値を確認することができます。
     
     
     F10を押すことで、次の行にステップが進む。
     これにより、先ほどブレークしていた行の intAAA + intBBBが計算され、calcに値がはいるので、calcの変数の値を確認できるようになります。
     ※ブレークポイントの行の処理はされないため、ステップが先ほどのブレークポイントのままだとcalcの値は確認できない
     
     
    こんな感じでデバッグができます。

    VBAやC#を触ってた時はよくこのデバッグを使っていましたが、最近は全然触ってなかったです・・・・


    確か・・・・ブレークポイントで止まっている時に、変数の中身をいじることもできた気がしました。



    こんな感じで、ブレークポイントで止まってるときに数値を弄って実行、ということも可能です。
    数式の値を変えて様子見とか色々できますよね。

    ということで、簡単にですが、Unity+VSのブレークポイントを使ったデバッグの方法でした。

    あでゅ~ノシ
     

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】再生中の編集内容を保存したいとき。 

    こんにちは。
    大坂です。

    Unityでゲームを再生中にオブジェクトなどをいじって、その内容を保存したいときがあります。
    はい・・・僕はよく再生中変えて、停止してからまた値反映するのが面倒なときが多いです。

    そんなときは「Save Play Mode Changes」を使用すると便利です。
    ダウンロードは以下
    https://github.com/inkle/Unity-Save-Play-Mode-Changes

    使い方。
    「Save Play Mode Changes」をAddComponentする。
    再生中に追加でも問題ありません。


    再生中に値を変えてみる。

    ※クリックすると動きます

    ちゃんと反映されていますね~
    再生中に追加しても「Save Play Mode Changes」のComponentはついたままなので気になったらRemoveしましょう。
    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity+LinqtoGameObjectで、"子供のオブジェクトを全部xxx"系の処理が簡単にできる! 

    こんにちは!坂内です!

    コロナ騒動になり飲みにいけなくなって早2か月?
    早くおいしいもの食べに行きたくてうずうずが止まらない今日この頃でございます。


    さてUnity+Linqのお話。

    オブジェクトの子供や孫を取得する際に、普段だとこんな感じでやっています。


    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Blog20200601 : MonoBehaviour {

    public Transform itemParent;

    void Start() {
    DestroyItem();
    }

    void DestroyItem() {
    foreach (Transform itemTran in itemParent) {
    Destroy(itemTran.gameObject);
    }
    }
    }





    こんな感じでパッと消えます。

    LinqにもこのGameObjectを触る用のものがあるみたいです。

    【LINQ-to-GameObject-for-Unity】
    https://github.com/neuecc/LINQ-to-GameObject-for-Unity

    これを使うとこんな感じで書くことができます。


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

    public class Blog20200601 : MonoBehaviour {

    public GameObject itemParentObj;

    void Start() {
    DestroyItem();
    }

    void DestroyItem() {
    foreach (GameObject item in itemParentObj.Descendants()) {
    Destroy(item);
    }
    }
    }



    注意点としては、System.Linq: ではなく、Unity.Linq: になります。

    Descendantsを使いましたが、他にも以下のようなものがあるようです。

    Ancestors() : 親、親以上まで遡る
    Descendants() : 子供、子供以下まで下る
    Parent() : 親のみ
    Children() : 子供のみ

    といったものがあるようです。

    これを使うと、指定オブジェクトの子供以下で「タグが"test"のものを取得」も簡単に可能です。


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

    public class Blog20200601 : MonoBehaviour {

    public GameObject itemParentObj;

    void Start() {
    DestroyItem();
    }

    void DestroyItem() {
    foreach (GameObject item in itemParentObj.Descendants().Where(x => x.tag == "test")) {
    Destroy(item);
    }
    }
    }


    2、5、6の番号のオブジェクトにtestタグをつけています。



    こんな感じでいろいろ使えそうですね!


    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0