🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity

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

Q&A

解決済

1回答

5424閲覧

unityのCS0116 とCS0246のエラー

kimkeimu

総合スコア2

C#

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

Unity

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

0グッド

0クリップ

投稿2021/02/22 16:29

前提・実現したいこと

https://gametukurikata.com/?s=%E3%83%A6%E3%83%8B%E3%83%86%E3%82%A3%E3%81%A1%E3%82%83%E3%82%93
unityを練習したいと思い最初に何か具体的にできないかと考え、上記のサイトをマネして操作方法を覚えようとしました。
これの
https://gametukurikata.com/unitychanrpg/unitychanrpg5 
の会話の部分でつまずいておりいろいろなサイトをうろうろしていますがわかりませんでした。何卒宜しくお願いします。

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

Assets\RPG\Script\UnityChanScript.cs(40,6): error CS0116: A namespace cannot directly contain members such as fields or methods Assets\RPG\Script\ConversationScopeScript.cs(9,26): error CS0246: The type or namespace name 'State' could not be found (are you missing a using directive or an assembly reference?)

該当のソースコード

これがUnityChanScriptのスクリプトです。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class UnityChanScript : MonoBehaviour { public enum State { Normal, Talk } private CharacterController characterController; private Animator animator; // キャラクターの速度 private Vector3 velocity; // キャラクターの歩くスピード [SerializeField] private float walkSpeed = 2f; // キャラクターの走るスピード [SerializeField] private float runSpeed = 4f; //ユニティちゃんの状態 private State state; //ユニティちゃん会話処理スクリプト private UnityChanTalkScript unityChanTalkScript; } // Start is called before the first frame update void Start() { state = State.Normal; unityChanTalkScript = GetComponent<UnitychanTalkScript>(); characterController = GetComponent<CharacterController>(); animator = GetComponent<Animator>(); } // Update is called once per frame void Update() { if (state == State.Normal) { if (characterController.isGrounded) { velocity = Vector3.zero; var input = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical")); if (input.magnitude > 0.1f) { transform.LookAt(transform.position + input.normalized); animator.SetFloat("Speed", input.magnitude); if (input.magnitude > 0.5f) { velocity += transform.forward * runSpeed; } else { velocity += transform.forward * walkSpeed; } } else { animator.SetFloat("Speed", 0f); } if (unityChanTalkScript.GetConversationPartner() != null && Input.GetButtonDown("Jump") ) { SetState(State.Talk); } } } else if (state == State.Talk) { } velocity.y += Physics.gravity.y * Time.deltaTime; characterController.Move(velocity * Time.deltaTime); } またこちらがconversationのスクリプトになります。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ConversationScopeScript : MonoBehaviour { // 状態変更と初期設定 public void SetState(State state) { this.state = state; if (state == State.Talk) { velocity = Vector3.zero; animator.SetFloat("Speed", 0f); unityChanTalkScript.StartTalking(); } } public state GetState() { return State; } void OnTriggerStay(Collider col) { if (col.tag == "Player" && col.GetComponent<UnityChanScript>().GetState() != UnityChanScript.State.Talk ) { // ユニティちゃんが近づいたら会話相手として自分のゲームオブジェクトを渡す col.GetComponent<UnityChanTalkScript>().SetConversationPartner(transform.parent.gameObject); } } void OnTriggerExit(Collider col) { if (col.tag == "Player" && col.GetComponent<UnityChanScript>().GetState() != UnityChanScript.State.Talk ) { // ユニティちゃんが遠ざかったら会話相手から外す col.GetComponent<UnityChanTalkScript>().ResetConversationPartner(transform.parent.gameObject); } } }

試したこと

スクリプトの順番がおかしかったりしたのでそれを変えてみたり翻訳で出ているStateを探しました。

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

バージョンは2020.22f1```
コード

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

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/02/22 22:25

上記UnityChanScriptの{}の位置がおかしい部分があります。 void Start()の上の行の}はいりません。それが原因でスコープがおかしくなってますのでnamespaceが~とかStateが見つからないとか言われてます。
guest

回答1

0

ベストアンサー

google翻訳
Assets\RPG\Script\UnityChanScript.cs(40,6): error CS0116:名前空間にフィールドやメソッドなどのメンバーを直接含めることはできません
Assets\RPG\Script\ConversationScopeScript.cs(9,26): error CS0246: タイプまたは名前空間名 'State'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

StartとUpdateメソッドがクラスの外に出てしまってます
これではc#ではダメなので、クラスの中に収めましょう

投稿2021/02/23 00:55

y_waiwai

総合スコア88040

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

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

kimkeimu

2021/02/23 03:25

UnityChanScriptの{}の位置をUPdateとstartの範囲まで広げたらCS0246が消えたのですが、CS0246のエラーがAssets\RPG\Script\ConversationScopeScript.cs(9,26): error CS0246: The type or namespace name 'State' could not be found (are you missing a using directive or an assembly reference?) Assets\RPG\Script\ConversationScopeScript.cs(20,12): error CS0246: The type or namespace name 'state' could not be found (are you missing a using directive or an assembly reference?) 二つ残ってしまったのはなぜなのでしょうか?すみません教えていただきたいです。
y_waiwai

2021/02/23 04:30

まだなんか間違ってるってことですな。 コードを提示しよう
kimkeimu

2021/02/23 04:49

こちらがConversationScopeScriptです。最初のコードエラーはこのスクリプトをいじらずもう一つのUnityChanScriptのclassの{}の範囲を全体に広げたらうまくいっておりConversationのほうはいじってないです。見づらいかもです、、、 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ConversationScopeScript : MonoBehaviour { // 状態変更と初期設定 public void SetState(State state) { this.state = state; if (state == State.Talk) { velocity = Vector3.zero; animator.SetFloat("Speed", 0f); unityChanTalkScript.StartTalking(); } } public state GetState() { return State; } void OnTriggerStay(Collider col) { if (col.tag == "Player" && col.GetComponent<UnityChanScript>().GetState() != UnityChanScript.State.Talk ) { // ユニティちゃんが近づいたら会話相手として自分のゲームオブジェクトを渡す col.GetComponent<UnityChanTalkScript>().SetConversationPartner(transform.parent.gameObject); } } void OnTriggerExit(Collider col) { if (col.tag == "Player" && col.GetComponent<UnityChanScript>().GetState() != UnityChanScript.State.Talk ) { // ユニティちゃんが遠ざかったら会話相手から外す col.GetComponent<UnityChanTalkScript>().ResetConversationPartner(transform.parent.gameObject); } } } こちらがUnityChanScriptになります。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class UnityChanScript : MonoBehaviour { public enum State { Normal, Talk } private CharacterController characterController; private Animator animator; // キャラクターの速度 private Vector3 velocity; // キャラクターの歩くスピード [SerializeField] private float walkSpeed = 2f; // キャラクターの走るスピード [SerializeField] private float runSpeed = 4f; //ユニティちゃんの状態 private State state; //ユニティちゃん会話処理スクリプト private UnityChanTalkScript unityChanTalkScript; // Start is called before the first frame update void Start() { state = State.Normal; unityChanTalkScript = GetComponent<UnitychanTalkScript>(); characterController = GetComponent<CharacterController>(); animator = GetComponent<Animator>(); } // Update is called once per frame void Update() { if (state == State.Normal) { if (characterController.isGrounded) { velocity = Vector3.zero; var input = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical")); if (input.magnitude > 0.1f) { transform.LookAt(transform.position + input.normalized); animator.SetFloat("Speed", input.magnitude); if (input.magnitude > 0.5f) { velocity += transform.forward * runSpeed; } else { velocity += transform.forward * walkSpeed; } } else { animator.SetFloat("Speed", 0f); } if (unityChanTalkScript.GetConversationPartner() != null && Input.GetButtonDown("Jump") ) { SetState(State.Talk); } } } else if (state == State.Talk) { } velocity.y += Physics.gravity.y * Time.deltaTime; characterController.Move(velocity * Time.deltaTime); } }
退会済みユーザー

退会済みユーザー

2021/02/23 06:11

ConversationScopeScriptにstate変数がない。 this.state←そもそもstateの定義がない。 private State state;フィールド変数が必要。 public state GetState() return State; stateとState、戻り値の型と変数が逆では? ぱっと見で気付いた事だけです。
kimkeimu

2021/02/26 02:27

うまくいきました!ありがとうございます
U_U_Jenkins

2021/03/04 18:01

うまくいったなら解決済にしてください。 未解決の質問として回答者が取り組み、無駄な時間を食います。
kimkeimu

2021/03/05 02:03

。ベストアンサー押してませんでした。 時間を取らせてしまったなら申し訳ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問