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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

0回答

375閲覧

キャラクター選択画面で選択したキャラクターをゲーム画面上に出したいです。

kyou310

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/09/01 16:14

前提

実現したいこと

プレイヤーAとプレイヤーBがキャラクターをそれぞれ選択し戦う2D対戦ゲームを作りたいと考えています。
キャラクター選択画面で選択したキャラクターがゲーム画面に出てくるようにしたいです。
プレイヤーAがキャラクターを選択ボタンを押した後に決定ボタンを押し、プレイヤーBも同様に決定ボタンを押して、最後にスタートボタンを押すことでゲームシーンへと遷移させたいです。
PlayerPrefsを用いて、選択したキャラクターの番号に応じて呼び出すAnimatorを切り替えたいと考えています。
現状はとりあえず

発生している問題・エラーメッセージ

質問は全部で3つあります。
一つ目・・・選択したキャラクターの番号(Aの値)がゲームシーンのDebug.Log では常に0となっていて、原因がわからず困っています。
二つ目・・・プレイヤーAとプレイヤーBが同じ画面でキャラクターを選択したいです。一つのボタンのOnclickには一つのメソッドしか指定できないので、同じボタンをプレイヤーA用とB用に2つ作成するか、別のシーンを新たに加える必要があるのでしょうか。同じボタンを複数のメソッドから参照することはやはりできないのでしょうか。
三つ目・・・GameManager スクリプト上で選択したキャラクターによらず、キャラクターの移動を常に矢印キーでできるようにしたいのですが、void updateの animator1.SetFloat("Speed1", Mathf.Abs(x));の部分がAnimatorクラスの名前によって変わるため、この部分だけAの値によって場合分けしているのですが、非効率的でしょうか。何か改善案がありましたらご教授いただければ幸いです。

該当のソースコード

キャラクター選択スクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class CharacterSelect: MonoBehaviour
{
int selectCharaNumberforA;
int selectCharaNumberforB;
void Start()
{
selectCharaNumberforA = 0;
}

public void OnClickA() { selectCharaNumberforA = 0; Debug.Log("キャラ1"); } public void OnClickB() { selectCharaNumberforA = 1; Debug.Log("キャラ2"); } public void OnClickC() { selectCharaNumberforA = 2; } public void PlayerAdecision() { Debug.Log("プレイヤーA決定"); PlayerPrefs.SetInt("PlayerA", selectCharaNumberforA); //プレイヤーAという名前で値を保存 //SceneManager.LoadScene("GameScene"); }

// public void OnClickA2()
// {
// selectCharaNumberforB = 0;
// }

//public void OnClickB2() //{ // selectCharaNumberforB = 1; //} //public void OnClickC2() //{ // selectCharaNumberforB = 2; //} //public void PlayerBdecision() //{ // PlayerPrefs.SetInt("PlayerB", selectCharaNumberforB); //} public void OnClickStart() { SceneManager.LoadScene("GameScene"); }

}
ゲームスクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
public float moveSpeed = 3f;
Rigidbody2D rbA;
Rigidbody2D rbB;
Animator animator1;
Animator animator2;
Animator animator3;
Animator animator4;
Animator animator5;

int A; int B; void Start() { int PlayerA = PlayerPrefs.GetInt("PlayerA"); int PlayerB = PlayerPrefs.GetInt("PlayerB"); A = PlayerA; B = PlayerB; Debug.Log(A); // Debug.Log(B); rbA = GetComponent<Rigidbody2D>(); rbB = GetComponent<Rigidbody2D>(); if (PlayerA == 0) { animator1 = GetComponent<Animator>(); } else if (PlayerA == 1) { animator2 = GetComponent<Animator>(); } else if (PlayerA == 2) { animator3 = GetComponent<Animator>(); } else if (PlayerA == 3) { animator4 = GetComponent<Animator>(); } else if (PlayerA == 4) { animator5 = GetComponent<Animator>(); } if (PlayerB == 0) { animator1 = GetComponent<Animator>(); } else if (PlayerB == 1) { animator2 = GetComponent<Animator>(); } else if (PlayerB == 2) { animator3 = GetComponent<Animator>(); } else if (PlayerB == 3) { animator4 = GetComponent<Animator>(); } else if (PlayerB == 4) { animator5 = GetComponent<Animator>(); } } void Update() //上手く動作していないため、PlayerAののスクリプトのみ記述しています。 { float x = Input.GetAxisRaw("Horizontal"); rbA.velocity = new Vector2(x * moveSpeed, rbA.velocity.y); if (x > 0) { transform.localScale = new Vector2(0.6f, 0.5f); } if (x < 0) { transform.localScale = new Vector2(-0.6f, 0.5f); } if (A == 0) { animator1.SetFloat("Speed1", Mathf.Abs(x)); //走るアニメーションへの遷移 } else if (A == 1) { animator2.SetFloat("Speed1", Mathf.Abs(x)); } else if (A == 2) { animator3.SetFloat("Speed1", Mathf.Abs(x)); } else if (A == 3) { animator4.SetFloat("Speed1", Mathf.Abs(x)); } else if (A == 4) { animator5.SetFloat("Speed1", Mathf.Abs(x)); }

  }
}

試したこと

キャラクターを選択するボタン、プレイヤーAがキャラクター選択を決定するボタンをDebug.Logで確認した結果、機能していました。

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問