投稿者「mynote」のアーカイブ

MariaDBでメモリ不足の対処方法

格安VPSなどメモリが少ない環境でデータベース(WordPressなど)を使うとメモリ不足のエラーが発生することがあります。

対処方法としては上位プランに移行してメモリ量を増やすしかないのですが、MariaDBを使っている場合は一時的な対策としてperformance_schemaoffに設定することで改善する場合があるようです。

設定方法

/etc/my.cnf.d/server.cnfを適当なエディタで編集して[mysqld]の直後に下記の内容を追加

[mysqld]
performance_schema = off

httpdを再起動

# systemctl restart httpd

リンク

Starting MySQL On Low Memory Virtual Machines | MariaDB
https://mariadb.com/resources/blog/starting-mysql-on-low-memory-virtual-machines/

MariaDB Running Out of Memory? Here Is What You Can Do About It – Cloud Insidr
https://www.cloudinsidr.com/content/mariadb-running-out-of-memory-and-what-you-can-do-about-it/

UnityでキーボードによるUIのフォーカス移動方法

Unityでキーボードを使ってUIのフォーカスを移動したい場合はNavigationが使えるみたいです。

Inspectorから設定することもできますが、スクリプトから設定したい場合は次のような感じで実装できます。

Navigation navigation = new Navigation();

navigation.mode = Navigation.Mode.Explicit;
navigation.selectOnUp = button1; // 上キーでフォーカスを移したいところ
navigation.selectOnDown = button2; // 下キーでフォーカスを移したいところ
navigation.selectOnLeft = button3; // 左キーでフォーカスを移したいところ
navigation.selectOnRight = button4; // 右キーでフォーカスを移したいところ

button.navigation = navigation;

こんな感じで設定すれば、buttonにフォーカスがある時に上キーを入力するとbutton1にフォーカスが移動し、左キーを入力するとbutton3にフォーカスが移動します。

SetSelectedGameObject

ちなみに、最初起動したばかりの段階ではどこにもフォーカスがありません。

初期値としてどこかにフォーカスを設定したい場合はSetSelectedGameObjectを使って設定できます。

参考: UnityのUIでフォーカスを移したい場合はSetSelectedGameObject

Unityでセーブデータを保存したい場合はJsonUtilityが便利

Unityでセーブデータを保存したい場合はJsonUtilityを使うと便利です。

使い方は次のような感じです。

public class ExampleData
{
  public string Name;
  public int Value;
}
public class Example : MonoBehaviour
{ 
  void Start()
  { 
    var data1 = new ExampleData { Name = "abc", Value = 123 };

    var json = Save(data1);
    Debug.Log(json);

    var data2 = Load(json);
    Debug.Log($"Name={data2.Name} Value={data2.Value}");
  }

  ExampleData Load(string json)
  {
    return JsonUtility.FromJson<ExampleData>(json);
  }

  string Save(ExampleData data)
  {
    return JsonUtility.ToJson(data);
  }
}

実行結果

{"Name":"abc","Value":123}
Name=abc Value=123

ArgumentException

MonoBehaviourを継承したクラスでJsonUtility.FromJsonを使うとArgumentExceptionという例外が発生します。久し振りに使うと忘れて悩むことがあるので気を付けてください。

public class ExampleData : MonoBehaviour
{
  public string Name;
  public int Value;
}

リンク

Unity – Scripting API: JsonUtility
https://docs.unity3d.com/ScriptReference/JsonUtility.html