読者です 読者をやめる 読者になる 読者になる

196の日記

完全に開発メモと雑談、その他忘れそうな計算式などを書き溜める場所になっています!

Mac Finderでvarフォルダなどのprivateなものを開く

Mac、Finderで/usrとか/varとかを見る方法 - ugon105の日記


上のサイトさんを参考にいたしました。リンク先が消えた時に不便なので一部を引用させてもらうと、

ターミナルを開き、下記のようにコマンドを打ちます。

$ open /usr

ドットで始まる隠しフォルダも同様に見ることができます。

$ open ~/.Xcode

MacBook IPアドレスを手入力

メモです。基本的なことだけれど忘れそうなので。。

Wi-Fiなどは大抵、飛んでいる電波を選んでパスワードを入力するだけの簡単な設定で接続完了しますが、手入力でIPアドレスサブネットマスク諸々を設定したい時どうするか。




上部のバーに表示されているWi-Fi電波マークをクリックして、ネットワークの環境設定を開きましょう。


f:id:thinline196:20170327235706p:plain

普段はこの"自動"という設定に甘えている状態です。


なので、ここに新しいネットワーク環境を追加してください。その後、Wi-Fi(有線など自分の設定したい項目)を選んで右下の詳細をクリックすると、下の図のようなものが出てくるので、下の図のようにTCP/IPを開き手入力を選んでください。これで、自分で設定することが可能です。


f:id:thinline196:20170328000222p:plain



自宅や職場など、環境に合わせて設定を保存しておけば、環境設定の画面でパパッと切り替えることが可能なので楽ですね。



というわけで、Macにして初めてのIPアドレス設定でした。

メモ 2017/3/24

クラス名#メソッド名
・こうやって書きあらわす。

visual studio for Mac previewのインデントをスペースに
・インデントモードをスマートから自動にすることで、コピペした際に挿入されるインデントがタブからスペースに変わる(幅は同じエディタ上でなら変わらない)

C# Dictionaryにジェネリックをもつクラスを保持させたい

タイトルの日本語があっているかは微妙ですが、以下のようなことをやりたかった。

Dictionary<T,Hoge<T>> dict = new Dictionary<T,Hoge<T>>();

class Hoge<T> where T : 何か{
    //処理
}
Tに共通のインターフェースを継承させる

例えば、baseTというインターフェースをTに入るものが全て継承することにすれば、DictionaryのHogeHogeと書くことが可能になる。

object型を指定する

baseTを継承したところで、取り出す際には結局キャストをして上げなければならない。なら、わざわざインターフェースを継承させる手間を増やす必要もない。(すでに同じものを継承しているなら別) objectは全てのクラスなどの元となっているため、Dictionaryとした上で、取り出す際にキャストをしてあげるという手段もある。

object (C# リファレンス)

Dictionary<Type,object> dict = new Dictionary<Type,object>();

//入れる時
dict.add(typeof(T),hoge);

//出すとき
var hoge = (Hoge<T>)dict[typeof(T)];


ちなみに、typeofはリフレクションという割と処理が重い操作らしいので、多用しないようにすること。
初めて見たときにわかりやすいサイトさんがあったのでそちらも参考にしてください。
リフレクションを利用して文字列からクラス操作 - (void*)Pないと

メモ 2017/3/20

シングルトンやシングルトン内部のものは変数として別のクラスで保持するべきではない

仮にシングルトンクラスが作り直された場合、参照ができなくなるので、毎回インスタンスを確認するべき。ただし、メソッド内で何回も呼ぶ場合などは、メソッド内に限り変数を用意するのはOK

型を絞れるのなら、なるべく絞る

これはUnityでの話で、canvasを保持する時もGameObjectではなくCanvasで、プレハブを保持する時も、GameObjectではなくそのプレハブが持っているスクリプトのクラスを指定してあげる方がよい。後から見た場合にわかりやすかったり、のちの実装でそのクラスを使用する可能性があるから。

Unity キャラクターの移動速度にTime.deltaTimeをかける理由

リファレンスに色々書いてあったのですが、初めてUnityを触った時は気にもしていませんでした。

これは、製作者が意図した移動速度を実現するためにdeltaTimeをかけているのですね。(ちゃんと考えれて大したことではない)



Time.deltaTimeniには、最後のフレームを完了するのにかかった時間が格納されています。
Unity - スクリプトリファレンス: Time.deltaTime

製作者は、キャラクターに一秒間にどのくらい進むのかを指定するのが一般的なやり方だと思うのですが、この時キャラクターに移動の処理を指示するのは、大抵Updateメソッド内です。

このUpdateメソッドは1フレームごとに毎回呼ばれるので、キャラクターの動きも1フレームずつ処理することが可能です。



問題は、1フレームの間隔が一定ではないということ


逆に言えば、一秒間に呼ばれるフレーム数が一定ではないということ!1フレーム1m進むとして、、
・60フレーム呼ばれたら 60×1=60m
・30フレーム呼ばれたら 30×1=30m

倍の差が出てしまう、、



これを解決するのが、deltaTime


製作者はキャラクターに秒速を渡して上げた後、その速度に1フレームの処理にかかった時間(deltaTime)をかけてあげれば、一秒たった後にキャラクターが進んだ距離は必ず一定になるという方法でした。

Macでバックスラッシュ"\"を入力する

option + \キーで入力が可能です。

Unityでは、"¥n"は改行として認識してくれません。


"\n"と入力しましょう。