昔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のマクロ使って(いろいろなサイトを参考に作りました
こんな感じです
赤枠に使用する配列名、青枠にステータスを入力すると、どんどんリストに追加されていきます
削除はnameの所だけの一致で削除します
モンスターとかアイテムだとRankがあるとイイナーってことで、あとから付け足し
設定用シート作成
入力ボタン押したときの処理
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取入 次→