C#」カテゴリーアーカイブ

プログラミング言語「C#」に関するカテゴリーです。

Unable to locate Android SDKでapkがビルドできない場合

Unity HubでAndroid Buildに必要なモジュールをインストールしているのに

Android SDK not found
Unable to locate Android SDK.

のようなエラーメッセージが表示されてビルドできないという場合は、Android DevelopersからSDK toolsをダウンロードしてみると上手くいく場合があるようです。

手順

  1. Android Developersのサイトから使用したいプラットフォームのZipファイルをダウンロード。
  2. Unity Hubのインストール先の
    Unity/Hub/Unityのバージョン/Editor/Data/PlaybackEngines/AndroidPlayer/SDK/
    にダウンロードしたファイルをunzip。(toolsというディレクトリ名)

ちなみに、SDKディレクトリ内にtoolsディレクトリが存在してる場合はこの方法では解決しないと思いますので、気を付けてください。

リンク

Download Android Studio and SDK tools | Android Developers
https://developer.android.com/studio/

Android SDK not found – Unity Forum
https://forum.unity.com/threads/android-sdk-not-found.762506/

'SceneCamera' is not valid

Unityで作業をしていたら次のようなエラーメッセージ

transform.position assign attempt for 'SceneCamera' is not valid. Input position is { NaN, NaN, NaN }.

が永遠と表示され、Unityを再起動してもエラーが出続けるという状況に遭遇した場合は、Sceneのタブを「右クリック » Close Tab」して、

Window » General » Scene

から開き直すと回復する場合があるようです。

Unityのバグなのか何か分かりませんが、Webで検索してみると結構古くからある現象みたいです。

C#のLINQで最小値の要素を取り出す方法

C#のLINQで最小値の要素を取り出す方法をいくつか調べてみました。

Aggregateを使う場合

using System;
using System.Collections.Generic;
using System.Linq;

public class Example1
{
  struct Example
  {
    public string name;
    public int value;
  }

  static public void Main ()
  {
    List list = new List<Example> {
      new Example { name = "aaa", value = 321 },
      new Example { name = "bbb", value = 432 },
      new Example { name = "ccc", value = 123 }
    };

    Example e = list.Aggregate((a, b) => a.value < b.value ? a : b);
    Console.WriteLine("{0}: {1}", e.name, e.value);
  }
}

実行結果

ccc: 123

OrderByとFirstを使う場合

using System;
using System.Collections.Generic;
using System.Linq;

public class Example2
{
  struct Example
  {
    public string name;
    public int value;
  }

  static public void Main ()
  {
    List list = new List<Example> {
      new Example { name = "aaa", value = 321 },
      new Example { name = "bbb", value = 432 },
      new Example { name = "ccc", value = 123 }
    };

    Example e = list.OrderBy(e => e.value).First();
    Console.WriteLine("{0}: {1}", e.name, e.value);
  }
}

実行結果

ccc: 123

リンク

Enumerable.Aggregate Method (System.Linq) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.aggregate?view=netframework-4.7.2