つかぱい.com

どうせなら好きなことを書いていたい

UnityでScriptをアタッチしたオブジェクトを削除したい。

やりたいこと:落ちゲーのようにたくさんの同一オブジェクトを作ってぶつかった物だけを消したい

ググってもうまい回答を探すのが難しかったので個人的にうまくいったことだけを載せています。

※余裕があったら何でそうなるのかは調べますが、ご存知の方がいればコメントしていただけると嬉しいです。

結論

Destroy(gameObject);で設定するとうまくいった。

変更した実装

今までの実装

今までは、インスペクターで自分のオブジェクト名を指定して削除する仕様にしていた。 この場合はすでにGameObjectがscene内内にいる場合は有効 でも、ファクトリーっぽく自動生成される場合はちょっと困った。

 void OnCollisionEnter2D(Collision2D collision)  { // 衝突したとき
        // もし、衝突したものの名前が目標オブジェクトだったら
        if (collision.gameObject.name == targetObjectName) {
      //今までは一個だけのオブジェクトを削除していたのでオブジェクトの名称を直接してしていた。
            GameObject DestroyObject = GameObject.Find(DestoryObjectName);
            Destroy(DestroyObject); 
        }

うまくいった実装

こっちの実装ではアタッチしているgameobjectを取得して削除する、という仕様に切り替えた でも、何で公式に書いているようにDestroy(this);で消さないの?ということもあると思うが、thisの場合だとなぜかうまく消えなかったのでこっちを採用した。 その辺りは、バージョンなどが関係するのかな、わからんけど

 void OnCollisionEnter2D(Collision2D collision)  { // 衝突したとき
        // もし、衝突したものの名前が目標オブジェクトだったら
        if (collision.gameObject.name == targetObjectName) {
                //複数の同じオブジェクトを生成してぶつかった物を削除するのであれば
                //シンプルにgameObjectをさして削除するとオブジェクトが消える
            Destroy(gameObject);    
        }
    }
}

UnityでCanvasをカメラのサイズと合わせたい時の設定方法

通常のCanvasオブジェクトだと非常に大きくて Gemeビューで数値調整は調整が大変だった。 SceneビューでMainCameraに収まるようにしたかったのでその時のメモ

やり方

Canvasオブジェクトの中にCannvasコンポーネントからRenderModeを変更する。

通常は”ScreenSpace-Overray”の設定になっていると思うのでここをメインカメラの枠内に収まるように”ScreenSpace-Camera”に変更する。

f:id:ferrari458tukapai:20200308183301p:plain

変更後、RenderCameraにMainCameraをセットする。

選択方法は右の◎のアイコンから選択してもいいし、ヒエラルキーからオブジェクトをドラッグ&ドロップしても良い

f:id:ferrari458tukapai:20200308183150p:plain

選択後の確認方法

選択後はSceneビューでカメラの枠にテキスト情報などが収まっていればOK

f:id:ferrari458tukapai:20200308183226p:plain

開発/Starry_Hill

Rubyで小数点以下の計算をする時に気をつける事

忘れがちなのでメモ

問題だったところ

ふと全国の小学生の中からタレントって何人くらいいるだろうなって思ってRubyで計算してみたところ0が結果として出力されたのでちょっと期待と違うなーって思った。

~  irb                                                     17.8m  Wed Mar  4 21:49:20 2020
irb(main):001:0> 405/644900
=> 0

解決策

なんでかなと思ったがRubyには便利なClassオフジェクトがあるので一度確認をしてみる

irb(main):003:0> (405/644900).class
=> Integer

想定していたみたいに、小数点以下の割り算をする場合はデータ型をFloatにしてあげないといけないのんでこのように変更

irb(main):005:0> 405/644900.to_f
=> 0.0006280043417584122

こうする事で浮動小終点の計算ができる

おまけ

でも調べたいのはおよそ何パーセントいるんだよって事なので、こんなに細かい数字はいらない。。。

なので余計な部分はfloor関数を使って下の部分をカットすることにした。

irb(main):008:0> (405/644900.to_f).floor(5)
=> 0.00062

このくらいになると割と現実的に使えそうな数字になってきたんのでいいのではないだろうか

ちなみに全国の0〜13歳でタレントになっている確率はおおよそ0.06%なのでSSRを100ガチャで当てるよりもレアだぞ!

irb(main):009:0> (405/644900.to_f * 100).floor(2)
=> 0.06

つかぱい的メンタルダメージ対応マニュアル🐈

個人的に実践している事が他の人も受けたっぽいのでメモを公開してみようかなと思った

なんか突然ドキッとする事に見舞われることってあるよね

はじめに

  • ドキュメントの概略
    • 不安になることが多いけど引きずりたくはないから
    • 必要なこと3つ
      • 自分はダメなやつではないマインドを持つ
      • ますは体のメンテナンスをする
      • 言語化して、具体的にする
  • 対象とする人
    • 自分の目標を達成したい人
    • 普段から心配性で困っている人
    • 管理したり、決断する立場になりやすい人
  • この方法を使うメリット、デメリット
    • メリット:不安になってもそれは解消できる自信がつく
    • デメリット:多少理屈っぽいと言われたり、理解されないことがあるかも

レジリエンスとは?

  • 精神的な柔軟性、しなやかな強さのこと
  • ダメージを最小限に抑える施策
  • 思考の歪みを認識するメソットとして使われる

レジリエンスを実践する。

  • 自分がショックであると言うことを認識してみよう。
    • 悲観的なっている時自分が戦闘状態になっている
    • 心配事の9割はおきない
    • 楽観的な見方をしてみよう
  • まずは自分の体のメンテナンスをしよう
    • 呼吸を整えてリラックスを試みる
      • 吐く時間を長くして腹式呼吸する
      • お腹の筋肉が緩んでいるかチェックする
    • 食事をして自分の機嫌をとろう
      • 空腹時はストレスを感じやすい
      • 少し小腹が満たされる程度食べる
      • 常温か温かい水を飲む
    • 睡眠不足の場合は十分な睡眠時間を確保しよう
      • 睡眠不足は徹夜をしているのと一緒
      • 寝る前はストレッチをしたり体を温める
      • 寝る前は興奮しそうなものを避ける
  • 自分の心配になっていることを言語化する。
    • 人間は具体的に想像できてないことを怖いと思う
    • シナリオ的にリストアップできるかを試す
      • 起きたこと、思ったこと、やったことを書き出す
      • 受けたダメージを数値化する。
      • 思考の歪みを検証する。
    • シナリオのパターンを試験する
      • 最悪のケースが起きる確率は?
      • 最高のケースが起きる確率は?
      • 最もあり得そうなことは何かを考えてみる
      • あり得そうなことに対策をつける
  • 実行して対処してみよう
    • 1個だけでも対処出来ればそれでOK
    • やることは最大で3つまでに絞る
    • プチご褒美を用意する。

困った時は?お助けTips

参考資料

Rubyでもいい感じにパスワードを出して欲しい

f:id:ferrari458tukapai:20200227223051p:plain

イメージ

確かにLinuxだったらさ、コマンドでランダムなパスワードとか出せると思うけどRubyでもやりたいじゃんと思って考え中

一番簡単な考え方

require 'securerandom'

i = ARGV[0]
#puts i
puts SecureRandom.alphanumeric(i.to_i)

こんな感じにSecurerandomのライブラリを使って何桁のパスワードを出力して欲しいかを入れるだけ

こうするととりあえずランダムなパスワードがいい感じができるのでちょっと満足した。

ターミナルでSudoのパスワード入力をTouchIDで実行する。

人類楽してもいいと思うんだ。

やり方

pam.d/sudoのファイルの先頭にtouch ID認証を追加する。

このファイルは先頭からsoリンクを呼び出すので末尾に入れるとパスワード入力してかつTouchIDを認証するというめんどくさいことになるので注意が必要

まずエディタでpam.d配下のsudoファイルを呼び出す。

sudo vim /etc/pam.d/sudo

開いたら、下の図のように先頭行にTouch ID認証を入れる

Touch ID の認証:auth sufficient pam_tid.so

f:id:ferrari458tukapai:20200224114338p:plain

これで保存して閉じればOK

正しく設定されていれば同じファイルを開いた際にTouch IDの認証画面が開くはず