FC2ブログ
    02 «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.» 04

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

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

     

    【ハルシオンブログ】UnityのSuperTextMeshを使う際に、途中で文字色を変えたくても変わらないっていう話。 

    こんにちは。坂内です。

    一昨日の夜の地震すごかったですね・・・・
    また地震が続いてしまうと思うと大変すぎです・・・
    福島の皆さんお気をつけてください。

    今日は雨!また大雨の地域もあるようなのでお気をつけくださいませ。


    さて、Unityのお話。
    SuperTextMeshという文字関連のアセットを使ってるのですが、文字色を途中で変えようとしても変わらない現象が・・・

    ちゃんとドキュメントとか見てないのがいけないのかもしれませんw

    uGUIのTextやTextMeshProとかだと「().color = 色」とかで変わるじゃないですか。
    これが効かない。

    「ボタンを押すと、ボタンの中の文字の色を変える」というのを作ってみましたが、こんな感じで色の部分は変わってるのですが、実際の画面の文字色が変わらないという感じになります。

    SuperTextMeshだと色の変え方が別なのかもしれません・・・・

    ただ、カラーピッカーのところを手で変えると文字の色も変わるんですよ・・・・


    これってSuperTextMeshのバグなんでしょうか?

    ってことで、こんなコードを無理やり書いて対応すれば、ちゃんと変わるようになります。


    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20210215 : MonoBehaviour
    {
    [SerializeField] Button btnChangeColor;

    private void Awake() {
    btnChangeColor.onClick.AddListener(OnClickButton);
    }


    public void OnClickButton() {
    SuperTextMesh text = btnChangeColor.transform.GetComponentInChildren();
    text.color = new Color(Random.Range(0f,1f), Random.Range(0f, 1f), Random.Range(0f, 1f));
    text.enabled = false;
    text.enabled = true;
    }
    }



    無駄に text.enable = falseとtrueをしてあげると・・・・・



    ちゃんと変わってくれました!

    って無理やりな方法で対応してみたけど、もっといい方法ありますか?

    なにかわかる方いましたら教えてくださいませ。

    .colorで変えようとしていること自体が違うのかもしれませんorz


    ということで、今日はSuperTextMeshの文字色の変更についてでした。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unityの2Dで光と影を使う方法。※どこかで見た記事です 

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

    ポケガ3の開発は少しずつ進んでます。
    えぇ 少しずつ・・・・
    これでいいのか!?って感じになってますが、このまま進んでいこうと思います・・・・

    前にも書いた気がしましたが、UniversalRPで2Dでライティングとかが簡単にできるという話を聞いたので、試してみました。
    2Dなのに影も出せるらしいですよ!


    使用するパッケージは「Universal RP」。
    まずはこれをインポートします。


    Create>Rendering>Universal Render Pipeline>Pipeline Asset(Forward Renderer)を作成。


    Create>Rendering>Universal Render Pipeline>2D Renderer(Experimental)を作成


    次にProject SettingsのGraphicsの「Scriptable Render PipelineAsset」に先ほど作成したPipelineAssetを指定します。


    2D Renderer(Experimental)をPileline AssetのRendererListにセットします。


    この時点で画面は真っ暗になります。


    さて、それではSpriteを置いてみましょう

    もちろん真っ暗なので何もみえません・・・

    ではライトを置いてみます。

    Light>2D>Point Light 2D(Experimental)でライトを置いてみます。


    この状態だとライトの光が小さいので光の調整をします。
    OuterRadiusを300くらいにしてみると、こんな感じになります。




    ついにSpriteがみえました!

    ライトを動かすとちゃんと光も動きます。
    こんな感じ。



    そして、背景も追加!

    また、おにぎりのSpriteにShadow Caster 2Dを追加します。


    ShadowCaster2DのShapeを絵に合わせます。


    これにより、2Dなのに影を付けることができるようです!


    あ、Lightの影の設定で影の強さとかは調整できるようです。


    ということで、2Dで光と影を使う方法でした。

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】SuperTextMeshで途中から文字の色を変更する 

    こんにちは。
    大坂です。

    最近プロジェクトでSuperTextMeshを使っていますが、
    途中から文字の色を変える方法です。



    まぁ大した話ではないです。
    タグで<c={色の名前}>を付けてあげれば変わります。


    public SuperTextMesh txtTest;

    private void Start() {
    txtTest.text = "test<c=red>だよ。<c=white>戻すよ。";
    }



    デフォルトで使える色はこれのようです。
    https://docs.unity3d.com/ScriptReference/Color.html
    独自の色を使いたい場合は「#554039」みたいな感じで指定するとできるみたいですね。

    public SuperTextMesh txtTest;

    private void Start() {
    txtTest.text = "<c=cyan>cyanだよ。<c=#554039>独自の色だよ。";
    }



    というところで今週もこれにてノシ

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    【ハルシオンブログ】Unityでオブジェクトを消す方法3種類。SetActive、enable=false、Destroyの違いについて 

    こんにちは!坂内っす。
    2月になりました。
    令和3年2月
    令和元年が短かったせいか、やけに令和3年になるのが早かったですね!

    さて、Unityでオブジェクトを消す場合、SetActive(false)、enable = false、Destory(gameObject)
    この三通りの消し方がありますよね。
    みなさんどんな使い分けしてますか?

    こんな感じのものを作ってみました。


    Cubeの子供にCylinderを置き、ボタンを1つ作成。

    ボタンを押すとCubeに対してSetActiveや、enableやDestroyを行います。

    コードは以下の感じ。

    [Blog20210201.cs]
    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20210201 : MonoBehaviour
    {
    [SerializeField] Button btnHide;
    [SerializeField] MeshRenderer meshCube;

    private void Start() {
    btnHide.onClick.AddListener(OnClickHideCube);
    }

    void OnClickHideCube() {
    meshCube.enabled = false;
    //meshCube.gameObject.SetActive(false);
    //Destroy(meshCube.gameObject);
    }
    }


    まずは「meshCube.enabled = false;」から。




    enable = false
    によって起きる処理としては、「対象のコンポーネントを無効にする」といった感じですね。
    上記のコードの場合はmeshCubeはCubeのMeshRendererだけなので、それが無効になっただけで、オブジェクトは残っています。
    そのためCubeは消えてしまいましたが、Cylinderは残ってるといった感じになります。


    次は「meshCube.gameObject.SetActive(false);」です。
    OnClickHideCubeのメソッドの中のmeshCube.gameObject.SetActive(false);の行のコメントを外します。



    Cubeのオブジェクトが非アクティブになり、その子供も一緒に非アクティブになりました。

    オブジェクト自体のアクティブ状態を変えるならSetActiveを使うべきですね。


    では、「Destroy(meshCube.gameObject);」はどうなるでしょうか?
    想像通りの動きになるとおもいますが、もちろんCubeが消えます。



    Cube自体が消えました。

    表示画面的には、SetActive(false)とDestroy(meshCube.gameObject)と同じですが、Destroyのほうはオブジェクト自体が消えてしまうので、そのあと再度使う予定のあるオブジェクトに関してはSetActiveがいい感じですね!
    もう使わないオブジェクトを消す時は確実にDestroyで消してあげましょう。


    ということで、オブジェクトの消し方でした。
    基本的なところでしたが、いろいろと消し方があるという確認でした!
    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】今更ColorとColor32のお話し。 

    こんにちは。
    大坂です。

    年が明けたと思ったらもう1月が終わりそうですね・・・。

    さて、今週は今更ですがColorについてです。
    文字や画像に色を付けるときにスクリプトからColorを指定することがありますが、
    ColorとColor32がありますね。
    Colorはfloatで指定してColor32はbyteで指定する感じです。

    どっちを使ったほうがいいんだろうとふと思ったのですが、Color32のほうがいいんですかね?
    公式のAPIをみると
    「For performance reasons, consider using colors32 instead. This will avoid byte-to-float conversions in colors, and use less temporary memory.」
    とあるので、Color32のほうがパフォーマンスがよさそうです。
    指定の方法も、実際の色の指定と同じなのでしやすいですね・・・
    と思ったのですが、「RGB 0-255」と「RGB 0-1」って指定できましたっけ・・・?


    なんか前は計算して指定した気がしますが・・・それはやらなくてよくなりましたね。

    public Image imsColor32Test;
    public Image imsColorTest;

    private void Start() {
    imsColor32Test.color = new Color32(128, 255, 102, 255);
    imsColorTest.color = new Color(0.5f, 1, 0.4f, 1f);
    }

    パフォーマンスがいいということなのでこれからはColor32を使いますかね。
    ということで今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0