FC2ブログ
    11 «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.» 01

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

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

     

    【ハルシオンブログ】UnityでよくわからないRequest errorが出たとき。 

    こんにちは。
    大坂です。

    Unityでアプリ実行したときなんかに、たまにこんなエラーが出てくることがあります。

    Request error (error):
    UnityEditor.AsyncHTTPClient:Done(State, Int32)


    特にアプリの動作とかに影響が出るわけではないので、
    一時停止を解除したらそのまま動くのですが、
    毎回出たりするときにちょっと面倒になってくるので解消方法を。

    Edit-Preferences...を選んで。


    Generalにある「Show Asset Store search hits」のチェックを外すとでなくなります。


    出たりでなかったりするエラーなので、気にならない人はならないかもしれませんが、
    うざいなーと思ってる人は試してみてください。

    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】UnityでPlay中にコードを弄ってエラーが出たりってことありませんか?実行中にコードを弄った時の挙動を変えれるんです! 

    こんにちは。坂内っす。

    寒くなってきました。風邪に気を付けてくださいませ。
    コロナのおかげで喘息が減っているとかって記事もありますが・・・・どうなんでしょうね?

    Unityで実行中にコードを弄ってエラーが発生したーーー 止めるの忘れた!うわーーー ってことありませんか?

    まぁありますよね。
    急いでストップさせたりとかって・・・・


    Unity2018から「実行中にコードを変更したときの挙動」を変更できるようになっていました。

    Editor>Preferences>General>Script Changes While Playing
    の項目になります。


    (画面はUnity2020.1.2f1の画面です)

    ・Recompile And Continue Playing (デフォルト)
      ⇒ 実行中にコンパイルを行う
      
    ・Recompile After Finished Playing
      ⇒ 実行が終わり次第コンパイルを行う

    ・Stop Playing And Recompile
      ⇒ 実行を止めてコンパイルを行う
      
    という選択肢になっています。

    デフォルトが実行中にコンパイルを行うということなので、ここでエラーが出たりするんでしょうか。

    Stop Playing And Recompileがおすすめな気がしますね。


    こんな機能あったんですね。知りませんでした。

    ちょっとStop~にしておこうと思った次第であります。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity2020.2でデフォルトの親オブジェクトの設定ができる。 

    こんにちは。
    大坂です。

    Unity2020.2でデフォルトの親オブジェクトの設定ができる機能があるみたいですね。
    適当なオブジェクトを右クリックして、「Set as Default Parent」を選択すると設定できます。


    設定して適当なところでGameObjectを作成する。



    「Set as Default Parent」を設定したGameObject_3の下に作成されますね。



    ちなみにちゃんとほかのGameObjectを選択するとそのGameObjectの下に作成してくれます。





    親オブジェクト設定を解除するときは設定したGameObjectで右クリックして「Clear Default Parent」を選択すると解除されます。



    ということで今週も何かに使えるかもしれない機能の紹介でした。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】PrefabをInstantiateするときの注意点?ベースとなるPrefabを弄ってはいけない気がします! 

    こんにちは!もう11月ですね!今年もあと2か月となりました...うわぁ 早いですね~
    コロナのせいでどこも行けてません。
    来年落ち着いたらどこか(北海道)に遊びに行こうと思いますと、心に誓う坂内です。


    Unityにてちょっと気になったことがあったのでメモしておきます。

    uGUIのImageを並べてこんな感じの表みたいのを作るとします。



    この時にコード上ではこんな感じに書くと思います。
    あ、プレハブを生成するGameObjectにはVerticalLayoutGroupがついています。

    [Blog20201102.cs]

    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20201102 : MonoBehaviour
    {
    [SerializeField] Transform trnItemPlace;
    [SerializeField] GameObject itemPrefab;

    const int ListItemCount = 7;

    private void Start() {
    for (int i = 0; i < ListItemCount; i++) {
    Instantiate(itemPrefab, trnItemPlace, false);
    }
    }
    }



    ここまではいいとします。

    では、各itemPrefabで生成されたImageのオブジェクトの色を変える時は?

    [Blog20101102.cs]

    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20201102 : MonoBehaviour
    {
    [SerializeField] Transform trnItemPlace;
    [SerializeField] Image itemPrefab;

    const int ListItemCount = 7;

    private void Awake() {
    for (int i = 0; i < ListItemCount; i++) {
    Image image = Instantiate(itemPrefab, trnItemPlace, false);
    image.color = new Color(0.5f, 0.2f, 1f, 1f);
    }
    }
    }



    こんな感じで「生成したオブジェクトの色を変える」のが一般だと思います。

    しかし、こんな書き方でも動くようです。

    [Blog20201102.cs]

    public class Blog20201102 : MonoBehaviour
    {
    [SerializeField] Transform trnItemPlace;
    [SerializeField] Image itemPrefab;

    const int ListItemCount = 7;

    private void Awake() {
    itemPrefab.color = new Color(0.5f, 0.2f, 1f, 1f);
    for (int i = 0; i < ListItemCount; i++) {
    Instantiate(itemPrefab, trnItemPlace, false);
    }
    }
    }


    何をやっているかというと、「プレハブ本体を変更してそれを生成」しているんですが、これはよろしくないかと思います。

    これ、上記のような書き方ならば意図的な感じはしますが、以下のようなコードを見ることがあります。
    これは何か勘違いしている書き方ではないかと。

    [Blog20201102.cs]

    public class Blog20201102 : MonoBehaviour
    {
    [SerializeField] Transform trnItemPlace;
    [SerializeField] Image itemPrefab;

    const int ListItemCount = 7;

    private void Awake() {
    for (int i = 0; i < ListItemCount; i++) {
    itemPrefab.color = new Color(0.5f, 0.2f, 1f, 1f);
    Instantiate(itemPrefab, trnItemPlace, false);
    }
    }
    }




    基本的には「プレハブはベースとなるオブジェクト」「プレハブをもとに生成したオブジェクトに手を加える」がよろしいのかなと。
    そんな決まり自体はないのですが、元を変えちゃうのはどうかと。
    上記の書き方をすると、実行後のプレハブ自体に色がついてしまいます。

    ということで、プレハブの生成は色々な書き方で動くけど、「Prefabはベースとなるオブジェクト」「生成した後のオブジェクトに手を加える」がいいのかなと勝手に思ってる私でした。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Listの最大値、最小値の要素番号が欲しかった。 

    こんにちは。
    大坂です。

    10月が終わりそうですね・・・今年もあと2ヵ月ですか。
    今年もあっというまに終わってしまいそうですが、頑張っていきましょう。

    さて、Listで最大値とか最小値の要素番号が欲しい時。
    まぁ普通にForで回してやってもいいんですが、一応一行で書けるのでそちらの紹介。
    普通のAPI使うだけですけども。

    List<int> test = new List<int>() { 0, 5, 3, 2, 7, 1 };
    Debug.Log($"最大値の要素番号:{test.IndexOf(test.Max())}");
    Debug.Log($"最小値の要素番号:{test.IndexOf(test.Min())}");


    はい。これだけです。

    ちゃんと取れてますね。
    同じ数字があると要素番号の小さいほうしか取れないですけどね。
    どこかで使えることがあるかもしれません。

    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0