FC2ブログ

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

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

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

       

      【ハルシオンブログ】Unity InputFieldのキャレットの位置をとる。よいお年を!! 

      こんにちは。坂内っす。
      年末年始が近づいてきました!
      今年最後のネタ・・・・

      ポケットガール~受け継がれし希望~よろしくお願いします。
      URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
      URL(iOS):https://itunes.apple.com/jp/app/id1539553611

      PV:


      UnityのInputFieldのキャレットの位置って簡単に取れるんですね。


      using UnityEngine;
      using TMPro;

      public class Blog1226 : MonoBehaviour
      {
      [SerializeField] TMP_InputField inpText;

      private void Start() {
      inpText.onValueChanged.AddListener((x) => ChangeInput(x));
      }

      void ChangeInput(string val) {
      Debug.Log(inpText.caretPosition);
      }
      }



      文字列が変わったときにキャレットの位置をとります。

      インプットフィールド.caretPosition

      でとれますね。

      とても簡単な記事ですね。

      では、よいお年を!

      あでゅ~ノシ

      Category: 開発日記(Unity)

      tb 0 : cm 0   

      【ハルシオンブログ】アプリのバージョン比較をする 

      こんにちは。
      大坂です。

      ポケットガール~受け継がれし希望~よろしくお願いします。
      URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
      URL(iOS):https://itunes.apple.com/jp/app/id1539553611

      PV:


      クライアントのアプリバージョンとサーバなどに設定したアプリバージョンを比較するときの方法。
      「System.Version」クラスと「CompareTo」を使うといいですね。

      using System;
      using UnityEngine;

      public class Test : MonoBehaviour
      {
      public void CheckVersion(string serverVersion)
      {
      // クライアントのバージョン
      var client = new Version(Application.version);
      // サーバーのバージョン
      var server = new Version(serverVersion);

      // 比較 0,1,-1で帰ってくる
      int result = client.CompareTo(server);

      switch (result)
      {
      case 0:
      // アプリバージョンが一致。最新バージョン。
      break;
      case 1:
      // クライアント側の方が新しい。
      break;
      case -1:
      // サーバーの方が新しい。
      break;
      }
      }
      }


      サーバーのアプリバージョンと比較して強制アップロードなどをするときに便利ですね。
      こんな感じで簡単にバージョン比較をできるので、使ってみてください。

      ではではノシ

      Category: 開発日記(Unity)

      tb 0 : cm 0   

      【ハルシオンブログ】UnityC# 配列の引数にparamsキーワードをつけると、引数を簡単にまとめて渡せるようだよ。 

      こんにちは。坂内っす。
      いきなり寒くなりましたね!12月感がでてきました!
      風邪ひかないようにお気をつけてください!

      ポケットガール~受け継がれし希望~よろしくお願いします。
      URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
      URL(iOS):https://itunes.apple.com/jp/app/id1539553611

      PV:


      UnityC#で可変長な引数をとることができるメソッドを作れるようです。


      using UnityEngine;

      public class Blog1218 : MonoBehaviour
      {
      private void Start() {
      string[] param = { "あいう", "えお", "abc", "12345" };
      TestMethod(param);
      }

      void TestMethod(string[] param) {
      foreach (var str in param) {
      Debug.Log(str);
      }
      }
      }



      複数パラメータはこんな感じで渡すことができますが、paramsキーワードを使うことで、以下のように渡せます。


      using UnityEngine;

      public class Blog1218 : MonoBehaviour
      {
      private void Start() {
      TestMethod("あいう", "えお", "abc", "12345");
      }

      void TestMethod(params string[] param) {
      foreach (var str in param) {
      Debug.Log(str);
      }
      }
      }



      paramsを使うことができるのは配列の時のみになってます。

      また、複数の引数に混ぜることもできます。


      using System;
      using System.Text;
      using UnityEngine;

      public class Blog1218 : MonoBehaviour
      {
      private void Start() {
      TestMethod(10, "なまえ", 2250, 1, 2, 3, 4);
      }

      void TestMethod(int no, string name, int dmg, params int[] indexs) {

      Debug.Log(no.ToString());

      Debug.Log(name);

      Debug.Log(dmg.ToString());

      StringBuilder strIndex = new ();
      foreach (var index in indexs) {
      strIndex.Append(index + ",");
      }
      Debug.Log(strIndex);
      }
      }





      こんな感じ。

      引数渡すところが意味わからなくなりそうなので、なんとも微妙。


      というところで、paramキーワードの紹介でした。

      では、あでゅ~ノシ

      Category: 開発日記(Unity)

      tb 0 : cm 0   

      【ハルシオンブログ】多次元配列のコピーをしたい時 

      こんにちは。
      大坂です。

      ポケットガール~受け継がれし希望~よろしくお願いします。
      URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
      URL(iOS):https://itunes.apple.com/jp/app/id1539553611

      PV:


      多次元配列の中身を別の配列にコピーする際にforとかを回しても出来るんですが、1行で書くことも出来ますよねっていうお話。
      forで書くと多重ループになりますね。

      int[,] initialArray = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} };
      int[,] copyArray = new int[initialArray.GetLength(0), initialArray.GetLength(1)];

      for (int i = 0; i < initialArray.GetLength(0); i++)
      {
      for (int j = 0; j < initialArray.GetLength(1); j++)
      {
      copyArray[i, j] = initialArray[i, j];
      }
      }
      Debug.Log(string.Join(",", copyArray.Cast()));



      Array.Copyを使うとforのところが1行にできます。

      int[,] initialArray = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} };
      int[,] copyArray = new int[initialArray.GetLength(0), initialArray.GetLength(1)];

      Array.Copy(initialArray, copyArray, initialArray.Length);

      Debug.Log(string.Join(",", copyArray.Cast()));


      多次元配列をコピーすことなんてあまりないかもしれませんが、だいぶすっきり書けますね。
      何かの時に使ってみてくださいまし。

      ではではノシ

      Category: Androidアプリ紹介

      tb 0 : cm 0   

      【ハルシオンブログ】TMPでDynamicフォントを使ってみた。作り方かいたよ 

      こんにちは。坂内っす。

      ポケットガール~受け継がれし希望~よろしくお願いします。
      URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
      URL(iOS):https://itunes.apple.com/jp/app/id1539553611

      PV:


      みなさんTMPって使ってますよね?
      TextMeshProってやつです。

      フォントデータを基にフォントアセットと呼ばれるファイルを作ることでTMPでフォントを使用することができます。
      フォントアセットを作成するときには、「どのフォント」「サイズなど」「どの文字を使用するか」という情報をもとに作成します。
      日本語を使うフォントアセットを作成する際には、ひらがな・カタカナ・漢字などの登録が必要なため、容量が大きくなってしまいます。
      この方法だと使わない文字もすべてセットしないといけないため、容量を減らすことができません。

      Dynamic Fontという方法を使うと、必要な分だけフォントアセットが作られるようで、容量も減っていいぽいです。
      試しに日本語英数字でフォントアセットを作成してみると、133Mもありました。
      ちなみにDynamicFontで作ったフォントアセットは8kbでした。

      DynamicFontを作ってみましょう。

      フォントファイルを選択した状態で、右クリック>Create>TextMeshPro>Font Asset


      出来上がったFontAssetのAtlasPopulationModeが「Dynamic」になっています。


      これで完成。

      TMPのFontAssetに今回作成したDynamicフォントのアセットを設定すれば、そのフォントに含まれている文字は全部出ます。



      ということで、TMPのDynamicフォントの作り方でした。

      では、あでゅ~ノシ


      Category: 開発日記(Unity)

      tb 0 : cm 0   

      【ハルシオンUnityブログ】Project の Favorites にはフォルダも登録できる 

      こんにちは。
      大坂です。

      ポケットガール~受け継がれし希望~よろしくお願いします。
      URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
      URL(iOS):https://itunes.apple.com/jp/app/id1539553611

      PV:


      Project の Favorites にはフォルダも登録できるの知ってましたか?
      プロジェクトが大きくなると、よく使うフォルダを探すのが大変なときがあります。
      僕の場合は大体、検索のところに名前を入れ検索をかけていたのですが、関係ないのもいっぱい検索されてそこからさらに探すのが面倒なときがあります。

      で、なんか見てたら普通に Favorites にフォルダも登録できたんですね。
      単純にフォルダを Favorites に ドラッグ&ドロップ するだけです。



      よく使うフォルダは登録しておくと便利ですね!
      ではではノシ

      Category: 開発日記(Unity)

      tb 0 : cm 0   

      【ハルシオンブログ】便利なInspector拡張アセット「Alchemy」試してみた!簡単な紹介です。 

      おはようございます。坂内っす。

      ポケットガール~受け継がれし希望~よろしくお願いします。
      URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
      URL(iOS):https://itunes.apple.com/jp/app/id1539553611

      PV:


      最近作られたアセットでいいものがあったので、ご紹介。

      「Alchemy」というアセットです。
      https://github.com/AnnulusGames/Alchemy/tree/main

      Inspectorの拡張アセットになります。

      ※Alchemyのインポートと、UnityのSerializableのインポートが必要になります。

      こちらを入れることで、DictionaryやToupleがInspectorに表示され、いじることが可能になります。

      こんな感じでコードを書くと・・・・

      [Blog1204.cs]

      using System.Collections.Generic;
      using UnityEngine;
      using Alchemy.Serialization;
      using System;

      [AlchemySerialize]
      public partial class Blog1204 : MonoBehaviour
      {
      [AlchemySerializeField, NonSerialized]
      Dictionary<int, string> dictionary = new();

      [AlchemySerializeField, NonSerialized]
      (int, int, string) touple = new();
      }





      こんな感じでInspectorでいじれる!便利!

      ほかにも色々機能はあるぽいです。
      Gitのreadmeを参考してください。

      便利なアセットの紹介でした!

      では、あでゅ~ノシ

      Category: 開発日記(Unity)

      tb 0 : cm 0