2つの要素を切り替える機能をつくってみた

作業していると2つの要素を切り替える(表示したりしなかったり、プラスなら赤でマイナスなら青にしたりとか)ことがままあるかと思いますが、そんなときに都度フラグを用意して切り替えての処理を書くのは面倒なので、コンポーネント化しました。

GitHub - kudo004/SwitchValue

Inspectorでも切り替えた結果を確認できます。


www.youtube.com

(ちなみにColorのデフォルト値はアルファも含めてすべて0が入っているので注意)

 

SwitchValueを継承することで他にもいろいろな要素を簡単に切り替えられるようになると思います。

 

以下使い方

続きを読む

DOTweenのTarget or field is missing/null ワーニングについて

DOTweenを使用したアニメーションを利用した際に、Consoleに以下のようなWarningが表示されることがあります。

DOTWEEN ► Target or field is missing/null () ► The object of type 'RectTransform' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.

これは、シーンの切り替え等によって、オブジェクト(今回はRectTransform)が破棄されてしまっているのに、DOTweenの処理は生き続けているために操作対象がないよということで発生しているようです。 実行したアニメーションのTweenerを保持してシーンを抜けるまでに破棄してもいいのですが、これだと処理に抜けが発生してしまいそうです。

例:
        // アニメーション実行とTweenerの保持
        Tweener tweener = animationTarget.DOScale(0.5f, 1f);

        ~~~
        // 画面を抜けるまでにKillを呼び出してアニメーションを終了する
        tweener.Kill();

そこで、以下のようにSetLinkを利用すると後片付けのことを考えずに、紐づいているオブジェクトが破棄されると同時にアニメーションの処理も終了され、Warningが発生しなくなります。

例:
        // アニメーション実行と、オブジェクトとアニメーションの紐づけ
        animationTarget.DOScale(0.5f, 1f).SetLink(animationTarget.gameObject);

C# DateTimeとDateTimeOffsetの比較について

DateTimeとDateTimeOffsetの比較をする際に、ローカルのタイムゾーンを変更すると、想定していない挙動になったので調べてわかったことをメモ。

 

特定の時間になっているかを判定する時に、

サーバーから受け取った文字列の現在時間を、DateTimeOffsetに変換して、

もう一方の比較先の文字列の時間を、DateTimeOffsetに一旦変換後、プロパティのDateTimeで比較していました。

※どちらもDateTimeOffsetのときのOffsetは+9時間

 

個々に出力すると同じ時間が出力されていたので、問題なさそうだと思っていたのですが、ローカルのタイムゾーンを変更すると、比較した際に、変更した分、日本時間からずれたのです。

 

どうやら、比較する際に、DateTime → DateTimeOffsetへ暗黙の型変換がされて、Offsetがローカルのものがつかわれたためにずれたようです。

https://docs.microsoft.com/ja-jp/dotnet/api/system.datetimeoffset.op_implicit?view=netframework-4.7.1

 

今回は、そもそもDateTimeで比較する必要がなかったため、DateTimeOffsetのまま、サーバー時刻と比較し、回避しました。

他にも、UTC同士で比較したり、どちらかのOffsetで、DateTimeOffset型のデータを作り直して比較するなど方法があるかもしれません。

 

参考

  • DateTime 構造体

https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime?view=netcore-3.1

  • DateTimeOffset 構造体

https://docs.microsoft.com/ja-jp/dotnet/api/system.datetimeoffset?view=netcore-3.1

  • DateTimeOffset.Implicit(DateTime to DateTimeOffset) 演算子

https://docs.microsoft.com/ja-jp/dotnet/api/system.datetimeoffset.op_implicit?view=netframework-4.7.1

https://qiita.com/katz/items/d0cad9bfee79ef10ec5c

 

Textなどの子要素のサイズによって親のサイズも変える方法

こういうことをしたい

f:id:kudo004:20191003224345g:plain

テキストサイズに合わせたフレーム拡縮

 

親としてついているフレーム画像ごと広がるようにする方法

ちょっと前まで、親と子それぞれにContentSizeFitterをつけて、子要素から順にhorizontalFitとか呼び出して、力づくで合わせてたが、もっと簡単な方法に気づいたのでメモ。

 

まず、Image コンポーネントのついた親にText コンポーネントのついた子をつけます。

次に、親の要素にHorizontal Layout GroupとContentSizeFitterをつけます。

f:id:kudo004:20191003230742p:plain

親の設定はこんな感じ

Paddingは画像に合わせてそれぞれいい感じに。

これだけで、なんといい感じに画像が変わります!

 

こちらからは以上です。

きょうから(日付変わって昨日から)

皆さんはじめまして。

工藤です。

 

ぼくは、伊坂幸太郎さんの小説が好きです。

(最近だとフーガはユーガを読みました!)

その伊坂さんの小説に、終末のフールという小惑星の衝突による地球滅亡の数年前を生きる人々を書いた作品があり、そこにはぼくの好きな言葉がたくさん出てきます。 

「明日死ぬとしたら、生き方が変わるんですか?」文字だから想像するほか無いけれど、苗場さんの口調は丁寧だったに違いない。「あなたの今の生き方は、どれくらい生きるつもりの生き方なんですか?」

 とか

やらなければいけないことを一つずつやりとげてく。一つやり終えたら、次のことが見えてくるから。慌てずに

とか

どうしたら子供のためになるのか一生懸命に考えて、決めたなら、それはそれで正しいんだと思うんだよねえ、わたしは。外から見てる人はいろんなこと言えるけどね、考えて決めた人が一番、偉いんだから

 とかとか、

中でも、最初のページに書いてある言葉は、落ち込んだ時、やる気がでない時、尻込みした時、諦めかけた時、悩んだ時、思い出します。

今日という日は残された日々の最初の一日。

という訳でブログをはじめました。