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

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

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

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

Q&A

解決済

2回答

3127閲覧

持ち物画面を作成したいです

miiichat

総合スコア72

Unity

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

0グッド

1クリップ

投稿2017/06/20 04:16

###わからないこと
持ち物画面を作成を作成しようとこちらを参考にしながら作っいますが、エラーが出てしまいます。

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemDataBase : MonoBehaviour { private ItemData[] itemList = new ItemData[2]; void Start () { itemList[0] = new ItemData(Resources.Load("sword", Sprite), "懐中電灯", "あれば便利な辺りを照らすライト"); itemList[1] = new ItemData(Resources.Load("sword", Sprite), "ナイフ", "切れ味するどいナイフ"); } ItemData GetItemData (int num) { return itemList[num]; } int GetItemTotal () { return itemList.length; } }
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class ItemData { private Sprite itemObj; private String itemInformation; private String itemName; ItemData (Sprite item, String name, String information) { this.itemObj = item; this.itemName = name; this.itemInformation = information; } Sprite GetItemObj() { return this.itemObj; } String GetItemName() { return this.itemName; } String GetItemInformation() { return this.itemInformation; } }

エラー

・Assets/ItemDataBase.cs(10,54): error CS0118: `UnityEngine.Sprite' is a `type' but a `variable' was expected ・Assets/ItemDataBase.cs(10,54): error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected ・Assets/ItemDataBase.cs(10,17): error CS0122: `ItemData.ItemData(UnityEngine.Sprite, string, string)' is inaccessible due to its protection level ・Assets/ItemDataBase.cs(11,54): error CS0118: `UnityEngine.Sprite' is a `type' but a `variable' was expected ・Assets/ItemDataBase.cs(11,54): error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected ・Assets/ItemDataBase.cs(11,17): error CS0122: `ItemData.ItemData(UnityEngine.Sprite, string, string)' is inaccessible due to its protection level ・Assets/ItemDataBase.cs(16,3): error CS0127: `ItemDataBase.GetItemData(int)': A return keyword must not be followed by any expression when method returns void ・Assets/ItemDataBase.cs(21,19): error CS1061: Type `ItemData[]' does not contain a definition for `length' and no extension method `length' of type `ItemData[]' could be found. Are you missing an assembly reference?

ItemDataBaseは空のオブジェクトにくっつけてます。

Itemがうまくインスタンス化できてないみたいです・・

回答いただけるととても嬉しいです。
お願い致します。

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

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

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

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

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

guest

回答2

0

インスタンス出来る出来ない以前に、コードとして間違っています。
質問する前に「エラー文で検索する」「公式リファレンスを読む」ようにすると早く解決します。
(引用元のブログを確認しましたが、恐らく元のコードはjavascriptで書かれていて、それをC#に機械的に置き換えただけで動作確認はしていないのだと思います)

ItemDataBase.cs

■Resources.Load
Resources.Load-公式リファレンス」を読むと分かりますが、
Resources.Load("sword", Sprite)

Resources.Load("sword", typeof(Sprite))
こう書く必要があります。

また、このままだと帰って来るのはObject型で、ItemDataと型が合わない(Sprite型に変換する必要がある)ので、
itemList[0] = new ItemData(Resources.Load("sword",Sprite), "懐中電灯", "あれば便利な辺りを照らすライト");

itemList[0] = new ItemData(Resources.Load("sword", typeof(Sprite)) as Sprite, "懐中電灯", "あれば便利な辺りを照らすライト");
こうなります。

■GetItemTotal
「length」になっていますが、正しくは「Length」です。(頭文字が大文字)

ItemData.cs

■数ヶ所「String」になっていますが、正しくは「string」です。(全て小文字)

■protection levelエラー
ItemData (Sprite item, string name, string information) {
これでは外部からアクセス出来ないので
public ItemData (Sprite item, string name, string information) {
こうします。

投稿2017/06/20 06:54

sakura_hana

総合スコア11425

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

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

0

ベストアンサー

リファレンスの右上にC#とJavascriptを切り替えるボタンがありますので、これでサンプルコードの記述を比較されますと、書き換えの際のご参考になると思います。

C#の場合、Type型が要求された場合は(ここではLoadの第2引数)型名だけではうまくいかず、typeof(Shape)としてTypeオブジェクトを取得し渡してやる必要があります。

また、あるクラスの外部からprivateなクラスメンバーにはアクセスできません。ご提示コード中のメンバーでpublicが付いていないものは自動的にprivateだと見なされますので、ItemDataBaseの中からItemDataのコンストラクターを呼ぶ(new ItemData(...の箇所)ことができなくなっています。ですので、適宜publicを付け足してみてください。

.NET FrameworkとUnityでは微妙に違う場合もありますが、MicrosoftのC#に関する記事も制作上のご参考になるかと思います。アクセス修飾子についてはアクセス修飾子 (C# プログラミング ガイド) | Microsoft Docsに記載がありました。

投稿2017/06/20 07:26

Bongo

総合スコア10807

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

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

Bongo

2017/06/20 07:29

お先にsakura_hanaさんの詳しいご解説がありましたね。ぜひご参考になさってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問