Skip to content

Instantly share code, notes, and snippets.

@somedeveloper00
Last active June 21, 2026 15:55
Show Gist options
  • Select an option

  • Save somedeveloper00/7d925c472e4cc1c65763337c9de54a65 to your computer and use it in GitHub Desktop.

Select an option

Save somedeveloper00/7d925c472e4cc1c65763337c9de54a65 to your computer and use it in GitHub Desktop.
Lobbyスクリプト
using System.Threading.Tasks;
using System.Threading.Tasks.Dataflow;
using UnityEngine;
using UnityEngine.InputSystem;
public enum CharacterType
{
Character1,
Character2,
Character3,
}
public class PlayerInfo
{
public InputDevice PairWithDevice { get; private set; } = default;
public CharacterType SelectedCharacter { get; private set; } = default;
public PlayerInfo(InputDevice pairWithDevice, CharacterType selectedCharacter)
{
PairWithDevice = pairWithDevice;
SelectedCharacter = selectedCharacter;
}
}
public class Lobby : MonoBehaviour
{
public GameObject character1PreviewPrefab, character2PreviewPrefab, character3PreviewPrefab;
public Transform player1PreviewSpawnPoint, player2PrviewSpawnPoint;
GameObject player1Preview, player2Preview;
// どこかで各プレイヤーの情報を配列にしておく
private PlayerInfo[] playerInfos = new PlayerInfo[2]
{
new(null, CharacterType.Character1),
new(null, CharacterType.Character2),
};
void Start()
{
UpdatePlayer1Visual();
UpdatePlayer2Visual();
}
/// <summary>
/// プレイヤー1の「→」ボタンから発火
/// </summary>
public void Player1SwitchCharacterNext()
{
playerInfos[0] = new(playerInfos[0].PairWithDevice, GetNextCharactertype(playerInfos[0].SelectedCharacter));
UpdatePlayer1Visual();
}
/// <summary>
/// プレイヤー1の「←」ボタンから発火
/// </summary>
public void Player1SwitchCharacterPrevious()
{
playerInfos[0] = new(playerInfos[0].PairWithDevice, GetPreviousCharactertype(playerInfos[0].SelectedCharacter));
UpdatePlayer1Visual();
}
/// <summary>
/// プレイヤー2の「→」ボタンから発火
/// </summary>
public void Player2SwitchCharacterNext()
{
playerInfos[1] = new(playerInfos[1].PairWithDevice, GetNextCharactertype(playerInfos[1].SelectedCharacter));
UpdatePlayer2Visual();
}
/// <summary>
/// プレイヤー2の「←」ボタンから発火
/// </summary>
public void Player2SwitchCharacterPrevious()
{
playerInfos[1] = new(playerInfos[1].PairWithDevice, GetPreviousCharactertype(playerInfos[1].SelectedCharacter));
UpdatePlayer2Visual();
}
public static CharacterType GetNextCharactertype(CharacterType current) => current switch
{
CharacterType.Character1 => CharacterType.Character2,
CharacterType.Character2 => CharacterType.Character3,
CharacterType.Character3 => CharacterType.Character1,
};
public static CharacterType GetPreviousCharactertype(CharacterType current) => current switch
{
CharacterType.Character1 => CharacterType.Character3,
CharacterType.Character2 => CharacterType.Character1,
CharacterType.Character3 => CharacterType.Character2,
};
/// <summary>
/// ゲームを開始するボタンから発火
/// </summary>
public async Task GameStart()
{
// シーン遷移し、遷移先のコンポーネントを取得する
var target = await SceneLoader.Load<InGameHogeScript>("InGameScene");
// 遷移先のコンポーネントのプロパティにセット
target.SetInformation(playerInfos);
}
private void UpdatePlayer1Visual()
{
if (player1Preview)
Destroy(player1Preview);
player1Preview = Instantiate(
GetPreviewPrefabFromCharacterType(playerInfos[0].SelectedCharacter),
player1PreviewSpawnPoint);
}
private void UpdatePlayer2Visual()
{
if (player2Preview)
Destroy(player2Preview);
player2Preview = Instantiate(
GetPreviewPrefabFromCharacterType(playerInfos[1].SelectedCharacter),
player2PreviewSpawnPoint);
}
GameObject GetPreviewPrefabFromCharacterType(CharacterType characterType)
{
return characterType switch
{
CharacterType.Character1 => character1PreviewPrefab,
CharacterType.Character2 => character2PreviewPrefab,
CharacterType.Character3 => character3PreviewPrefab,
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment