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

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

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

Q&A

0回答

821閲覧

会話イベントの後も動かなくなりました

rteg4

総合スコア0

0グッド

0クリップ

投稿2023/03/06 12:55

会話イベントを実装したのはいいのですが、
イベント終了後もプレイヤーが操作不能に・・

ここに質問の内容を詳しく書いてください。
UnityとアセットのFungusで会話イベントを実装し、
NPCの当たり判定内に入ると
会話イベントが発生し
プレイヤーが停止する仕掛けにしたのですか
イベント終了後もプレイヤーが動かなくなってしまいました・・・

エラーメッセージ
GUI Error: Invalid GUILayout state in FlowchartWindow view. Verify that all layout Begin/End calls match
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

該当のソースコード

UnityのCスクリプト
ソースコード
プレイヤー側
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
Rigidbody2D rbody; // Rigidbody2D 型の変数
float axisH = 0.0f; // 入力
public float speed = 9.0f; // 移動速度

public float jump = 20.0f; // ジャンプ力 public LayerMask groundLayer; // 着地できるレイヤー bool goJump = false; // ジャンプ開始フラグ bool onGround = false; // 地面に立っているフラグ public float stopf = 1; // アニメーション対応 Animator animator; // アニメーター public string stopAnime = "PlayerStop"; public string moveAnime = "PlayerMove"; public string jumpAnime = "PlayerJump"; public string goalAnime = "PlayerGoal"; public string deadAnime = "PlayerOver"; string nowAnime = ""; string oldAnime = ""; State state;

public enum State
{
Normal,
Talk,
}

public void SetState(State state) { this.state = state; if (state == State.Normal) { stopf = 1; animator.enabled = true; } else if (state == State.Talk) { stopf = 0; animator.enabled = false; } } public static string gameState = "playing"; // ゲームの状態 public int score = 0; // スコア // タッチスクリーン対応追加 bool isMoving = false; // Start is called before the first frame update void Start() { // Rigidbody2Dを取ってくる rbody = this.GetComponent<Rigidbody2D>(); // Animator を取ってくる animator = GetComponent<Animator>(); nowAnime = stopAnime; oldAnime = stopAnime; gameState = "playing"; // ゲーム中にする } // Update is called once per frame void Update() { if (gameState != "playing") { return; } // 移動 if (isMoving == false) { // 水平方向の入力をチェックする axisH = Input.GetAxisRaw("Horizontal"); } // 向きの調整 if (axisH > 0.0f) { // 右移動 Debug.Log("右移動"); transform.localScale = new Vector2(1,1); } else if (axisH < 0.0f) { // 左移動 Debug.Log("左移動"); transform.localScale = new Vector2(-1, 1); // 左右反転させる } // キャラクターをジャンプさせる if (Input.GetButtonDown("Jump")) { Jump(); // ジャンプ } } void FixedUpdate() { if (gameState != "playing") { return; } // 地上判定 onGround = Physics2D.Linecast(transform.position, transform.position - (transform.up * 0.1f), groundLayer); if (onGround || axisH != 0) { // 地面の上 or 速度が 0 ではない // 速度を更新する rbody.velocity = new Vector2(speed * axisH, rbody.velocity.y); } if(onGround && goJump) { // 地面の上でジャンプキーが押された // ジャンプさせる Debug.Log(" ジャンプ! "); Vector2 jumpPw = new Vector2(0, jump); // ジャンプさせるベクトルを作る rbody.AddForce(jumpPw, ForceMode2D.Impulse); // 瞬間的な力を加える goJump = false; // ジャンプフラグを下ろす } if (onGround) { // 地面の上 if(axisH == 0) { nowAnime = stopAnime; // 停止中 } else { nowAnime = moveAnime; // 移動 } } else { // 空中 nowAnime = jumpAnime; } if(nowAnime != oldAnime) { oldAnime = nowAnime; animator.Play(nowAnime); // アニメーション再生 } if (stopf == 1) { return; } if (stopf == 0) { return; } } // ジャンプ public void Jump() { goJump = true; // ジャンプフラグを立てる Debug.Log(" ジャンプボタン押し! "); } // 接触開始 private void OnTriggerEnter2D(Collider2D collision) { if(collision.gameObject.tag == "NPC") { Talk(); // Talk } if(collision.gameObject.tag == "Goal") { Goal(); // ゴール!! } else if (collision.gameObject.tag == "Over") { GameOver(); // ゲームオーバー } else if (collision.gameObject.tag == "ScoreItem") { // スコアアイテム // ItemData を得る ItemData item = collision.gameObject.GetComponent<ItemData>(); // スコアを得る score = item.value; // アイテム削除する Destroy(collision.gameObject); } } // Talk public void Talk() { animator.Play(stopAnime); gameState = "Talk"; GameStop(); // Talk } // ゴール public void Goal() { animator.Play(goalAnime); gameState = "gameclear"; GameStop(); // ゲーム停止 } // ゲームオーバー public void GameOver() { animator.Play(deadAnime); gameState = "gameover"; GameStop(); // ゲーム停止 // ===================== // ゲームオーバー演出 // ===================== // プレイヤー当たりを消す GetComponent<CapsuleCollider2D>().enabled = false; // プレイヤーを上に少し跳ね上げる演出 rbody.AddForce(new Vector2(0, 5), ForceMode2D.Impulse); } // ゲーム停止 void GameStop() { // Rigidbody2D を取ってくる Rigidbody2D rbody = GetComponent<Rigidbody2D>(); // 速度を 0 にして強制停止 rbody.velocity = new Vector2(0, 0); } // タッチスクリーン対応追加 public void SetAxis(float h, float v) { axisH = h; if (axisH == 0) { isMoving = false; } else { isMoving = true; } }

}

NPC側

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Hit : MonoBehaviour
{
public Fungus.Flowchart flowchart = null;
public String sendMessage = "";

private void OnTriggerEnter2D(Collider2D collision) { if(collision.gameObject.tag ==("Player")) { flowchart.SendFungusMessage(sendMessage); GetComponent<BoxCollider2D>().enabled = false; } }

}

試したこと

様々なサイトを参考にしながら
会話イベント発生システムと
会話中は停止するシステムだけは出来たのですが・・・

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

Unity2021.3.19
Fungus

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問