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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity

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

Q&A

解決済

1回答

2045閲覧

[Unity]ResourcesのPrefabをGameObjectとして配列に代入して、タップした場所にランダムで表示したい

Timgun

総合スコア18

C#

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

Unity

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

0グッド

0クリップ

投稿2018/12/18 01:40

Unity、プログラミングとも、初めてで、今年の9月くらいから少しずつ勉強してここまできました。
下記にヒントだけでもいただけますと大変助かります。

◇目的
Resourcesフォルダ内のPrefabを配列に代入して、タップした場所にランダムにそのアイテムを配置したいです。

◇問題点
下記のエラーの意味がわからず困っております。
InvalidCastException: Cannot cast from source type to destination type.
Click_gen_new.Start () (at Assets/Scripts/Click_gen_new.cs:20)

◇コード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Click_gen_new : MonoBehaviour 6{ 7 // 配列の指定 8 public GameObject[] Icon; 9 10 // クリックした位置座標 11 private Vector3 clickPosition; 12 13 // 配列から取り出し先 14 GameObject dropIcon; 15 16 17 // Use this for initialization 18 void Start() 19 { 20 Icon = (GameObject[])Resources.LoadAll("icons",typeof(GameObject)); 21 22 23 } 24 25 // Update is called once per frame 26 void Update() 27 { 28 // マウス入力で左クリックをした瞬間 29 if (Input.GetMouseButtonDown(0)) 30 { 31 dropIcon = Icon[Random.Range(0, Icon.Length)]; 32 33 // ここでの注意点は座標の引数にVector2を渡すのではなく、Vector3を渡すことである。 34 // Vector3でマウスがクリックした位置座標を取得する 35 clickPosition = Input.mousePosition; 36 37 // Z軸修正 38 clickPosition.z = 10f; 39 40 // オブジェクト生成 : オブジェクト(GameObject), 位置(Vector3), 角度(Quaternion) 41 // ScreenToWorldPoint(位置(Vector3)):スクリーン座標をワールド座標に変換する 42 GameObject inst = Instantiate(dropIcon, Camera.main.ScreenToWorldPoint(clickPosition), dropIcon.transform.rotation); 43 44 //レイヤーの付与。レイヤー付与までの時間後に実施 45 46 //レイヤー付与までの時間 47 //float TimeCount = 2.0f; 48 49 50 if (inst.tag != "not_toys") 51 { 52 inst.layer = LayerMask.NameToLayer("toys"); 53 } 54 55 56 57 } 58 59 } 60} 61

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

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

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

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

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

guest

回答1

0

ベストアンサー

Icon = (GameObject[])Resources.LoadAll("icons",typeof(GameObject));

上記を、
Icon = Resources.LoadAll<GameObject>("icons");

に変えてみてはどうでしょうか?
試してないので自信ないですが・・・。

投稿2018/12/18 02:48

ganta7188

総合スコア436

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

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

Timgun

2018/12/18 03:24

ありがとうございます! 解決できました。 GameObjectとして配列に代入できていないのかなと色々試していたのですが、 このように記載するんですね。 勉強になりました!
ganta7188

2018/12/18 04:15

よかったです! <>はジェネリクスと呼ばれる書き方で主に型の指定に使われます。 そのうち沢山使うのでジェネリクスという単語だけ覚えておくといいかと思います。
Timgun

2018/12/18 05:47

ありがとうございます! ジェネリクスの使い方を知らなかったので、勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問