Exampleこのサイトで型キャスティングを学びました。2の補数で型のキャスティングが行われると符号が反転する場合があることを知りましたので、まとめてみます。対応する符号なしの型にキャストする。128をu8にキャストすると128となる。i8);128をi8でキャストすると-128になります。これはRustが符号付きでは以下のルールでキャストするためです。対応する符号なしの型にキャストする。Qiitaこのサイトがわかりやすかったです。足すと桁上がりする数のうち最小の数。(10進数なら98の補数は2)足しても桁上がりしない数のうち最大の数。(10進数なら98の補数は1)特に2進数は2の補数(足すと桁上がりする数のうち最小の数。(ビット反転)1の補数(足しても桁上がりしない数のうち最大の数。(ビット反転した数に1を足す)があります。サイト構築日記Rustではないですが、他の言語でも同様の現象があるので、こちらのサイトがわかりやすかったです。-128になるのをみて、一瞬思ったのが、「128の2の補数は128ではないか」と思いました。128の2の補数は128で間違い無いのですが、解説を読むとわかりました。i8の範囲は「-128~127」なので8個のbitを使用しますが、8bit目は符号の役割を果たします。128はi8の範囲からあふれています。128は2進数では「10000000」となりますが、i8では8個目のビットが立っているとマイナス表現で負の数は2の補数で処理されるので-128と表現されてしまいます。これが、128の2の補数は128ですがi8は-128となってしまう原因です。補数という言葉を知らなかったので、知れてよかったと思いました。rustだけではなく、他の言語でも同様の現象起こりそうなので、ハマった時に思い出せたら役に立つと思いました。ListのサンプルでBoxの使い方が出ていて、理解が深まったので備忘録として置いておきます。これは、要素をラップし、次の要素へのポインタを保持するタプル。列挙型にはメソッドを付与することができる。`List`型を持つ。リストを受け取り、その始端に新しい要素を付加したものを返す関数。自体も、その第2要素もどちらもlist型である。変化するため、matchをする必要がある。`self`の型は`&List`であるので、`*self`は`List`になる。リファレンス(`&T`)ではなく実体(`T`)に対して行うのが好ましい。`self`をすでに借用しているので、tailの所有権を取ることができない。代わりに参照を使用する。Listをheap上の文字列として表したものを返すメソッド。する代わりに、heap上の文字列を返す。list.stringify());}Box引用ボックスは、間接参照とヒープメモリ確保だけを提供します。他の特別な能力は何もありません。間接参照だけが必要になる唯一の機能であるコンスリストのような場合に有用になり得ます。多くのボックスのユースケースは第17章でもお見かけするでしょう。ユースケースをたくさん見た方が良い気がしてきましたが、ここでは再帰のユースケースを見ました。Rustの思想ゆえに、こんなシンプルな機能になっているんだろうなと思いました。Listは再帰的なデータ構造型になるのでRustはコンパイル時にサイズを知ることはできない代わりに、Boxというポインタ型にしてしまうことで事前にサイズを計算することを可能にするなるほどと思ってしまいました。Nil,}無限ループでサイズを計算しないといけないことになってしまうので事前に計算できない。再帰の使用例しかまだ見ていないので他にも使いどころがきっとあるんだろうと思いながら、Rust勉強しなかったら、こんなこと考えもしなかっただろうなと思いました!先はまだまだ長い!本筋とは関係なけど気になったコードlenstringify共に再帰になっています。(再帰の説明はなしです。)Box::len()メソッドがあり、これを呼び出すにはT::len()を実装してあげないといけないみたいです。実態はBox::len()が呼ばれるので、List::len()が呼ばれる仕組みです。実装していないと以下のようなエラーが出ます。satisfied:個人的メモrefと&の違いがわかっていない。&と*をなぜ使い分けたかわかっていない。available」が出てきて、左下のところでrustを解析中みたいな感じで、くるくるローディングし続けていたので、検索したら以下の記事がヒットしました。qiita.com手順はRustインストールPathを通すVSCodeの設定が必要みたいで、3つ目のVSCodeの設定をしていなかったみたいです。Pathの設定をします。これで解決したのでよかったのですが、以前の職場でRustの環境を作った時はこんなことを設定していなかったので、職場のRust環境はなぜうまくいったのか少し疑問が残ります。できたので、気にしないことにします。Nakanoゲーム無料apps.apple.comAutoPuppetを作っているときにAddComponentをしている部分があるのですが、AddComponentをしたScriptとAddComponentで加えたScriptのライフサイクルを少し勘違いしていて、ハマったので備忘録がてらにまとめておきます。}}勘違いしていたところMain.Awake()Sub.Awake()Foo.Start()Main.FixedUpdate()Main.Update()だと思っていたのですが、実際はMain.Awake()Sub.Awake()Main.FixedUpdate()Foo.Start()Main.Update()FxiedUpdateの方が他のScriptのStartよりも早く呼ばれることに気づいていませんでした。これのせいでバグが発生してしまいました。(涙)対処法Foo.Start()をFoo.Awake()にするこれでFixedUpdateより前にFooで準備するメソッドを実行できます。40%くらいいました。言い換えると一番最初のステージをクリアした人は60%から65%程度になってしまっていることが発覚しました。最初のステージをクリアするとその後の離脱率はとても低かったので、もしかして、最初のステージをクリアできるように誘導してあげれば、良い感じになるのではと思い、簡易的なチュートリアルを入れて、効果を測定してみました。チュートリアルのデザインこんな感じにしてみました。チュートリアルと言うよりも簡易的なヒント形式にしています。開始時にポップアップでメッセージが出てきて、その後はヘルプ画面に格納されるアニメーションがあって、ヘルプ画面からいつでもメッセージを見れるようにしています。これなら最初にこのメッセージを読むことを強制できますし、ヘルプ画面に格納されるアニメーションがあるので、ヘルプ画面もついでにみてくれるかもしれません。(・・・と言う想像です。81%と露骨に差が出ました!この効果は一時的なものではなくずっとこんな調子です。今まではチュートリアルを作ることに少し懐疑的でした。(ユーザー体験)特に3つ目はだらだらチュートリアルが続いたり、チュートリアルがうっとしくなったりするのが嫌だったので今まで、あまり説明を入れていませんでした。ここまで露骨に効果が出ると、ゲームの開発でチュートリアルへの意識が変わりそうです。Nakanoゲーム無料apps.apple.com最近まで知らなかったのですが、projectフォルダを複数表示できるらしいことを知りました。今まではprojectフォルダが一個しかなかったのでScriptのフォルダとTextureのフォルダを交互に使う場合はいちいち対象のフォルダーまでクリックし直さないといけなかったのでとても面倒でした。こんな感じでProjectタブを複数配置できると一方はScriptを入れているフォルダにして、もう一方はTextureを入れているフォルダを表示すれば、交互に素早くアクセスできます。Projectで追加できます。found.というエラーがconsoleに出続ける現象に遭遇しました。普通に起動はできるみたいですが、気持ち悪いので直しました。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。