Open ymuichiro opened 2 years ago
@borinok TopdownEngineめっちゃいいっすよ!いいんだけどそっちの学習をしなければいけないw オンラインマルチプレイもうまく組み込めばいけるとは思いますよ!
僕はとりあえずPhotonUnityNetwork2でやってます。他にも色々あるっぽいですけどねー。 少人数なら無料なのでアリかと。
慣れないと生半可にはできなさそうですね😂確かにマルチプレイで調べてるとphotonとか出てきてました まだまだ勉強する必要があります😅 しばらく潜ります🕳
https://blog.gigacreation.jp/entry/2020/06/28/122205
これですこしづつ勉強してみます😉
ゲームのUIを作るのに参考になりそうなサイトがあったので共有します。
色んなゲームのUIのスクリーンショットを集めて検索出来るようにしたサイトです。 UIデザインを行う際は参考にしてみて下さい! ↓ ■Game UI Database https://www.gameuidatabase.com/index.php
お久しぶりです 今回、カードゲームの試作をWebGLでビルドできなかったんですけど、皆さんに公開するのって他にどういった方法ありますか?ZIPファイルを送信するぐらいですかね?
ちなみに何度かWebGLで試してみたんですが、Dotweenでエラーが300個ぐらい出てやめました
ちなみに何度かWebGLで試してみたんですが、Dotweenでエラーが300個ぐらい出てやめました
@borinok webgl&dotweenビルドできますよ! エラー内容教えてもらえます? あと、他のビルド試してみました?
@
Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs(6,19): error CS0234: The type or namespace name 'Core' does not exist in the namespace 'DG.Tweening' (are you missing an assembly reference?)
こんなのがいっぱいあります ' 'がSequenceとかPathTypeとかになる感じです😅
UnityEditor.BuildPlayerWindow+BuildMethodException: 229 errors at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x002ce] in /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:193 at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x00080] in /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:94 が1番最後に長いやつがあります
あと、WindowsMacLinuxのプラットフォームでは、ビルドできてます😆
@borinok Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs(6,19) ここで using DG.Tweening.Core; が読み込めてないようですが(参照が無い)他のビルドで問題ないということはWebGlの時にこれが参照されていないようですね。 それが何故か?までは分からないのですがおそらくどなたかの教材を参考にされていましたよね
例えば、新たにプロジェクトを作成して、以下の方法で正常に動くかテストしてみて、問題なければビルドの設定などで何か差分があるのかもしれませんねー https://zenn.dev/ohbashunsuke/books/20200924-dotween-complete/viewer/dotween-03
配付の話に戻ると、「WindowsMacLinux」でビルドできてるなら、ブラウザゲーじゃなくPCアプリとして配付するかですねー
確かに参照がないっていっぱい出てます dotween設定するときには同じやり方でインポートしたんですが・・・ やっぱりメールで配布する感じになりますね みんな遊んでほしいけど配布するのが大変かなーって
一応、Unityのversionが最新でなかったので更新してみます
とりあえず新規プロジェクトで適当なDoTweenがWebGLで動くかどうかですね それが動くならバージョンより別に問題があるはず
なるほど、なるほど🤔
@Toshi 新しいプロジェクトでインポートすると行けるっぽいです ありがとうございました
https://unityroom.com/games/samurai0928 unityroomで公開しました。皆さんにはどういう風にupされてるのか変なところがあれば教えてください。 transactionなどは未実装のままです。
@0x070696E65 そういえば、残高取得だけでも実装してみようと思うんですけど、その場合はSymnityのコードをLesson1?を作ったらいいんでよね?それに該当する、Symbol-sdkが見当たらなくて(transaction関係?)
@borinok Symnityは先日のアプデ以降、対応していないので非公開としました! ただし残高取得であればSDKがなくても出来ます! やり方としては以前Discordで書いたのでそれを参考にしてもらえればいいかなーと思いますー https://discord.com/channels/871354712618856449/871390596890239037/1023833567895240815
UnityとかC#の理解度にもよるんで分からないことあれば聞いてくださいー、ここでもいいけど使いやすさ的にはDiscordのほうがいいかも?
ありがとうございます インポートしようとしてもエラー吐き出してできなかったです 早速今晩やってみます いつもありがとうございます
unitaskをunityのassetにインポートしてinputfieldにアタッチするイメージですね
@borinok そですね、APIからデータ取得するならUniTaskが良いと思います
アタッチするコンポーネントは例えばSymbolApi.csみたいなクラスですかねー、個人的にはInputFieldにアタッチするというよりSymbolApiManagerみたいな名前のオブジェクト作ってそこにアタッチするほうが管理上良いとは思います
はい ちなみにdiscordだったら、どこのチャンネルで聞けば良いですか⁉️
@0x070696E65 なるほど 中のコード見ると確かにserializableで書いてありますね 勉強になりました エンドボイントとか、チェーン情報をAPIから取得してGetAccountInfoいくとか勉強になりました 具体的には明日やってみようと思います
Discordだと、、、ヘルプかアプリ開発?githubは目的にそぐわないかな?と思っただけなので、discordのDMでもOKです!
ま、ここでもいいのかな🤔いや、むしろゲームがテーマならここのがいいのか、、分からんすw
UniTaskをインポートしてscriptのmonobihavor名をSymbolApiManagerに変更して記入してコンポーネントしたんですけど、何も参照するものが出てこないのですが?何か間違ってますね
@borinok SymbolApiManager側のソースコードを見ないとなんとも言えないです!
すみません using System; using UnityEngine; using UnityEngine.Networking; using Cysharp.Threading.Tasks;
public class SymbolApiManager : MonoBehaviour { [Serializable] public class Root { public Account account; }
[Serializable]
public class Account
{
public Mosaic[] mosaics;
}
[Serializable]
public class Mosaic
{
public string id;
public int amount;
}
private static async UniTask<string> GetDataFromAPi(string node, string param)
{
var url = node + param;
using var webRequest = UnityWebRequest.Get(url);
try
{
await webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ProtocolError) throw new Exception(webRequest.error);
return webRequest.downloadHandler.text;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
async void OnClickButton()
{
var str = await GetDataFromAPi("http://3.dusan.gq:3000",
"/accounts/TBS2EI4K66LVQ57HMUFXYAJQGIFUR25Z4GTFZUI");
var root = JsonUtility.FromJson<Root>(str);
foreach (var mosaic in root.account.mosaics)
{
Debug.Log($"ID: {mosaic.id}");
Debug.Log($"Amount: {mosaic.amount}");
}
}
}
serializationの記入してるから、アタッチする箱が出てくると思ったんですが・・
ヒエラルキーはこんな感じです
[serialized~]と[serialization~]とは違うのか・・・
特にエラー吐いてないしいけてるのかな? それと、自分のtestnetのwalletに繋がらないから1から作ってみます
なんと最新versionに更新してなかったです
おかしいな更新して古いファイルは捨てたのにテストネットだけプロフィールのノードと違うからとエラー出る?
あの、勘違い勘違いしてのかもしれません ボタンのところにアタッチしました あとはテストネットに繋がれば実験してみます
@borinok 起きました。
なるほど、これはサンプルなのでそのまま使っちゃダメですね。あくまでもこれを参考に加工してくださいねーってやつです で、おそらくこんなことがしたいのかと思われます
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using Cysharp.Threading.Tasks;
using UnityEngine.UI;
public class SymbolManager : MonoBehaviour
{
// ノードURL
[SerializeField] private string node;
// アドレス入力InputField
[SerializeField] private InputField addressInputField;
// 決定ボタン
[SerializeField] private Button btnGetMosaic;
// モザイクリスト
private Dictionary<string, int> _mosaics;
void Start()
{
btnGetMosaic.onClick.AddListener(GetMosaics);
}
async void GetMosaics()
{
var address = addressInputField.text;
if (node == "") throw new NullReferenceException("ノードURLが入力されていません");
if (address == "") throw new NullReferenceException("アドレスが入力されていません");
var accountDataStr = await GetDataFromAPi(node, "/accounts/" + address);
var root = JsonUtility.FromJson<Root>(accountDataStr);
foreach (var mosaic in root.account.mosaics) _mosaics.Add(mosaic.id, mosaic.amount);
// これはオマケ。取得したモザイクをどう扱うかはここで行う
ShowMosaics();
}
// これはオマケ。取得したモザイクをどう扱うかはここで行う
void ShowMosaics()
{
foreach (var (key, value) in _mosaics)
{
Debug.Log($"ID: {key}");
Debug.Log($"Amount: {value}");
}
}
private static async UniTask<string> GetDataFromAPi(string node, string param)
{
var url = node + param;
using var webRequest = UnityWebRequest.Get(url);
try
{
await webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ProtocolError) throw new Exception(webRequest.error);
return webRequest.downloadHandler.text;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
[Serializable]
public class Root
{
public Account account;
}
[Serializable]
public class Account
{
public Mosaic[] mosaics;
}
[Serializable]
public class Mosaic
{
public string id;
public int amount;
}
}
これをSymbolManager的なオブジェクト(用途的に名前はこっちかなー)にアタッチして、各オブジェクト等を接続、ノードもハードコーディングよりこっちのがいいかなと
ボタンの挙動はインスペクタでやるよりコード上で書くほうがいいですね
btnGetMosaic.onClick.AddListener(GetMosaics);
<- ここのこと
取得したモザイク達をどう扱うかはやりたいこと次第です。そのアドレスの全てのモザイクを取るのでXYMだけなら別途加工が要ります! こんな感じでいかがでしょ?
す、すごー😳Toshiさんありがとうございます おんぶに抱っこですみません😣💦💦 負担にならないように、もっと勉強しますんで でも、やっぱアレはsampleだったんですね😅
あ、ちなみに未検証ですwたぶん、大丈夫だと思われますが、、
@0x070696E65 こんばんわ 早速、実施しましてアタッチとかはいけました nodeURLはハードコートじゃなくしました ただどこかで自分が間違っているようです 35行目で何かしらエラーが出ているようです
NullReferenceException: Object reference not set to an instance of an object
SymbolManager.GetMosaics () (at Assets/Scripts/SymbolManager.cs:35)
System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using Cysharp.Threading.Tasks; using UnityEngine.UI;
public class SymbolManager : MonoBehaviour { // ノードURL [SerializeField] private string node;
// アドレス入力InputField
[SerializeField] private InputField addressInputField;
// 決定ボタン
[SerializeField] private Button btnGetMosaic;
// モザイクリスト
private Dictionary<string, int> _mosaics;
void Start()
{
btnGetMosaic.onClick.AddListener(GetMosaics);
}
async void GetMosaics()
{
var address = addressInputField.text;
if (node == "") throw new NullReferenceException("ノードURLが入力されていません");
if (address == "") throw new NullReferenceException("アドレスが入力されていません");
var accountDataStr = await GetDataFromAPi(node, "/accounts/" + address);
var root = JsonUtility.FromJson<Root>(accountDataStr);
foreach (var mosaic in root.account.mosaics) _mosaics.Add(mosaic.id, mosaic.amount);
// これはオマケ。取得したモザイクをどう扱うかはここで行う
ShowMosaics();
}
// これはオマケ。取得したモザイクをどう扱うかはここで行う
void ShowMosaics()
{
foreach (var (key, value) in _mosaics)
{
Debug.Log($"ID: {key}");
Debug.Log($"Amount: {value}");
}
}
private static async UniTask<string> GetDataFromAPi(string node, string param)
{
var url = node + param;
using var webRequest = UnityWebRequest.Get(url);
try
{
await webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ProtocolError) throw new Exception(webRequest.error);
return webRequest.downloadHandler.text;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
[Serializable]
public class Root
{
public Account account;
}
[Serializable]
public class Account
{
public Mosaic[] mosaics;
}
[Serializable]
public class Mosaic
{
public string id;
public int amount;
}
}
GetMosaics()関数でnullreferenceを出してるのと、35行目のどこかを修正? インスペクタはこんな感じです
@borinok
あぁ、、やっぱ未検証だったからだw
_mosaicsが初期化されてなくてNullだからですね
なので20行目のモザイクリストあたりを以下に修正でいけるかと
private Dictionary<string, int> _mosaics = new ();
NullReferenceExceptionはめちゃくちゃよくあるエラーなので何がNullなのか把握すればだいたいすぐ解決します!
@0x070696E65 さん ありがとうございます コンソールにmosaic id と amountが返ってきました これでUnity(ゲーム)側がsymbolチェーン上のデータをノードのAPIから取得して、jsonで返って来たものをUniTaskで整理できたということですね
ん?Amountの数字が実際のものと全然違うのはなぜなんでしょう?
ちなみに、得られた結果をゲーム内に表示させるには [SerializeField] private InputField mosaicidInputField; [SerializeField] private InputField mosaicamountInputField; おまけにつけていただいてた ShowMosai()を使って場所を指定して表示させる感じでしょうか?
Amountの数字が実際のものと全然違う
可分性ですかね? https://qiita.com/YutopianF/items/c3be4bd58751b4e4e107 それとも、全く数字違います?
ShowMosai()を使って場所を指定して表示させる感じでしょうか?
そですね、input fieldよりTextが適切だとは思いますが
Amountの数字が実際のものと全然違う
可分性ですかね? https://qiita.com/YutopianF/items/c3be4bd58751b4e4e107 それとも、全く数字違います?
テストネットでは8990XYMになってます 帰ってきたのはamountは402831139でした
提起
Symbolの中でゲーム作りしている人、情報交換しませんか? 課題、面白い取り組み、なんでも、まずは書いてみましょう!