🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

4119閲覧

ボタンを押したときにクローンを削除したい

Halhalhal

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/12/15 05:28

前提・実現したいこと

前提:現在Unityでゲームの作成をしております。ゲームの内容はあらかじめ4方向コマンドを入力し、再生ボタンを押したらコマンドの方向へ進むキャラクターを作っております。その際にコマンドのクローンを作成し画面上に出現させるようにしています。リセットボタンを押したら出現している矢印のクローンを削除する仕様にしたいと考えております。

実現したいこと:リセットボタンを押したときに、矢印のクローンの削除。

発生している問題・エラーメッセージ

リセットボタンを押したときに矢印のクローンが、それぞれの方向の矢印キーから1つづつしか消えません。

エラーメッセージは特にありません。

該当のソースコード

C#
ソースコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CloneArrow : MonoBehaviour
{
public GameObject RightArrow;
public GameObject LeftArrow;
public GameObject UpArrow;
public GameObject DownArrow;
public AudioClip keysound;
AudioSource audioSource;
private Vector3 KeyTransFormPos;
private double i = -7.5;
private int j = -1;
public GameObject objR;
public GameObject objL;
public GameObject objU;
public GameObject objD;
int arrowcnt = 0;
GameObject[] objbox = new GameObject[25];
GameObject test;

// Start is called before the first frame update void Start() { audioSource = GetComponent<AudioSource>(); int gamecnt = CharMove_MainScene1.getclearcnt(); if (gamecnt == 1) { ArrowPositionX = -7.5f; ArrowPositionY = -1; } } public static float ArrowPositionX=-7.5f; public static float ArrowPositionY=-1; public static float ArrowPosx() { return ArrowPositionX; } public static float ArrowPosy() { return ArrowPositionY; } // Update is called once per frame void Update() { KeyTransFormPos = new Vector3((float)i, j, -1); } public void RightClone() { arrowcnt += 1; objR = Instantiate(RightArrow) as GameObject; objbox[arrowcnt] = objR; audioSource.PlayOneShot(keysound); i += 0.8; ArrowPositionX += 0.8f; } public void LeftClone() { arrowcnt += 1; objL = Instantiate(LeftArrow) as GameObject; objbox[arrowcnt] = objL; audioSource.PlayOneShot(keysound); i += 0.8; ArrowPositionX += 0.8f; } public void DownClone() { arrowcnt += 1; objD = Instantiate(DownArrow) as GameObject; objbox[arrowcnt] = objD; audioSource.PlayOneShot(keysound); i += 0.8; ArrowPositionX += 0.8f; } public void UpClone() { arrowcnt += 1; objU = Instantiate(UpArrow) as GameObject; objbox[arrowcnt] = objU; audioSource.PlayOneShot(keysound); i += 0.8; ArrowPositionX += 0.8f; } public void ArrowReset() { ArrowPositionX = -7.5f; ArrowPositionY = -1; arrowcnt = 1; for (arrowcnt= 1; 26 > arrowcnt; arrowcnt++) { if (objbox[arrowcnt] == objR) { test = objR; Destroy(test); } if (objbox[arrowcnt] == objL) { test = objL; Destroy(test); } if (objbox[arrowcnt] == objU) { test = objU; Destroy(test); } if (objbox[arrowcnt] == objD) { test = objD; Destroy(test); } } }

}

試したこと

矢印コマンドを出現させる際に、配列にGameobject型のobjdなどを代入し、リセットボタンを押したときに、For文で配列の中身を変数testに代入し、Destroyで削除しようとしたのですが、if (objbox[arrowcnt] == objR)
{
test = objR;
Destroy(test);
}
この部分が一度しか実行されていませんでした。for文自体は指定回数繰り返されたことが確認できました。

補足情報(FW/ツールのバージョンなど)

Unity 2019 4.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

関数を使うときは同時にforeach文も使うと楽になりますよ
質問者様がされたいことはこのようにすればできるかと思います

foreach(Gameobject obj in objbox) { Destroy(obj); }

foreach(変数の型 変数名 in 関数名)
foreachは( )の中で宣言した変数の中に関数から順番に中身を取り出して入れ込み処理を行います
この文を使えば関数の中身全てに対して処理をできるので覚えておくと良いですよ

投稿2021/01/03 10:25

CraftTable

総合スコア234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問