前提
unityでゲームを作っています。
ノベルゲームのような機能を実装中にC#のスクリプトをHierarchyの中のものにいれると毎回クラッシュバグが発生します。
また、オンラインで音声のやり取りをできるサービス(PhotonVoice2)も並行して作っていたせいなのか、ゲームをスタートしようとするとこのようなコンパイルエラーが発生しています。
(PhotonManagerはPhotonVoice2を動かすときのC#のスプリクトだと思われます。)
以下のエラーメッセージが発生しました。
Assets\Photon\PhotonUnityNetworking\Demos\DemoSlotRacer\Resources\PhotonUser.cs(16,17): error CS0246: The type or namespace name 'PhotonManager' could not be found (are you missing a using directive or an assembly reference?)
実現したいこと
解決したいこと
- ノベルゲームのようにスタート画面とテクストファイルに入れた文字を1タップごとに動くようにする
できたら叶えたいこと
- 音声での通話ができるようになること
発生している問題・エラーメッセージ
Assets\Photon\PhotonUnityNetworking\Demos\DemoSlotRacer\Resources\PhotonUser.cs(16,17): error CS0246: The type or namespace name 'PhotonManager' could not be found (are you missing a using directive or an assembly reference?)
該当のソースコード(C#です。)
using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; using Photon.Realtime; namespace MRTKPhotonTest { /// <summary> /// Photon接続用クラス /// </summary> public class PhotonManager : MonoBehaviourPunCallbacks { /// <summary> /// 自インスタンス /// </summary> private static PhotonManager instance; /// <summary> /// ユーザ用プレハブ /// </summary> [SerializeField] private GameObject UserPrefab; /// <summary> /// 共有基準点 /// </summary> [SerializeField] public Transform SharingBaseTransform; void Awake() { // シングルトン化 if (instance == null) { // 未作成の場合作成 instance = this; DontDestroyOnLoad(this.gameObject); } else { // すでに作成されている場合削除 Destroy(this.gameObject); } } void Start() { // PhotonCloudに接続 Connect(); } public void Connect() { if (!PhotonNetwork.IsConnected) { // 未接続の場合PhotonServerSettings.assetに従って接続 PhotonNetwork.ConnectUsingSettings(); } } /// <summary> /// サーバ接続した場合のCallBack /// </summary> public override void OnConnectedToMaster() { // ルーム名「room」に参加する。なければ作る。 PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default); } /// <summary> /// ルーム入室した際のCallBack /// </summary> public override void OnJoinedRoom() { Debug.Log("Entered Photon Room!"); if (UserPrefab != null) { // ユーザオブジェクトを生成する GameObject userObject = PhotonNetwork.Instantiate(this.UserPrefab.name, new Vector3(0f, 0.5f, 0.8f), Quaternion.identity, 0); if (SharingBaseTransform != null) { // 共有基準点の子オブジェクトにする userObject.transform.parent = SharingBaseTransform; } } } } }
試したこと
クラッシュバグについてやこのエラーコードを検索したり、根本の問題なように見えるC#スクリプトをunityに入れる方法を探してみたのですが、難しすぎてよくわからなかったりして解決しませんでした。
環境情報(FW/ツールのバージョンなど)
unityもPhotonVoice2も今日DLしたり、アップデートしたりしているのでその2点は最新だと思います。
パソコンはWindowsです。
補足(PhotonUserについて)
こちらはunityのinspectorにて!マークがついていました。その内容は「No MonoBehaviour scripts in the file, or their names do not match the file name.」と書いてありました。(日本語訳は「ファイルに MonoBehavior スクリプトがないか、その名前がファイル名と一致しません。」です。)
ちなみにこのC#スクリプトはplayerの中に入れようとする(多分アセットしようとしている)とunityがクラッシュバグを起こします。
参考にしたサイトはこちらです。https://xr-physics-work-etc.hatenablog.com/entry/2021/04/11/185913
PhotonUserのソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; namespace MRTKPhotonTest { /// <summary> /// Photonユーザ共有用クラス /// </summary> public class PhotonUser : MonoBehaviourPunCallbacks, IPunObservable { /// <summary> /// PhotonManagerシングルトン取得用 /// </summary> private PhotonManager photonManager; void Start() { photonManager = PhotonManager.instance; // 自分のオブジェクトの場合 if (photonView.IsMine) { // オブジェクト位置設定 SetPlayerTransform(); } if (photonManager.SharingBaseTransform != null) { // 共有基準点がある場合は子オブジェクトに設定する this.transform.parent = photonManager.SharingBaseTransform; } } void Update() { // 自分のオブジェクトの場合 if (photonView.IsMine) { // オブジェクト位置設定 SetPlayerTransform(); } } /// <summary> /// プレイヤー位置設定関数 /// </summary> void SetPlayerTransform() { // カメラ位置にオブジェクトを移動 this.transform.position = Camera.main.transform.position; this.transform.rotation = Camera.main.transform.rotation; } // 今回は未使用(interface継承のため宣言) void IPunObservable.OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { } } }
最後に
皆さまから回答をもらえて非常にうれしいです!!一人で頑張っていて心が折れそうでしたが、真摯に向き合ってくださったおかげでもう少し頑張ろうという気持ちになれました!!ありがとうございます!!!