unity[C#] IGroupingについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぼのりん
記事: 18
登録日時: 10年前

unity[C#] IGroupingについて

#1

投稿記事 by ぼのりん » 9年前

閲覧ありがとうございます。
今回、unityちゃん2Dのソースを見ていたところ、わからないところがあったので質問させていただきます。

コード:

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class BrokenBlockController : MonoBehaviour
{
    public AudioClip breakClip;

    public Vector2 force = new Vector2(250, 1000);

    private Rigidbody2D[] rigidbody2Ds;
    private Transform[] transforms;
    void Awake()
    {
        rigidbody2Ds = GetComponentsInChildren<Rigidbody2D>();
    }

    void Start()
    {

        IEnumerable<IGrouping<float, Rigidbody2D>> groupBy = rigidbody2Ds.GroupBy(r => r.transform.localPosition.y);

        foreach (IGrouping<float, Rigidbody2D> grouping in groupBy)
        {
            foreach (var r in grouping)
            {
                r.AddForce(new Vector2(Mathf.Sign(r.transform.localPosition.x) * force.x, force.y + (100 * grouping.Key)));
            }
        }
        AudioSourceController.instance.PlayOneShot(breakClip);
        Destroy(gameObject, 3);
    }
}
このソースは昔のマリオみたいな破壊ブロックで、ブロックにunityちゃんが当たったときによばれます。

SPACEでジャンプ、矢印キーで移動
ブロック破壊のサンプル


上のゲームはもともと、unityちゃん2Dについていたサンプルなのですが、ブロックに触れたときにプレハブの破壊ブロックのオブジェクトが生成され、
破壊オブジェクトについている上のソースが実行されます。

破壊オブジェのプレハブには、空のオブジェクトの中に4つに分散されたブロックの画像が入っていて、4つ全てにrigidbody2Dがついています。


わからないところは20~28行までの処理で、なぜ、このような処理になるのか検討もつかない状態です。

なぜ、このような処理になるのかわかりやすく教えていただけないでしょうか?

よろしくお願いします。

“C言語何でも質問掲示板” へ戻る