0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity初心者】Unityでネットゲームを作りたい【1】色々悩む~ExcelでJsonの配列を作る

Last updated at Posted at 2025-01-11

昔Perlで作ったCGIゲームを元に、androidでゲームアプリ作れないかな?と色々調べてたら、Unityってのがいいらしいということで早速ダウンロードしていじってみましたが、わからないことが多すぎる。。。
まず、「C#」がわからんし、オブジェクト指向も理解できてない。

そんな私が、メモ代わりに記載していこうと思います。

Unityの使い方に悩む

インストールするとUnityHubが立ち上がり英語表記
英語できない(致命傷)なので、ググって日本語化
とりあえずプロジェクトを作るのか~ってなったが、ググった先はver3ぐらいだったかな
ダウンロードして起動したのはVer6
表示がちょいと違うが、何とか解読して(間違ってる)プロジェクト起動
何をすればいいかわからんので、再度ググる
んで見つけたのがちくわさんのブログ
説明通りやってみる(スクリプト全部コピペ
おおー動く。なるほど、VBAでボタンとかにプログラムするのとかわらんねと理解(間違ってる)
なんとなくやり方覚えたつもりで次へ進む

プレイヤー登録処理に悩む

まずは、レイアウトーって思ったのですが、プレイヤーのログインって?となった。
androidとかiPhoneってIDとパスってあんま使わないよねーと。
調べてみたら、「PlayFab」って色々出来る無料のがあると。
あのゲームの作り方ってサイトのブログを参考にして、やってみる

おおお!

できたw
ちなみにこっちでないと新しいPlayFabのログイン方法(winアカウント対応)にならんみたい
他のでやるとPlayFabにログインできん

ログイン時のデータ記入に悩む

書いてある通りやると、ログイン処理はできてる
でもログインと同時に初期データを書き込みたい
どうも、プレイヤーデータに直接書き込めるらしいが、全てに自分で書き込むのは無理だから、初期ログイン時に自動で書き込みたい

調べたら書き込めるらしいが、最大10まで?(無料の場合(たぶん))
json形式ならリストとして保存できるらしい。。。。何ぞや json

調べました
JavaScriptで使われる配列の形みたいですねー(それすら知らん)
いじってみると、PlayFabではjson形式でデータは保存読み込みできるみたい
json調べました

{
  "aaa":"111"
  "bbb":"222"
}

みたいなデータを扱うらしいです
aaaの値が111みたいな
でもこれだとデータ書くのめんどいし、読み込むのもだるい
調べると

{
    "item":[
      "aaa":"111"
      "bbb":"222"
    ]
}

この形もあると
なるほど!
配列名あって、そのマッチした配列のaaaを読み込める
これは便利!ってことで採用

これって、対戦モンスターとかアイテムで使えるんでは?

と思って調べてみると(毎回ググってます)使えそうだ
PlayFabでは、ゲーム自体の固有データとして保存できる機能がある(タイトルデータ)
ここに保存しておけば、いつでも呼び出して対応できるはずと、思った
アプリ内に○○.jsonで保存しておけば、いつでも読み込めるし、PlayFabで変更すれば、変更も楽にできるかなーっと

じゃ、まずデータ作るか

めんどい。。。。

簡単に100以上とかの配列データ作れるソフトとかないの?見つからない作るか

Excelでjsonの配列を作る

作りました。Excelのマクロ使って(いろいろなサイトを参考に作りました

image.png

こんな感じです
赤枠に使用する配列名、青枠にステータスを入力すると、どんどんリストに追加されていきます
削除はnameの所だけの一致で削除します
モンスターとかアイテムだとRankがあるとイイナーってことで、あとから付け足し
image.png
設定用シート作成

入力ボタン押したときの処理

Sub 入力()
    
    '初期処理
    '名前がなかったら
    If Range("B2") = "" Then
        MsgBox "B2セルに入力してください"
        Exit Sub
    End If
    '空白に”0"を記入
    If Range("C2") = "" Then
        Range("C2") = "0"
    End If
     If Range("D2") = "" Then
        Range("D2") = "0"
    End If
   
    If Range("E2") = "" Then
        Range("E2") = "0"
    End If
    If Range("F2") = "" Then
        Range("F2") = "0"
    End If

    Dim xlLastRow As Long       'Excel自体の最終行
    Dim LastRow As Long         '最終行
 
    xlLastRow = Cells(Rows.Count, 1).Row  'Excelの最終行
    LastRow = Cells(xlLastRow, 2).End(xlUp).Row   'D列の最終行を取得
    
    '重複確認
    If WorksheetFunction.CountIf(Range(Cells(7, 2), Cells(LastRow + 1, 2)), Range("B2")) <= 0 Then
    Range("G2").Value = "追加OK"
    'いきなり書き込むのでなくメッセージを追加したい場合は'をはずす
    'MsgBox "追加入力しました"
    Else
    Range("G2").Value = "重複"
    msg = "同じものを発見しました!上書きしますか?"
    If MsgBox(msg, vbYesNo) = vbNo Then
    Range("B2").Select
    Exit Sub
    End If
    
    Dim i As Long
    With Range("B6")
        Do While .Offset(i, 0) <> ""
            If .Offset(i, 0) = Range("B2") Then .Offset(i, 0).EntireRow.Delete
            i = i + 1
        Loop
    End With
    
    xlLastRow = Cells(Rows.Count, 1).Row  'Excelの最終行
    LastRow = Cells(xlLastRow, 2).End(xlUp).Row   'D列の最終行を取得

    End If
    
    'ランク作成
    gou = Range("c2") + Range("d2") + Range("e2") + Range("f2")
        
    If gou >= Worksheets("Rank設定").Range("E4").Value And gou < Worksheets("Rank設定").Range("E5").Value Then
        Rank = Worksheets("Rank設定").Range("B5").Value
    ElseIf gou >= Worksheets("Rank設定").Range("E5").Value And gou < Worksheets("Rank設定").Range("E6").Value Then
        Rank = Worksheets("Rank設定").Range("B6").Value
    ElseIf gou >= Worksheets("Rank設定").Range("E6").Value And gou < Worksheets("Rank設定").Range("E7").Value Then
        Rank = Worksheets("Rank設定").Range("B7").Value
    ElseIf gou >= Worksheets("Rank設定").Range("E7").Value Then
        Rank = Worksheets("Rank設定").Range("B8").Value
    Else
        Rank = Worksheets("Rank設定").Range("B4").Value
    End If
    
    '書き込み
    
    '番号処理
    j = LastRow + 1
    Cells(7, 1) = "0"
    For i = 8 To j
        Cells(i, 1) = Cells(i - 1, 1) + 1
    Next
    
    '一覧表に書き込み
    Cells(LastRow + 1, 2).Value = Range("B2")
    Cells(LastRow + 1, 3).Value = Range("C2")
    Cells(LastRow + 1, 4).Value = Range("D2")
    Cells(LastRow + 1, 5).Value = Range("E2")
    Cells(LastRow + 1, 6).Value = Range("F2")
    Cells(LastRow + 1, 7).Value = Rank
    Cells(LastRow + 1, 8).Value = Range("C4") & Range("B1") & Range("D4") & Range("B2") & Range("E4") & Range("c1") & Range("d4") & Range("C2") & Range("E4") & Range("d1") & Range("d4") & Range("d2") & Range("e4") & Range("e1") & Range("d4") & Range("e2") & Range("e4") & Range("f1") & Range("d4") & Range("f2") & Range("e4") & Range("g6") & Range("d4") & Rank & Range("f4")
    
    'コピー用Jsonをrange("I2")に作成
    
    Range("I2").MergeArea.ClearContents
    Range("I2") = "{" & vbLf & Range("i2") & Range("R4") & Range("A2") & Range("R4") + ":["
    
    j = LastRow + 1
    
    For i = 7 To j
        Range("I2").Value = Cells(2, 9).Value & vbLf & Cells(i, 8).Value
    Next
    
    Range("I2").Value = Left(Range("I2"), Len(Range("I2")) - 1)
    Range("I2").Value = Range("I2") & vbLf & "]" & vbLf & "}"
    
    'ターゲットをnameに、各数字を空白に
    Range("B2").Select
    Range("C2") = ""
    Range("D2") = ""
    Range("E2") = ""
    Range("F2") = ""
    Range("G2") = ""

End Sub

削除ボタンの処理

Sub 削除()
    Dim xlLastRow As Long       'Excel自体の最終行
    Dim LastRow As Long         '最終行
 
    xlLastRow = Cells(Rows.Count, 1).Row  'Excelの最終行
    LastRow = Cells(xlLastRow, 2).End(xlUp).Row   'D列の最終行を取得

    '重複確認
    If WorksheetFunction.CountIf(Range(Cells(7, 2), Cells(LastRow + 1, 2)), Range("B2")) >= 1 Then
    Range("G2").Value = "削除OK"
    'MsgBox "削除しました"
    
    Dim i As Long
    With Range("B6")
        Do While .Offset(i, 0) <> ""
            If .Offset(i, 0) = Range("B2") Then .Offset(i, 0).EntireRow.Delete
            i = i + 1
        Loop
    End With
  
    Else
    Range("G2").Value = "なし"
    MsgBox "同じ物を発見できませんでした"
    Range("B2").Select
    Range("G2") = ""
    Exit Sub
    End If

    '番号処理
    j = LastRow - 1
    Cells(7, 1) = "0"
    
    For i = 8 To j
        Cells(i, 1) = Cells(i - 1, 1) + 1
    Next

    'コピー用Jsonをrange("I2")に作成
    
    Range("I2").MergeArea.ClearContents
    Range("I2") = "{" & vbLf & Range("i2") & Range("R4") & Range("A2") & Range("R4") + ":["
    
    j = LastRow + 1
    
    For i = 7 To j
        Range("I2").Value = Cells(2, 9).Value & vbLf & Cells(i, 8).Value
    Next
    
    Range("I2").Value = Left(Range("I2"), Len(Range("I2")) - 3)
    Range("I2").Value = Range("I2") & vbLf & "]" & vbLf & "}"

    Range("B2").Select
    Range("G2") = ""
End Sub

全て削除ボタンの処理

Sub 全て削除()

    msg = "全てのデータを削除しますがよろしいですか?"
    If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
    
    Dim xlLastRow As Long       'Excel自体の最終行
    Dim LastRow As Long         '最終行
 
    xlLastRow = Cells(Rows.Count, 1).Row  'Excelの最終行
    LastRow = Cells(xlLastRow, 2).End(xlUp).Row   'D列の最終行を取得

    Range("I2") = ""
    Range(Cells(7, 1), Cells(LastRow + 1, 8)).ClearContents
    Range("B2").Select
    Range("C2") = ""
    Range("D2") = ""
    Range("E2") = ""
    Range("F2") = ""
    Range("G2") = ""

End Sub

jsonファイル作成ボタン処理(UTF-8で出力

Sub 作成()

    Dim FileName As Variant
    FileName = Application.GetSaveAsFilename(InitialFileName:=Range("A2"), FileFilter:="Jsonファイル,*.json*")
    If FileName = False Then
        Exit Sub
    End If
    'MsgBox FileName
    Dim Target As String
    Target = FileName

    If InStr(Target, ".json") > 0 Then
        Target = FileName
        'MsgBox Target
    Else
        Target = FileName & "json"
        'MsgBox Target
    End If

    If Dir(Target) <> "" Then
        msg = "同じ名前のファイルが存在します。上書きしますか?"
        If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
    End If
   
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .WriteText Cells(2, 9), 1
        .SaveToFile Target, 2
        .Close
    End With
    '終わったのが分かるようにメッセージを出す
    'MsgBox "出力完了"

    Range("B2").Select
    Range("G2") = ""

End Sub

で、せっかく作ったので、誰でも使えるように公開

Json作成 (Excel・Vector)

まぁ...これからいじって使い勝手良くしていくつもり
でもこれで、jsonファイルの作成は便利になったはず

Unityに戻って読み込んで表示、使用出来るようにしなくては!!

←前 目次
【Unity初心者】Unityでネットゲームを作りたい【2】Json取入 次→

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?