FC2ブログ
    07 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 09

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Unity+VisualStudioでタスクリストとか使ってますか?あなたのコードにTODO残っていませんか? 

    こんにちは。坂内っす。

    Unityでタスクリストって使ってますか?

    VisualStudioじゃない方はごめんなさい。しりません。

    タスクリストとは、「あとでコードに手を加えるために、今はコメントとして残しておく」やつです。

    具体的にはコード中に 「// TODO: 攻撃のメソッドができたらここで呼ぶ」みたいな感じ。

    頻繁にTODO書いてたりするけど、あとで探し忘れがあったりしません?
    普通のコード検索で探していたりしません?

    タスクリストを使えば、このTODOが一覧で取れて、簡単にジャンプができるんです。


    使い方は簡単で、VSの「表示>タスク一覧」を押せば出てきます。


    こんな感じでリストが出ます。


    各行がリンクになっているので、クリックするとそのコードに飛びます。

    これでTODO残りとかなくなりますね!


    ってことで、タスクリストの使い方でした。あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity2020.1でDevice Simulatorが見つからなかった 

    こんにちは。
    大坂です。

    Unity2020.1でDevice Simulatorが見つからなかったのでなんでだろうと思っていたら、
    ProjectSettingsの設定を変えないとPreview版が見つからないようになっていたのですね…。


    ここの設定を変更すると見つかります。
    [Edit]-[ProjectSettings]-[PackageManager]-[EnablePreviewPackage]

    これにチェックを入れてあげます。



    ちゃんと見つかりるようになりましたね!
    Unity2020.1でDeviceSimulatorが使いたいのに見つからなくて困ったのでメモがてら!

    ではまたノシ

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    【ハルシオンブログ】Unityでボタンを押された際にメソッドを呼ぶ方法。基本なことなんだけど、AddListnerで呼んだ方がいいんじゃない? 

    こんにちは。坂内です。

    暑い日が続きますねえ~
    熱中症とかに気を付けてください。

    Unityでボタンを押した時の処理を呼ぶときに、以前まではボタンのOnClickイベントに呼ばれる処理をアサインする形でやっていたけど、最近はAddListnerを使っているよという話。

    皆さんどちらをお使いですか?

    ①ボタンのOnClickにアサインする方法


    ②コードからonClick.AddListnerをする方法

    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20200824 : MonoBehaviour
    {
    public Button btnTest;

    private void Start() {
    btnTest.onClick.AddListener(OnClickButton);
    }

    public void OnClickButton() {
    Debug.Log("ボタン押したよ");
    }
    }


    おすすめは②です。

    ①をやっている方は②に変えた方がいいかもしれません。

    ※勝手に思ってるだけで、正しいとは限りません。


    なぜ?

    なぜならば、そのメソッドを呼んでいる元が追えるからです。

    OnClickButtonのメソッドがどこから呼ばれているか確認する際に、OnClickButtonのメソッド宣言のところでShift+F12(※Windowsの場合)って押しますよね?
    そのメソッドを呼んでいる参考先を探すショートカットなんですが、これを押すとこうなります。



    って感じで、呼んでいる元を探せます。

    しかし①の場合はInspectorでアサインしているので、参照元を探せません。
    その結果、「あれ?このメソッド使ってなかったっけ」となる可能性があります。
    使われていないと勘違いしてそのメソッドを消してしまうと、実行時にエラーが出てしまいます。

    よって②のAddListnerで押された処理を呼んだ方がいいと思っています。

    ということで、ボタン押された時のアクションの書き方について簡単に書いてみました。

    何が正しいかわかりませんけどね!


    ってことで、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity2020.1でオブジェクトのコピペメニューが増えてるんですね。 

    こんにちは。
    大坂です。

    普段ショートカットだけでオブジェクトを複製しているので気にしていなかったのですが、
    Unity2020.1でオブジェクトのコピペメニューが増えてますね。

    増えてるのは「Cut」と「Paste As Child」。


    「Paste As Child」は対象オブジェクトの子供として貼り付けられるので地味に便利そうです。


    ということで、こんな機能も増えていたのかと気づいたので紹介でした。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity+Playfabのお話。今回はプレイヤーデータの保存と読み込みについてです。 

    こんにちは。坂内です。

    お盆休みも終わり、仕事再開となりますね。

    コロナの影響もあって、今年のお盆休みは家から1歩も出ず・・・・さみしい連休となりました。

    話しは変わってUnityのお話。

    今回もUnity+Playfabのネタになります。

    今までPlayfabの紹介をしたり。
    【ハルシオンブログ】みなさんPlayfabって知ってますか?MicrosoftのBaaSなんですが、安くて使いやすいのでお勧め!

    タイトルデータを持ってきたり。
    【ハルシオンブログ】Unity+Playfabでのタイトルデータの取得方法。

    ファイル管理のデータをもってきたり。
    【ハルシオンブログ】Unity+Playfab Playfabサーバに置いた絵のファイルをアプリ起動時に持ってくるよぅ(ファイル管理の使い方一例)

    ランキングを使ってみたり。
    【ハルシオンブログ】京都に1泊遊びにいってきたよ。Playfabを使ったランキング(前編)
    【ハルシオンブログ】京都に1泊遊びにいってきたよ。Playfabを使ったランキング(後編)

    してきましたが、各ユーザのデータの保存などについては書いてきてなかったぽいので、軽く紹介。

    タイトルデータは、Playfabのサーバに置いておくマスタデータみたいな感じでした、ではユーザの情報(名前とか点数とか)はどうやってるの?って話になります。
    あ、ユーザのことは"プレイヤー"と呼んでますね。

    【プレイヤーデータの保存】

    public IEnumerator UpdateUserData() {
    bool isWait = true;
    UpdateUserDataRequest request = new UpdateUserDataRequest() {
    Data = new Dictionary {
    {"userName", 名前},
    {"playerId", プレイヤーのID},
    {"lv", レベル},
    {"exp", 経験値}
    }
    };
    PlayFabClientAPI.UpdateUserData(request, OnSuccess, OnError);

    while(isWait) {
    yield return null;
    }

    void OnSuccess(UpdateUserDataResult result) {
    Debug.Log("UpdateUserData:OnSuccess");
    isWait = false;
    }
    void OnError(PlayFabError error) {
    Debug.Log("UpdateUserData:OnError");
    Debug.Log(error.GenerateErrorReport());
    isWait = false;
    }
    }



    次に、プレイヤーデータの読み込み方法。

    【プレイヤーデータの読み込み】

    public IEnumerator GetUserData() {
    bool isWait = true;
    GetUserDataRequest request = new GetUserDataRequest();
    PlayFabClientAPI.GetUserData(request, OnSuccess, OnError);

    while(isWait) {
    yield return null;
    }

    void OnSuccess(GetUserDataResult result) {
    ユーザ名 = GetPlayfabUserDataString(result, "userName");
    プレイヤーID = GetPlayfabUserDataInt(result, "playerId");
    レベル = GetPlayfabUserDataInt(result, "lv");
    経験値 = GetPlayfabUserDataInt(result, "exp");
    isWait = false;
    }

    void OnError(PlayFabError error) {
    Debug.Log(error.GenerateErrorReport());
    isWait = false;
    }
    }

    public string GetPlayfabUserDataString(GetUserDataResult result, string key) {
    if(result.Data.ContainsKey(key)) {
    if(result.Data[key].Value != null) {
    return result.Data[key].Value;
    } else {
    return "";
    }
    } else {
    return "";
    }
    }

    public int GetPlayfabUserDataInt(GetUserDataResult result, string key) {
    if(result.Data.ContainsKey(key)) {
    return int.Parse(result.Data[key].Value);
    } else {
    return 0;
    }
    }



    こんな感じでプレイヤーデータの保存、読み込みができます。

    これでユーザ毎に点数やら経験値やら色々保存できます!


    ※一つ問題があります。
     プレイヤーデータの読み込みはいいのですが、保存の際にまとめて保存できる件数に制限があります。
     この件数とはどこのことを言っているのかというと、以下のコードの場所です
     
     

    public IEnumerator GetUserData() {
    bool isWait = true;
    GetUserDataRequest request = new GetUserDataRequest();
    PlayFabClientAPI.GetUserData(request, OnSuccess, OnError);

    while(isWait) {
    yield return null;
    }

    void OnSuccess(GetUserDataResult result) {
    ユーザ名 = GetPlayfabUserDataString(result, "userName"); // ①
    プレイヤーID = GetPlayfabUserDataInt(result, "playerId"); // ②
    レベル = GetPlayfabUserDataInt(result, "lv"); // ③
    経験値 = GetPlayfabUserDataInt(result, "exp"); // ④
    ・ // ⑤
    ・ // ⑥

    isWait = false;
    }

    void OnError(PlayFabError error) {
    Debug.Log(error.GenerateErrorReport());
    isWait = false;
    }
    }


    という感じで、一回で登録(更新)できる項目の数に制限があるようです。
    基本的な無料のプランだと10件までのようです。
    件数の確認は

    タイトルに入る>歯車マーク>タイトルの設定>画面上部のタブの「制限」>データストレージ>要求あたりのプレイヤーデータ更新
    に書いてるやつなのかな?

    ということで、ここの1回で登録できる件数に注意くださいませ。

    色々とPlayfabは使えるので使ってみてね。

    そんな感じで本日のブログを〆ます。
    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity2020.1からFindObjectOfTypeで非アクティブなオブジェクトを検索できるらしい 

    こんにちは。
    大坂です。

    梅雨が開けて一気に気温が上がって夏本番という感ですね!
    暑いです!

    さて、Unity2020.1からFindObjectOfTypeで非アクティブなオブジェクトを検索できるらしいですね。

    引数に「true」を入れてあげるだけです。

    void Start()
    {
    Debug.Log(FindObjectOfType<Text>());
    Debug.Log(FindObjectOfType<Text>(true));
    }


    HierarchyとInspectorではこんな感じ。

    実行結果。

    ちゃんと引数に「true」入れている方は検索できていますね。

    こんなこともできるようになったという紹介です
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity2019.3以降から使えるエディター実行速度アップ方法! 

    こんにちは。坂内っす。

    そういえばUnity2019.3からエディターの実行速度を速くすることができる機能が入ったみたいですね。

    使っていなかったわ・・・・


    どれくらい速くなるのか試してみた。

    やってみたのは、実行ボタンの連打です。


    [通常]


    これが今までの実行速度ですね。
    特にシーンの中にはオブジェクトもなく、ほとんど空のシーンの実行を連打しただけです。

    では、速度を上げてみましょう。

    Edit>ProjectSetting>Editor>Enter Play Mode Settingを以下のようにします。


    それではこれで実行してみます。

    [速度あーーーっぷ!]


    みて!この速度!
    押した瞬間実行されてますよね!

    すごい!今度からこれONにしておこう。


    ※とても注意
     スクリプトを変更してコンパイルが実行されるとこの速度は遅くなります。
     
    ということは、UIを弄ったりしただけの時は早いってことですよね。
    これ絶対ONにしといた方がいいっすね!

    ってことで、今日はEnter Play Mode Settingの紹介でした。
    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0