watanuki0401etcの日記

見習いUnityエンジニア watanukiのブログです。

C#  LINQについて

皆さんこんにちは

watanukiです。

 

今回はLINQについて記載していきます。

ラムダ式とは違い困惑したわけではないのですが

種類が多いので何ができるのかを書き留めれたらと思ってます。

 

 

LINQについて】

LINQはListや配列などのコレクションをの要素を処理するメソッドが入った

ライブラリのことで使用するにはSystem.Linqの追加が必要

 

 

【メリット】

・同じような機能を持つFor文と比べて記載量が圧倒的に少ない

・コードが簡潔で読みやすい

 

【デメリット

iOSで不具合が起こる可能性がある

※参考資料

neue.cc

 

私自身はMacを持っていないのでしばらくの間、AndroidまたはWindows

制作していく予定です。そのため今のところデメリットは痛くありませんが

iOSで使う場合は注意がいりそうですね。

 

↓この記事の方がiOSで使用可能なライブラリを作成しているみたいなので

 そのうちこの問題は解消されるかもしれませんね

qiita.com

 

【よく使うLINQ

自分で書こうかとも考えましたが

色んな方がすでに書いているので割愛します。

 

ひとまず使用例まで書いてあってわかりやすかった

記事のリンクを貼っておきます

qiita.com

よく使うのは

Count

Select

All

Any

Where

辺りなのかなと思っていますが

他のものも余裕があれば使っていこうと思います。

 

【最後に】

 

今、サンプルゲームを魔改造したゲームを制作中なのですが

その中で3回ダメージを受けたらゲームオーバーにする機能を追加予定なので

完成し次第追記でどうLinqを使ったかを書こうと思います

 

【追記】

 当初の予定とは違いますが、LinQ使ってみました。

罠を配列に入れて並び替えるコードです。

OrderBy使ってます。

 

public class GenerateManager : MonoBehaviour
{
    public GameObject trapBigPrefab;
    public GameObject trapSmallPrefab;
    public GameObject trapSmall1Prefab;
    public GameObject trapSmall2Prefab;
    public GameObject trapSmall3Prefab;
    GameObject trapPrefab;

    public Transform playerTransform;
    // Start is called before the first frame update
    void Start()
    {
        trapPrefab = new GameObject
{ trapBigPrefab, trapSmallPrefab, trapSmall1Prefab, trapSmall2Prefab, trapSmall3Prefab };
        Invoke("UpdateTrap", 1f);
    }
    // Update is called once per frame
    void Update()
    {
       
    }
    void UpdateTrap()
    {
        GameObject nextTrap = Generate();
        Invoke("UpdateTrap", 1f);
    }
   GameObject Generate()
    {
        var array = trapPrefab.OrderBy(i => Guid.NewGuid()).ToArray();
        Vector3 generateTrapPosition =
            new Vector3(playerTransform.position.x + 500, array[0].transform.position.y,array[0].transform.position.z);
        GameObject nextTrap = Instantiate(array[0], generateTrapPosition,Quaternion.identity);
        return nextTrap;
    }
 
結構調べながらやりましたがこれで無事罠がランダムに自動生成されるようになりました。
他にいい書き方ご存じの方いたらぜひ教えてください!