yoshida-1021
@yoshida-1021 (ヨシダ)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

CircleCastAllで隣接するオブジェクトを取得したい

隣接するオブジェクトを取得して破壊したい

Unityで以下のような仕組みを作ろうとしています。
・画像のようにボールが溜まる
・タップされたボールは消える
・隣接するボールも一緒に消える

スクショ1.png

方法として調べた・考えついたものは
1. タップした時にエリアを指定してその範囲内のオブジェクトを消す
2. ボールが消えたら、周囲のボールはあたり判定が変わるはずなのでそこをトリガーにする
といったところです。

2番の方法はOnCollision系を使って試行錯誤していたのですが、
関係ないボールまで消えてしまう問題があり、制御が難しいと判断しました。

現在、CircleCastAllを使って1番の方法を目指していますが、
foreachのところでエラーが出てしまいます。

解決方法、もしくは代替手段があればご教示いただけると幸いです。
初めての質問で、もし至らない点があれば申し訳ありません。
よろしくお願いします。

発生している問題・エラー

error CS0030: Cannot convert type 'UnityEngine.RaycastHit2D' to 'UnityEngine.GameObject'

該当するソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CircleCast : MonoBehaviour
{
    public void Update()
    {
        if (Input.GetMouseButton(0))
        {
            //rayが発生する地点
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            //circlecastallの設定
            RaycastHit2D[] circleCastAll;
            circleCastAll = Physics2D.CircleCastAll(ray.origin, 10f, Vector2.zero);

            //取得したオブジェクトの破壊
            foreach (GameObject target in circleCastAll)
            {
                Destroy(target);
            }
        }
    }
}

自分で試したこと

下記などを参考にして、スクリプトを修正しました。
https://www.sejuku.net/blog/83620
https://tsubakit1.hateblo.jp/entry/2016/02/25/025922
https://docs.unity3d.com/ja/current/ScriptReference/Physics2D.CircleCastAll.html

0

1Answer

同種の実装をかなり癖の強い実装を検証目的で別途書いて記事とGithubリポジトリに上げてるので良かったら見てみてください。

全く違う思想とアプローチなので参考にはならないかもですが・・・
OnCollision系の当たり判定管理を思い付きで書いてますが一応動くので・・・

error CS0030: Cannot convert type 'UnityEngine.RaycastHit2D' to 'UnityEngine.GameObject'

のエラーですがRaycastHit2DをGameObjectに無理やり変換しようとしているので動かないのは当然ですね・・・

Physics2D .CircleCastAllだと範囲指定なので接触してるかどうかの判定がかなり緩くなってしまう問題がある気がしたので厳密な接触に拘るならコライダーを活用する系の実装の方が筋がいい気がします・・・
ゲーム開発は本業じゃないのでこの手の実装はあまり詳しくはないのですがちょっとアプローチがしんどいような気がしますね

1Like

Comments

  1. @yoshida-1021

    Questioner

    ご回答ありがとうございます。
    確かにコライダーを活用する方が正確ですね。
    ご教示いただいた実装も参考にさせていただきます。

Your answer might help someone💌