FC2ブログ
    10 «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.» 12

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

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

     

    【ハルシオンブログ】今年もあと1か月になりました!ビルド容量減らしたい時とかに重宝しそうなアセットの紹介! 

    おはようございます!坂内っす。

    明日から12月ですね!12月といえば、年で最後の月・・・・

    いやああー もう1年おわっちゃったー!
    コロナのせいでなにもできない1年でした。
    今年は初詣もいけなそうですしね‥‥

    今年といえば、ポケガ3開発開始したのはいいのですが、シミュレーションハクスラの方の開発が止まりました。
    ええ、開発二人じゃ そんなもんですよね。

    来年4月とか5月とかにはポケガ3出したいですね!

    ポケガ3安定したらシミュレーションハクスラの開発を再度開始しますよ!


    さて、ポケガ3ですが、来年2月頃には少しは形ができてきて公開できるかと思っています。

    実はまだメインの娘ちゃんの絵が定まっていなく、どうなっていくのか分からないままなんですけどね・・・・


    絶対かわいい娘ちゃん用意してみせる!

    楽しみに待っててください!


    今日は使えそうな素敵なアセットを導入してみたので、使ってみた。
    「Build Report Tool」



    実際に入れてみてAndroidビルドをしたら、こんな感じのが出てきました。



    ほかにも、どのファイルがどんな容量だとか、色々と一覧で見ることができますね。



    まだまだ仮素材しか入ってないですが、色々開発が進んできたら、お世話になりそうなアセットです!

    ビルドサイズが大きくなって、容量を減らしたーい ってなった時には重宝しそうです。

    ということで、本日はアセット「Build Report Tool」の紹介でした。


    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Awake,Startと自分で作ったメソッドを呼び出した時の順番。 

    こんにちは。
    大坂です。

    自分ではあんまり書かない書き方ですが、気になったことです。
    Instantiateしたタイミングで自分で作ったメソッドを呼び出した時に、Awake,Startとの順番について。


    public Test_1 test_1;

    void Start() {
    Instantiate(test_1, transform).Init();
    }

    Test_1.cs

    public class Test_1 : MonoBehaviour
    {
    void Awake() {
    Debug.Log("Test_1_Awake");
    }

    void Start()
    {
    Debug.Log("Test_1_Start");
    }

    public void Init() {
    Debug.Log("Test_1_Init");
    }
    }

    出てくるログの順番はこうですね。

    Awake,Init,Startの順番で呼ばれてますね。

    APIを見てみると。

    Awake:スクリプトのインスタンスがロードされたときに呼び出されます
    Start:Start はスクリプトが有効で、Update メソッドが最初に呼び出される前のフレームで呼び出されます

    となっているので、
    今回のスクリプトだと、Instantiateと同フレームでInitを読んでいるので、Startより前に呼ばれるということですかね。

    まぁ個人的には自分で順番を意識したいので今回で言えば、StartとInitを混在させて書くことはないのですが、
    ちょっと気になったので、というお話でした。

    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】intに変換できたら処理したいとき。 

    こんにちは。
    大坂です。

    文字列がintに変換できたら処理したいときがありました。
    そんな時は「int.TryParse」を使ったらできますね。

    string test = "1";
    if (int.TryParse(test, out int no)) {
    Debug.Log("intに変換できたよ:" + no);
    } else {
    Debug.Log("intに変換できないよ");
    }


    「1」は変換できるので変換できるログが出ますね。


    「1」を「1a」とかに変えると、ちゃんと変換できないログが出ます。


    ちょっとこんな処理が必要なところがあったので紹介でした。
    それではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity2020のUniversalPipelineで2Dのライトを使ってみた。 

    おはようございます。坂内です。

    1週間が早いですね・・・

    ポケガ3はなんとなーく全体のシステムができてきた感じでしょうか。(まだ新冒険システムが全然ですが)

    デザイン、キャラデザイン作成中ですね。


    こいつを入れればなんとなくできた感じになってくるはず…

    そこから調整やらなにやらをしないといけないですが、来年4月頃目標に完成させたいですね!

    絵が入ったらちょっとスクショとかのせていければと思ってます。


    さて、Unityのお話。


    Unity2020の2Dでライトを使う場合、まずはUniversal Render Pipelineをインポートします。



    次に以下の2つを生成します。


    Create>Rendering>Universal Render Pipeline>PipelineAsset(Forward Renderer)
    Create>Rendering>Universal Render Pipeline>2D Renderer(Experimental)



    この3つのファイルができあがります。



    Edit>ProjectSettings>GraphicのScriptable Render Pipeline Settingsに先ほど作ったPilelineAssetをアサインします。



    PipelineAssetのRendererListに先ほど2D Rendererで作成されたRendererDataをアサインします。



    これで準備は完了です。

    Spriteを作成すると、MaterialがSprite-Lit-Defaultで作成されます。




    この状態だとGameウインドウにはSpriteが表示されません。

    Lightを置いてみましょう。

    Create>Light>2D>Point Light 2Dを作ってみましょう。



    こんな感じになりました。




    Light 2DのOuter Radiusを触ることで、こんな感じでライトを弄れます。



    ちなみにGlobal Light 2D は画面全体の光になります。

    あ、SpriteのMaterialをSprite-Lit-Default以外の場合は、Lightの対象になりません。


    右のMaterialはSprite-Default

    また、Freedom Light 2Dは自由な形のライトになるようです。

    こんな感じのこともできます。



    面白いですね。


    ということで、Unity2020のUniversal Render Pipelineを使った2Dライトの話でした。


    では、あでゅ~ノシ


    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】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