0 支持
66 閲覧

初心者です。

この赤い球に触れた黒い球がどんどん青い球になるというコードを伝授してください。
球すべてリジッドボディと物理マテリアルしかつけていない状態です。
鬼ごっこみたいにこの赤い球がすべての球に触れるのを眺めていたいのです。
よろしくお願いいたします。

初心者 (160 ポイント) | 66 閲覧

ログインまたはユーザー登録してから回答してください。

回答 1

+2 支持

いろんな方法がありますが、今回はひとつ紹介します。

黒い球と青い球の画像を用意して、赤い球が黒い球に触れたときに黒い球の画像を青い球の画像に切り替えるという方法です。


// RedBall.cs

private OnCollisionEnter2D(Collision2D collision)

{

    BlackBall ball = collision.gameObject.GetComponent<BlackBall>();

    if(ball != null)

    {

        ball.ChangeBlueBall();

    }

}


BlackBall.cs

[SerializeField] Sprite blueBall; //inspector上で青い球の画像を割り当てる。

public void ChangeBlueBall() 

{

    GetComponent<SpriteRenderer>().sprite = blueBall;

}

初心者 (260 ポイント)
0
ありがとうございます!
さっそく試してみます!
0
さらに質問すみません。
この球はスフィアで作っているのですが、このコードだとスプライトで作り直さないといけないのでしょうか。
あと、マテリアルでの色の切り替えとかはできないのでしょうか。
本当に初心者でわからないことだらけで申し訳ないです。
0
それと、教えていただいたコードをそのまま入力したら動かなかったので自分なりにエラーが出ないように変えてしまったことが、できない原因かもしれないのでここに貼っておきます。
(黒球)
public class BlackBall : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    [SerializeField] Sprite blueBall; //inspector上で青い球の画像を割り当てる。

    public void ChangeBlueBall()

    {

      GetComponent<SpriteRenderer>().sprite = blueBall;

    }
}

(赤球)
public class RedBall : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    private void OnCollisionEnter2D(Collision2D collision)

    {

        BlackBall ball = collision.gameObject.GetComponent<BlackBall>();

        if (ball != null)

        {

            ball.ChangeBlueBall();
            Debug.Log("change");

        }

    }
}
よろしくお願いいたします。m(__)m
+1
まさかの3Dでしたか。
その場合だと、MeshRendererのMaterialの切り替えで可能になると思います。
0
はい3Dですw
マテリアルの切り替えができるんですね!
教えていただきありがとうございます!
0
できました!
青いマテリアル作って
赤球の方に
public class 赤球 : MonoBehaviour
{
    Material[] materials;


    // Use this for initialization
    void Start()
    {

        //Resourcesフォルダからマテリアルを読み込む
        materials = Resources.LoadAll<Material>("Materials/");
    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnCollisionEnter(Collision collision)
    {
        Debug.Log("衝突したオブジェクト:" + gameObject.name);
        Debug.Log("衝突されたオブジェクト:" + collision.gameObject.name);

        if (collision.gameObject.tag == "Sphere")
        {
   //gameObject.GetComponent<Renderer>().material = materials[0];
            collision.gameObject.GetComponent<Renderer>().material = materials[1];//マテリアルフォルダの二番目のマテリアルを衝突された側に付与
        }
    }
}
って打って
黒球にスフィアタグつけてスフィアにだけ当たり判定するようにしたら出来ました。
ほとんどコピペですけど、ご助言どうもありがとうございました!

関連する質問

0 支持
2 回答
0 支持
1 回答
0 支持
1 回答
agaga 初心者 (120 ポイント) 2020 9/11 質問 | 127 閲覧
0 支持
0 回答
ポテトおもち 初心者 (120 ポイント) 1/12 質問 | 26 閲覧
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

105 質問

110 回答

117 コメント

134 ユーザー