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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

Q&A

解決済

2回答

8175閲覧

【Unity】VisualStudioでスクリプト間の型参照ができない

ryo_2727

総合スコア0

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

0グッド

0クリップ

投稿2020/05/21 12:35

前提・実現したいこと

Visual Studio Community で、スクリプト間で型の参照をしたい

ここに質問の内容を詳しく書いてください。
現在、Unityでゲーム開発をしており、コーディングするのにVisual Studio Communityを使用しております。
AとBという.csのスクリプトファイルが2つあり、AのメソッドをBで呼び出したいためAの型をBで宣言しました。

ところが「型または名前空間の名前 'A'(クラス名) が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)」というエラーメッセージが表示され、参照することが出来ません。コード側の問題なのか、はたまたスクリプト間が紐づいていないのか問題も切り分けられず苦慮しております。以下に貼り付けさせて頂く NewBehaviourScript が問題の参照出来ない型になります。

該当ソースコード、試したことなど記載させて頂きますので、何かアドバイスを頂けますと幸いです。
宜しくお願いいたします。

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

型または名前空間の名前 'A'(クラス名) が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)

該当のソースコード

A呼び出される側のメソッドを記述 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class NewBehaviourScript : MonoBehaviour { public GameObject text_object1 = null; // Textオブジェクト public GameObject panel_object1 = null; //Canvasオブジェクト private bool active_status = false; // Panelの表示/非表示 // メッセージフラグ private int msg_flg; // 初期表示 void Start() { // オブジェクトからTextコンポーネントを取得 Text search_text = text_object1.GetComponent<Text>(); // 1つ目のメッセージを表示 search_text.text = "喉が乾いたなあ。。"; msg_flg = 0; } // 更新時 void Update() { } // テキストメッセージの表示/非表示を切り替えます public void DisplayMassage(GameObject target_objectet) { if (active_status == true) { target_objectet.SetActive(false); active_status = false; } else { target_objectet.SetActive(true); active_status = true; } } }
B 呼び出し側のスクリプト using System; using UnityEngine; using UnityStandardAssets.CrossPlatformInput; using UnityStandardAssets.Utility; using Random = UnityEngine.Random; namespace UnityStandardAssets.Characters.FirstPerson { [RequireComponent(typeof (CharacterController))] [RequireComponent(typeof (AudioSource))] public class FirstPersonController : MonoBehaviour { [SerializeField] private bool m_IsWalking; [SerializeField] private float m_WalkSpeed; [SerializeField] private float m_RunSpeed; [SerializeField] [Range(0f, 1f)] private float m_RunstepLenghten; [SerializeField] private float m_JumpSpeed; [SerializeField] private float m_StickToGroundForce; [SerializeField] private float m_GravityMultiplier; [SerializeField] private MouseLook m_MouseLook; [SerializeField] private bool m_UseFovKick; [SerializeField] private FOVKick m_FovKick = new FOVKick(); [SerializeField] private bool m_UseHeadBob; [SerializeField] private CurveControlledBob m_HeadBob = new CurveControlledBob(); [SerializeField] private LerpControlledBob m_JumpBob = new LerpControlledBob(); [SerializeField] private float m_StepInterval; [SerializeField] private AudioClip[] m_FootstepSounds; // an array of footstep sounds that will be randomly selected from. [SerializeField] private AudioClip m_JumpSound; // the sound played when character leaves the ground. [SerializeField] private AudioClip m_LandSound; // the sound played when character touches back on ground. private Camera m_Camera; private bool m_Jump; private float m_YRotation; private Vector2 m_Input; private Vector3 m_MoveDir = Vector3.zero; private CharacterController m_CharacterController; private CollisionFlags m_CollisionFlags; private bool m_PreviouslyGrounded; private Vector3 m_OriginalCameraPosition; private float m_StepCycle; private float m_NextStep; private bool m_Jumping; private AudioSource m_AudioSource; private NewBehaviourScript displayText; // Use this for initialization private void Start() { m_CharacterController = GetComponent<CharacterController>(); m_Camera = Camera.main; m_OriginalCameraPosition = m_Camera.transform.localPosition; m_FovKick.Setup(m_Camera); m_HeadBob.Setup(m_Camera, m_StepInterval); m_StepCycle = 0f; m_NextStep = m_StepCycle/2f; m_Jumping = false; m_AudioSource = GetComponent<AudioSource>(); m_MouseLook.Init(transform , m_Camera.transform); } // Update is called once per frame private void Update() { if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit, 5)) { if (hit.transform.gameObject.name == "VendingMachine (1)") { GameObject displayTextGameObject = GameObject.Find("MachineTextManager"); NewBehaviourScript displayText = displayTextGameObject.GetComponent<NewBehaviourScript>(); } } }

試したこと

・Visual Studio の再起動
・Visual Studio の「プロジェクト」⇨「参照の編集」 ⇨ 参照の編集がグレーアウトされており押下出来ず。
・それぞれのソースコードはUnityで動作することは確認済み

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

Visual Studio for Mac(Ver.8.2.1(build19))

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

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

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

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

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

YAmaGNZ

2020/05/21 13:13

namespaceが違うとか?
ryo_2727

2020/05/21 13:53

お返事ありがとうございます。 自分で確認した限りは namespase に問題がないような気がします。。
YAmaGNZ

2020/05/21 14:10

NewBehaviourScriptのほうにnamespace指定が無いので判断できないのですが、FirstPersonController側はnamespaceにUnityStandardAssets.Characters.FirstPersonとしているので、同じnamespaceではないのでなないかと思ったのですが、同じnamespaceなのだったら無視してください。
ryo_2727

2020/05/22 00:18

同じnamespaseか確実に確認するにはどうしたらいいでしょうか。。
YAmaGNZ

2020/05/22 01:35

Unityですとスクリプトでnamespaceを指定しない場合はglobalとなるようです。 private global::NewBehaviourScript displayText; といった感じで書いたら通りますかね? また、思い込みで大文字小文字の違いを見逃しているとかあったりしませんか?
ryo_2727

2020/05/22 02:08

ご丁寧にありがとうございます。 >private global::NewBehaviourScript displayText; >といった感じで書いたら通りますかね? 試させて頂きましたが通りませんでした。。。 絶対に解決したいのですが完全に手詰まりになり苦慮しております。。。
Daregada

2020/05/31 02:28

問題をはっきりさせるために、Bのクラスをまるごとコピペして、Aのnamespace内に貼り付け、import文の不足分をAの冒頭に追加してみればいいんじゃない。これでエラーがでなくなればnamespaceの問題なので。
ryo_2727

2020/06/06 07:16

アドバイス頂きまして有難うございます。 >Bのクラスをまるごとコピペして、Aのnamespace内に貼り付け、import文の不足分をAの冒頭に追加して>みればいいんじゃない。これでエラーがでなくなればnamespaceの問題なので。 上記試を試したところnamespaceの問題でなく、2つのスクリプトファイルを同じディレクトリ内に置かないと参照出来ないことが分かりました!有難うございました!
guest

回答2

0

自己解決

2つのスクリプトファイルを同じフォルダ内に配置することで参照出来るようになりました。
みなさま有難うございました!!!

投稿2020/06/06 07:17

ryo_2727

総合スコア0

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

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

0

片方のファイルがプロジェクトのビルド対象に入ってないとかではないでしょうか。

投稿2020/05/21 13:04

編集2020/05/21 13:04
y_waiwai

総合スコア87719

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

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

ryo_2727

2020/05/21 13:54

Visual Studio for Mac だとどこから設定出来るのでしょうか。。
y_waiwai

2020/05/21 14:01

ソリューションエクスプローラのプロジェクトを右クリックして追加>既存の項目、でファイルを選ぶことでソースファイルを追加できますが。
ryo_2727

2020/05/22 00:19

ありがとうございます。 確認したところ既に両ファイルともビルド対象であることが確認出来ました。
y_waiwai

2020/05/22 00:35

なら参照できないことはないはずですが。 あとは、スペルミスやら大文字小文字全角半角違いがないか見てみることでしょうか
fiveHundred

2020/05/22 01:45

今回はUnityの質問なので、このような手順は取らないはずです。 (UnityにおけるVSはあくまでエディタやデバッガという位置付けなので、こちらの設定をいじっても意味ないことがほとんどです) Unityの場合、プロジェクトのAssetsディレクトリに入っていれば全てビルド対象です。
ryo_2727

2020/05/22 02:06

お二方ともご丁寧に返信頂きましてありがとうございます。 両ファイルともAssetsディレクトリに入っていまして参照出来ない問題は解決出来ておりません。。 打つ手がなく苦慮しております。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問