ymuichiro / symbol_japan_forum

Symbol Japan Communityによるフォーラム、情報共有の空間です
48 stars 2 forks source link

Symbolの中でゲームづくりしている人 集まろう #5

Open ymuichiro opened 2 years ago

ymuichiro commented 2 years ago

提起

Symbolの中でゲーム作りしている人、情報交換しませんか? 課題、面白い取り組み、なんでも、まずは書いてみましょう!

0x070696E65 commented 2 years ago

@borinok TopdownEngineめっちゃいいっすよ!いいんだけどそっちの学習をしなければいけないw オンラインマルチプレイもうまく組み込めばいけるとは思いますよ!

僕はとりあえずPhotonUnityNetwork2でやってます。他にも色々あるっぽいですけどねー。 少人数なら無料なのでアリかと。

borinok commented 2 years ago

慣れないと生半可にはできなさそうですね😂確かにマルチプレイで調べてるとphotonとか出てきてました まだまだ勉強する必要があります😅 しばらく潜ります🕳

borinok commented 2 years ago

https://blog.gigacreation.jp/entry/2020/06/28/122205

これですこしづつ勉強してみます😉

villhell commented 2 years ago

ゲームのUIを作るのに参考になりそうなサイトがあったので共有します。

色んなゲームのUIのスクリーンショットを集めて検索出来るようにしたサイトです。 UIデザインを行う際は参考にしてみて下さい! ↓ ■Game UI Database https://www.gameuidatabase.com/index.php

0x070696E65 commented 2 years ago
borinok commented 1 year ago

お久しぶりです 今回、カードゲームの試作をWebGLでビルドできなかったんですけど、皆さんに公開するのって他にどういった方法ありますか?ZIPファイルを送信するぐらいですかね?

borinok commented 1 year ago

ちなみに何度かWebGLで試してみたんですが、Dotweenでエラーが300個ぐらい出てやめました

0x070696E65 commented 1 year ago

ちなみに何度かWebGLで試してみたんですが、Dotweenでエラーが300個ぐらい出てやめました

@borinok webgl&dotweenビルドできますよ! エラー内容教えてもらえます? あと、他のビルド試してみました?

borinok commented 1 year ago

@

borinok commented 1 year ago

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とかになる感じです😅

borinok commented 1 year ago

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番最後に長いやつがあります

borinok commented 1 year ago

あと、WindowsMacLinuxのプラットフォームでは、ビルドできてます😆

0x070696E65 commented 1 year ago

@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アプリとして配付するかですねー

borinok commented 1 year ago

確かに参照がないっていっぱい出てます dotween設定するときには同じやり方でインポートしたんですが・・・ やっぱりメールで配布する感じになりますね みんな遊んでほしいけど配布するのが大変かなーって

borinok commented 1 year ago

一応、Unityのversionが最新でなかったので更新してみます

0x070696E65 commented 1 year ago

とりあえず新規プロジェクトで適当なDoTweenがWebGLで動くかどうかですね それが動くならバージョンより別に問題があるはず

borinok commented 1 year ago

なるほど、なるほど🤔

borinok commented 1 year ago

@Toshi 新しいプロジェクトでインポートすると行けるっぽいです ありがとうございました

borinok commented 1 year ago

https://unityroom.com/games/samurai0928 unityroomで公開しました。皆さんにはどういう風にupされてるのか変なところがあれば教えてください。 transactionなどは未実装のままです。

borinok commented 1 year ago

@0x070696E65 そういえば、残高取得だけでも実装してみようと思うんですけど、その場合はSymnityのコードをLesson1?を作ったらいいんでよね?それに該当する、Symbol-sdkが見当たらなくて(transaction関係?)

0x070696E65 commented 1 year ago

@borinok Symnityは先日のアプデ以降、対応していないので非公開としました! ただし残高取得であればSDKがなくても出来ます! やり方としては以前Discordで書いたのでそれを参考にしてもらえればいいかなーと思いますー https://discord.com/channels/871354712618856449/871390596890239037/1023833567895240815

UnityとかC#の理解度にもよるんで分からないことあれば聞いてくださいー、ここでもいいけど使いやすさ的にはDiscordのほうがいいかも?

borinok commented 1 year ago

ありがとうございます インポートしようとしてもエラー吐き出してできなかったです 早速今晩やってみます いつもありがとうございます

borinok commented 1 year ago

unitaskをunityのassetにインポートしてinputfieldにアタッチするイメージですね

0x070696E65 commented 1 year ago

@borinok そですね、APIからデータ取得するならUniTaskが良いと思います

アタッチするコンポーネントは例えばSymbolApi.csみたいなクラスですかねー、個人的にはInputFieldにアタッチするというよりSymbolApiManagerみたいな名前のオブジェクト作ってそこにアタッチするほうが管理上良いとは思います

borinok commented 1 year ago

はい ちなみにdiscordだったら、どこのチャンネルで聞けば良いですか⁉️

borinok commented 1 year ago

@0x070696E65 なるほど 中のコード見ると確かにserializableで書いてありますね 勉強になりました エンドボイントとか、チェーン情報をAPIから取得してGetAccountInfoいくとか勉強になりました 具体的には明日やってみようと思います

0x070696E65 commented 1 year ago

Discordだと、、、ヘルプかアプリ開発?githubは目的にそぐわないかな?と思っただけなので、discordのDMでもOKです!

ま、ここでもいいのかな🤔いや、むしろゲームがテーマならここのがいいのか、、分からんすw

borinok commented 1 year ago
スクリーンショット 2022-11-19 10 17 15

UniTaskをインポートしてscriptのmonobihavor名をSymbolApiManagerに変更して記入してコンポーネントしたんですけど、何も参照するものが出てこないのですが?何か間違ってますね

0x070696E65 commented 1 year ago

@borinok SymbolApiManager側のソースコードを見ないとなんとも言えないです!

borinok commented 1 year ago

すみません 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}");
    }
}

}

borinok commented 1 year ago

serializationの記入してるから、アタッチする箱が出てくると思ったんですが・・

borinok commented 1 year ago
スクリーンショット 2022-11-19 11 18 33

ヒエラルキーはこんな感じです

borinok commented 1 year ago

[serialized~]と[serialization~]とは違うのか・・・

borinok commented 1 year ago

特にエラー吐いてないしいけてるのかな? それと、自分のtestnetのwalletに繋がらないから1から作ってみます

borinok commented 1 year ago

なんと最新versionに更新してなかったです 

borinok commented 1 year ago

おかしいな更新して古いファイルは捨てたのにテストネットだけプロフィールのノードと違うからとエラー出る?

borinok commented 1 year ago
スクリーンショット 2022-11-19 12 13 23

あの、勘違い勘違いしてのかもしれません ボタンのところにアタッチしました あとはテストネットに繋がれば実験してみます

0x070696E65 commented 1 year ago

@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だけなら別途加工が要ります! こんな感じでいかがでしょ?

borinok commented 1 year ago

す、すごー😳Toshiさんありがとうございます おんぶに抱っこですみません😣💦💦 負担にならないように、もっと勉強しますんで でも、やっぱアレはsampleだったんですね😅

0x070696E65 commented 1 year ago

あ、ちなみに未検証ですwたぶん、大丈夫だと思われますが、、

borinok commented 1 year ago

@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.b__7_0 (System.Object state) (at :0)

borinok commented 1 year ago

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;
}

}

borinok commented 1 year ago

GetMosaics()関数でnullreferenceを出してるのと、35行目のどこかを修正? インスペクタはこんな感じです

スクリーンショット 2022-11-19 23 02 18
0x070696E65 commented 1 year ago

@borinok あぁ、、やっぱ未検証だったからだw _mosaicsが初期化されてなくてNullだからですね なので20行目のモザイクリストあたりを以下に修正でいけるかと private Dictionary<string, int> _mosaics = new ();

NullReferenceExceptionはめちゃくちゃよくあるエラーなので何がNullなのか把握すればだいたいすぐ解決します!

borinok commented 1 year ago
スクリーンショット 2022-11-20 8 43 27

@0x070696E65 さん ありがとうございます コンソールにmosaic id と amountが返ってきました これでUnity(ゲーム)側がsymbolチェーン上のデータをノードのAPIから取得して、jsonで返って来たものをUniTaskで整理できたということですね

borinok commented 1 year ago

ん?Amountの数字が実際のものと全然違うのはなぜなんでしょう?

borinok commented 1 year ago

ちなみに、得られた結果をゲーム内に表示させるには [SerializeField] private InputField mosaicidInputField; [SerializeField] private InputField mosaicamountInputField; おまけにつけていただいてた ShowMosai()を使って場所を指定して表示させる感じでしょうか?

0x070696E65 commented 1 year ago

Amountの数字が実際のものと全然違う

可分性ですかね? https://qiita.com/YutopianF/items/c3be4bd58751b4e4e107 それとも、全く数字違います?

0x070696E65 commented 1 year ago

ShowMosai()を使って場所を指定して表示させる感じでしょうか?

そですね、input fieldよりTextが適切だとは思いますが

borinok commented 1 year ago

Amountの数字が実際のものと全然違う

可分性ですかね? https://qiita.com/YutopianF/items/c3be4bd58751b4e4e107 それとも、全く数字違います?

テストネットでは8990XYMになってます 帰ってきたのはamountは402831139でした