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

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

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

Q&A

0回答

228閲覧

モバイル用の操作パッドの方向キーが反応しません

KKK32

総合スコア3

0グッド

0クリップ

投稿2023/03/12 10:52

サイドビューの作品を作っているのですが
モバイル用の操作パッドの方向キーが反応しません。
操作してもプレイアブルキャラが微動だにしません。
(ジャンプ用のボタンは反応して、ジャンプします。)

(ちなみに、PCのキーボード操作は受け付けます。
左右の矢印キーで左右に動きますし、
スペースキーでジャンプします。
会話イベントでは静止して操作不能になりますし
イベントが終わればまた、操作可能になります。)

参考サイトや関連書籍で
モバイル用の操作パッドの実装方法を参考にしたのですか・・・
どうしても動くようにはなりません・・・

ゲームエンジン
Unity2021.3.19
アセット
Fungus

以下がプレイアブルキャラにアタッチしてるスクリプトです。

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; // 地面に立っているフラグ

// アニメーション対応
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;
}

// タッチスクリーン対応追加 bool isMoving = false;

void Start()
{
// Rigidbody2Dを取ってくる
rbody = this.GetComponent<Rigidbody2D>();

// Animator を取ってくる animator = GetComponent<Animator>(); nowAnime = stopAnime; oldAnime = stopAnime; gameState = "playing"; // ゲーム中にする }

private void Update()
{
switch (state)
{
case State.Talk:
TalkEvent();
break;
case State.Normal:
MoveEvent();
break;
default:
break;
}

if (gameState != "playing") { return; } // 移動 if (isMoving == false) { // 水平方向の入力をチェックする axisH = Input.GetAxisRaw("Horizontal"); } // 向きの調整 if (axisH > 0.0f) { // 右移動 transform.localScale = new Vector2(1,1); } else if (axisH < 0.0f) { // 左移動 transform.localScale = new Vector2(-1, 1); // 左右反転させる } // キャラクターをジャンプさせる if (Input.GetButtonDown("Jump")) { Jump(); // ジャンプ }

}

private void TalkEvent()
{
number = 1;
// もし会話イベントが終了したら
number = 0;
}

private int number = 0;

public static string gameState = "playing"; // ゲームの状態

public int score = 0; // スコア

private void MoveEvent()
{
number = 0;
if (number == 0)
{
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); // 左右反転させる
}
}
}
// 地上判定
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)
{
// 地面の上でジャンプキーが押された
// ジャンプさせる
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); // アニメーション再生
}
}

void FixedUpdate()
{

}

// ジャンプ
public void Jump()
{
goJump = true; // ジャンプフラグを立てる
}

private void OnCollisionEnter2D(UnityEngine.Collision2D other)
{

if (other.gameObject.tag == ("NPC"))
{
TalkScene();
}
}

// 接触開始
private void OnTriggerEnter2D(Collider2D collision)
{

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 TalkScene()
{
animator.Play(stopAnime);
number = 1;
if (number == 1)
{
isMoving = true;
axisH = Input.GetAxisRaw("Horizontal");
}
}
// ゴール
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,15), 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;
}

}

}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問