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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

2717閲覧

【Unity】GetComponentで他のスクリプトを参照しようとするとエラーが出ます。

kosho206

総合スコア41

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2020/11/17 11:53

前提・実現したいこと

GetComponent<>()を使って他のスクリプトを参照しようとしたのですが、下記のエラーが出て参照ができません。

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

Severity Code Description Project File Line Suppression State Error CS0246 The type or namespace name 'FixedJoystick' could not be found (are you missing a using directive or an assembly reference?) Assembly-CSharp-firstpass D:\Unity GameProject\tutorial\SmartPhone UI Test\Assets\Standard Assets\Characters\ThirdPersonCharacter\Scripts\ThirdPersonUserControl.cs 51 Active

該当のソースコード

Standard Assetsに入っている「ThirdPersonUserControl」のスクリプトの中でコードを書き足してGetComponentを書いた所、今回のエラーが発生して参照ができませんでした。
エラーが発生した行は、FixedUpdate()内の一番上の行です。
「FixedJoystick」というスクリプトを参照したいのですができません。

using System; using UnityEngine; using UnityStandardAssets.CrossPlatformInput; namespace UnityStandardAssets.Characters.ThirdPerson { [RequireComponent(typeof (ThirdPersonCharacter))] public class ThirdPersonUserControl : MonoBehaviour { private ThirdPersonCharacter m_Character; // A reference to the ThirdPersonCharacter on the object private Transform m_Cam; // A reference to the main camera in the scenes transform private Vector3 m_CamForward; // The current forward direction of the camera private Vector3 m_Move; private bool m_Jump; // the world-relative desired move direction, calculated from the camForward and user input. [SerializeField] GameObject Joystick; private void Start() { // get the transform of the main camera if (Camera.main != null) { m_Cam = Camera.main.transform; } else { Debug.LogWarning( "Warning: no main camera found. Third person character needs a Camera tagged \"MainCamera\", for camera-relative controls.", gameObject); // we use self-relative controls in this case, which probably isn't what the user wants, but hey, we warned them! } // get the third person character ( this should never be null due to require component ) m_Character = GetComponent<ThirdPersonCharacter>(); } private void Update() { if (!m_Jump) { m_Jump = CrossPlatformInputManager.GetButtonDown("Jump"); } } // Fixed update is called in sync with physics private void FixedUpdate() { float hoge = Joystick.GetComponent<FixedJoystick>().Vertical; // read inputs float h = CrossPlatformInputManager.GetAxis("Horizontal"); float v = CrossPlatformInputManager.GetAxis("Vertical"); bool crouch = Input.GetKey(KeyCode.C); // calculate move direction to pass to character if (m_Cam != null) { // calculate camera relative direction to move: m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized; m_Move = v*m_CamForward + h*m_Cam.right; } else { // we use world-relative directions in the case of no main camera m_Move = v*Vector3.forward + h*Vector3.right; } #if !MOBILE_INPUT // walk speed multiplier if (Input.GetKey(KeyCode.LeftShift)) m_Move *= 0.5f; #endif // pass all parameters to the character control script m_Character.Move(m_Move, crouch, m_Jump); m_Jump = false; } } }

試したこと

namespaceのせいで参照ができなくなっているのはなんとなくわかるのですが、具体的なことが全くわかりません。
「Unity namespace スクリプトを参照できない」
などと検索してみたのですがわかりませんでした。

「using namespaceの名前」

と書けば、指定したnamespaceの変数などを参照できるようになりますが、今回はこれと同じ問題ではありませんでした。
新しく作成した、namespaceを設定していないスクリプトからなら問題なく「FixedJoystick」を参照できました。

「ThirdPersonUserControl」スクリプトからは参照できなくなってしまう理由がわかる方がいたら教えて下さい。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

だいぶ前に見かけた別の方のご質問に「MonoBehavior継承をPhoton.MonoBehavior継承にしたいと思っ他のですがエラーが出てしまいます」とか「FirstPersonControllerのscriptに値を参照させたい!」といったものがありました。ThirdPersonUserControlはStandard Assetsのスクリプトのはずですから、これらのケースに該当するのではないでしょうか?

##追記

もしFixedJoystickJoystick Packに収録されているものを指しているのでしたら、プロジェクト内の「Joystick Pack」フォルダを「Plugins」フォルダに(なければ新しく作って)入れてしまい、「Assets」→「Plugins」→「Joystick Pack」→...といったフォルダ構成にしてやればThirdPersonUserControl内でFixedJoystickが見えるようになるんじゃないかと思います。

投稿2020/11/17 12:03

編集2020/11/17 22:13
Bongo

総合スコア10807

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

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

kosho206

2020/11/18 08:29

ありがとうございます。 コンパイルの順番が決まっていることについて初めて知りました。 教えていただいたとおり、JoystickPackがフェーズ1でコンパイルされるようにフォルダ構成を少し変えたら解決できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問