前提・実現したいこと
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```
コード
ここにより詳細な情報を記載してください。
上記UnityChanScriptの{}の位置がおかしい部分があります。
void Start()の上の行の}はいりません。それが原因でスコープがおかしくなってますのでnamespaceが~とかStateが見つからないとか言われてます。
回答1件
あなたの回答
tips
プレビュー