質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

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

Q&A

解決済

1回答

779閲覧

Listを使ったスクリプトが上手く動かない

hukahirame

総合スコア19

Unity

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

0グッド

0クリップ

投稿2020/06/10 10:31

自作ゲームを作成途中のUnity初心者ですが、わからないことがあったので質問させていただきます。

やりたいこと

①他のオブジェクトから要素(string)をリスト(string)へ追加し、スクリプト内で要素(int)をリスト(int)へ追加する。

②要素(string)、要素(int)の一番上をリスト内で取得する。

③要素(string)と同名のオブジェクトをResourcesフォルダからResources.Loadして、そのオブジェクトを要素(int)を使って求めた座標へInstantiateする。

④要素(string)には大量の文字、要素(int)には大量の整数を足して次から②で取得されないようにしたい。

④が出来ず、再び取得されてしまうため、Instantiateが何回も実行されてしまいます。間違っている場所を指摘していただけたら幸いです。

##スクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerInventory : MonoBehaviour//
{
public List<string> platory = new List<string>();
private List<int> spece = new List<int>();
private string result;
private Object result2;
private int resultnum;
private float canin;
private Vector3 canin2;

void Start() { process1(); spece.Add(1); spece.Add(2); } private void process1() { result = platory.Find(e => e.Length <= 20);//入ってくる要素は20文字以内だけ canin = spece.Find(n => n <=1000);//入れてる要素は1000以下だけ Debug.Log(canin); if (result!=null) { resultnum = result.Length;//          この2行は要素(string)に必ず含まれる(Clone) result = result.Substring(0,resultnum - 7);//  という文字を消すため。関係ないと思われます。 Invoke("process2", 0.1f); } else { Invoke("process1", 0.1f); } } private void process2() { result2 = Resources.Load(result); canin2 = new Vector3(canin*100, 100f); Debug.Log(result); Invoke("process3", 0.1f); } private void process3() { Instantiate(result2, canin2, Quaternion.identity); result = result + "aaaaaaaaaaaaaaaaaaaa"; canin = canin + 1000; Invoke("process1", 0.1f); Debug.Log(result);//___________________ここでは要素(string)+aaaaaa…が確認できた }

}

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

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

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

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

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

sakura_hana

2020/06/11 01:02

process3でリストの中身を加工していません(取り出した後の要素しか操作していない)。なので結果が変わらないのは当然です。 リストの中のどれが選択されたかを持っておく必要がありますが若干面倒な気がします。取り出した後リストから除去ではいけないのでしょうか?
hukahirame

2020/06/16 14:30 編集

返信が遅くなり申し訳ございません。そのことに気づいてリストから除去でやるようにしたのですが後々参照したい場面があったので除去以外でリストの中身を変更できる方法はないでしょうか?同じ要素があれば自身を消す。といったようなことをしたいです。
guest

回答1

0

ベストアンサー

(質問への追記・修正依頼を受けての回答)
IndexOfで「指定の値がリストの何番目に入っているか」が分かります(存在していなかったら-1が返ります)。
後はそれを添字で使えばいいです。

C#

1int index = platory.IndexOf("探す文字列"); 2if (index != -1) { 3 platory[index] = "書き換え後の文字列"; 4} else { 5 //リスト内に存在しない場合の処理 6}

(質問文を書く時、スクリプトは上下の行に「```」を入れると見えやすくなるので次回以降お願いします)

投稿2020/06/17 00:14

sakura_hana

総合スコア11427

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

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

hukahirame

2020/06/17 16:08

IndexOfで要素そのものを加工できることを知り、理想の動きをさせることが出来ました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問