FC2ブログ
06 «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.» 08

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

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

 

【ハルシオンブログ】Awakeより先にメソッドを呼び出したいとき 

お疲れさまです。
大坂です。

Awakeより先にメソッド呼べたらなーと思ったことは・・・たまにあるでしょうか?
そんなときは「RuntimeInitializeOnLoadMethod」アトリビュートを使用しましょう。
そのまま使うとAwakeよりあとになってしまうので引数に「RuntimeInitializeLoadType.BeforeSceneLoad」をつけます。

では一応コードです。

void Awake() {
Debug.Log("Awake");
}

void Start() {
Debug.Log("Start");
}

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void Test_1() {
Debug.Log("RuntimeInitializeLoadType.BeforeSceneLoad");
}

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
static void Test_2() {
Debug.Log("RuntimeInitializeLoadType.AfterSceneLoad");
}

結果。


ちゃんとAwake前に呼ばれていますね!
おまけで、引数「RuntimeInitializeLoadType.AfterSceneLoad」も書いてみてます。
こちらはAwakeよりあとになっていますね。

ということで、Awake前に処理を呼び出す方法の紹介でした。
ではまたノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Unity(C#)でDictionaryの紹介。Listばっかり使ってたけどこいつも悪くはねえなぁ 

こんにちは!坂内っす。

雨すごいらしいっすね・・・・九州は川も氾濫危険水位に達しているようで・・・・
皆さんお気をつけてくださいませ。

UnityというかC#でDictionaryって使ってます?

ListとかArrayとか配列とかと同じ感じで使えるやつです。
連想配列って言われるらしいです。

使うには、usingが必要になります。


using System.Collections.Generic;


Listとかとの違いは、添え字の代わりに任意のデータ型を使います。

・Listとか

List<int> intAry = new List<Int>();
intAry.Add(1);
intAry.Add(3);
intAry.Add(5);
intAry.Add(7);

Debug.Log(intAry[2]);


結果は「5」が取れますよね。
この時intAry[2] という感じに、"3番目"に入っている値という感じで、添え字を使うと思います。

これがDictionaryだとこんな感じになります。

・Dictionaryの場合

Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("no1", 1);
dic.Add("no2", 3);
dic.Add("no3", 5);
dic.Add("no4", 7);

Debug.Log(dic["no2"]);


これも結果は「3」が取れます。

こんな感じで、文字列など(key)でvalueをとる感じになります。

また、keyは同じものを入れることができません。


Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("no1", 1);
dic.Add("no2", 3);
dic.Add("no2", 5);


こういうことができないということです。

ちなみに初期化時に値を入れる場合はこんな感じでできます。


Dictionary<string, int> dic = new Dictionary<string, int>()
{
{"no1", 1},
{"no2", 3},
{"no3", 5}
}


valueの更新はこんな感じ。


Dictionary<string, int> dic = new Dictionary<string, int>()
{
{"no1", 1},
{"no2", 3},
{"no3", 5}
}

dic["no2"] = 100;


特定のkeyがあるかどうかは、こんな感じで判定できます。


Dictionary<string, int> dic = new Dictionary<string, int>()
{
{"no1", 1},
{"no2", 3},
{"no3", 5}
}

if(dic.ContainsKey("no2")){
Debug.Log("no2があるので更新");
dic["no2"] = 50;
} else {
Debug.Log("no2がないので追加");
dic,Add("no2", 50);
}


また、全体をなめる感じの場合は、foreachでいけますね。


Dictionary<string, int> dic = new Dictionary<string, int>()
{
{"no1", 1},
{"no2", 3},
{"no3", 5}
}

foreach(Dictionary<string, int> data in dic){
Debug.Log(data.key + ":" + data.value);
}


こんな感じで、全部をとることができます。
Dictionaryでは順不動のようで、上記のように全部をなめる時に順番が変わる可能性があるらしいです。

登録した順番に何かの処理をする必要がある場合は、DictionaryではなくList等を使わないといけません。

という感じで、Dictionaryの紹介でした。

では、あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Toggleで値を変えたときにonValueChangedで処理したくないとき 

こんにちは。
大坂です。

Toggleの値が変わったらonValueChangedでなにか処理をしたいときがよくありますね。
が、しかし処理タイミングによっては処理をしたくないときもあります。。
そんなときは「SetIsOnWithoutNotify」を使うとonValueChangedの処理が呼び出されなくなります。

public class Test : MonoBehaviour
{
public Toggle toggle;

void Start()
{
toggle.onValueChanged.AddListener(a => Debug.Log("Test"));

// onValueChangedが呼び出される
toggle.isOn = false;
// onValueChangedが呼び出されない
toggle.SetIsOnWithoutNotify(true);
}
}



「toggle.isOn」で変更している一回分のログしか出ていませんね。
という感じで、「SetIsOnWithoutNotify」を使用すればonValueChangedが呼び出されません。

他にもSliderやDropdownなら「SetValueWithoutNotify」を使用すればonValueChangedが呼び出されなくなります。
なにかの参考にしてくださいませ。

ではではノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】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