前提・実現したいこと
パネル切り替え時に歩行を止めたいです。
ここに質問の内容を詳しく書いてください。
現在Unityでパネルを複数作って、トランスフォームをスクリプトでイジり、シーンの切り替えをしております。
歩いているとエンカウントでバトルパネルに切り替わるようにしていて、TM = player.GetComponent<walk2>();
TM.enabled = false;で歩行のスクリプトを消しています。(walk2を消している。)
しかし、消えた後も、最後に入力していたキーの方向に移動を永遠に続けます。
ちゃんとシーンが切り替われば止まるようにするにはどうしたら良いでしょうか?
発生している問題・エラーメッセージ
特になし
エラーメッセージ
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class encount : MonoBehaviour { [SerializeField] private float encountMinTime = 3f; // 敵と遭遇するランダム時間 [SerializeField] private float encountMaxTime = 30f; // 経過時間 [SerializeField] private float elapsedTime; // 目的の時間 [SerializeField] private float destinationTime; private walk2 TM; public GameObject player; public const int WALL_FRONTS = 1; public const int WALL_RIGHTS = 2; public GameObject panelWalls; private int wallNo; // Start is called before the first frame update void Start() { wallNo = WALL_FRONTS; SetDestinationTime(); } // Update is called once per frame void Update() { if (Mathf.Approximately(Input.GetAxis("Horizontal"), 0f) && Mathf.Approximately(Input.GetAxis("Vertical"), 0f) ) { return; } // 経過時間をカウント elapsedTime += Time.deltaTime; // 3秒後に画面遷移(scene2へ移動) if (elapsedTime >= destinationTime) { TM = player.GetComponent<walk2>(); TM.enabled = false; if (elapsedTime >= destinationTime) { wallNo++; elapsedTime = 0f; SetDestinationTime(); DisplayWall(); } } } public void SetDestinationTime() { destinationTime = Random.Range(encountMinTime, encountMaxTime); } void DisplayWall() { switch (wallNo) { case WALL_FRONTS: panelWalls.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f); break; case WALL_RIGHTS: panelWalls.transform.localPosition = new Vector3(-2000.0f, 0.0f, 0.0f); break; } } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
移動のさせ方によってはコンポーネントの機能を止めても移動は続けるので移動操作をおこなっているコードwalk2を追記して下さい
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* キャラの座標を変更するController
*/
public class walk2 : MonoBehaviour
{
[SerializeField]
float SPEED = 1.0f;
private Rigidbody2D rigidBody;
private Vector2 inputAxis;
void Start()
{
// オブジェクトに設定しているRigidbody2Dの参照を取得する
this.rigidBody = GetComponent<Rigidbody2D>();
}
void Update()
{
// x,yの入力値を得る
// それぞれ+や-の値と入力の関連付けはInput Managerで設定されている
inputAxis.x = Input.GetAxis("Horizontal");
inputAxis.y = Input.GetAxis("Vertical");
}
private void FixedUpdate()
{
// 速度を代入する
rigidBody.velocity = inputAxis.normalized * SPEED;
}
}
こちらになります。
回答1件
あなたの回答
tips
プレビュー