Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

VBAでダイアログ形式でファイルを開きパスを取得

みんな大好きExcel
今回はExcelで実行できるVBAでダイアログ形式でファイルを開きパスを取得の話。

実際のところ

まずは写経。
ファイルが読み込まれるとダイアログがでてTextファイルがデフォ指定でチェックできるもの。

fileToOpen = Application _ 
 .GetOpenFilename("Text Files (*.txt), *.txt") 
If fileToOpen <> False Then 
 MsgBox "Open " & fileToOpen 
End If

DuckDuckGoの!Bangでルート検索するのが楽だったはなし

なにかと便利なDuckDuckGoの!Bang。
特定のサイトをターゲットにした特化検索があったりして便利。

ルート検索のときに目的地を入力=>ルート検索をクリック=>出発地を入力
みたいな冗長な事をやってましたが、これ、もしかして省力できるのではないかと色々調べてみました。

実際のところ

f:id:shuzo_kino:20210513123101p:plain

!googlemaps sendai station to ueno station

f:id:shuzo_kino:20210513123159p:plain

地名は日本語でもOKなので

!googlemaps 岡山駅 to 函館駅

f:id:shuzo_kino:20210513123338p:plain


省略記法とあわせて

!map 岡山駅 to ueno station

なんていう合わせ技も有効でした。

【読書メモ】新版 財務3表一体理解法 (朝日新書)

f:id:shuzo_kino:20210515235358p:plain
何故かリンクを取得できないので画像を公式より引用

決算書読めるようになりましょう系本の中でも評価が高い本書。
本書は先行した著作群をレベルと内容に合わせて再改定したもので、他に2冊の関連書と併せて意味を成すもののようです。


勘定仕訳のような各論では終わらず、商売をやっていく上で必要な視座で財務三表の繋がりをみていく……という内容です。
脱サラして漆器販売の会社をはじめた社長というシナリオで、
資本金の振込から売上、税金などのお金の流れを三表に当て嵌めて説明していくスタイル。

項目だけ列記された教科書スタイルだと頭に入らないタイプなので、こういう流れは助かります。

GameObjectを探して割り当てる

まえの方法ではInspectorからゲームオブジェクトを張り付ける方法をやってました。
が、これだと生成されたオブジェクト等を対象する場合に使えません。
こういう場合、GameObjectクラスのFindメソッドをつかってシーン中にあるGameObjectを探して割り当てる事ができます。

実際のところ

GameObject型のsomethingという箱をつくり、そこに"yourTarget"という名前のオブジェクトを付けるには以下のように

GameObject something  = GameObject.Find("yourTarget");

VSCodeにArduino IDE + M5stackな環境を構築する(書き途中)

前回VSCodeにUnityに構築して威力を痛感したので、この機会にArduino IDEもやってみようと思いたちました。
今の作業環境にM5stackの環境もないのでついでに。

実際のところ

環境

M5stack系はなし

実際の手順

細かい記述増強中……

f:id:shuzo_kino:20210513210807p:plain
スニペット
f:id:shuzo_kino:20210513210958p:plain

Pathを通す
f:id:shuzo_kino:20210513222547p:plain

select programmer
f:id:shuzo_kino:20210513225226p:plain


board
f:id:shuzo_kino:20210513225712p:plain


f:id:shuzo_kino:20210513225816p:plain


f:id:shuzo_kino:20210513225949p:plain

Refresh Boardで更新して、「m5」と打つとでてきます
f:id:shuzo_kino:20210513230051p:plain

change board
M5stack core
f:id:shuzo_kino:20210513231646p:plain

Arduino: Libra maneger
m5stackのライブラリを入れる
f:id:shuzo_kino:20210513232801p:plain

ポートを選ぶ
f:id:shuzo_kino:20210513235836p:plain

ライブラリ類の読み込みパスを設定

{
"workbench.editorAssociations": [
{
"viewType": "jupyter.notebook.ipynb",
"filenamePattern": "*.ipynb"
}
],
"python.languageServer": "Pylance",
"arduino.additionalUrls": [
"https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json",
"http://arduino.esp8266.com/stable/package_esp8266com_index.json"
],
"C_Cpp.updateChannel": "Insiders",
"arduino.path": "C:\\Program Files (x86)\\Arduino",
"C_Cpp.default.includePath": []
}

こう書き換える

{
"name": "Arduino",
"includePath": [
"{path-to-arduino}/hardware/arduino/avr/cores/arduino/",
"{path-to-arduino}/hardware/arduino/avr/libraries/EEPROM/",
"{path-to-arduino}/hardware/arduino/avr/libraries/SPI/",
"{path-to-arduino}/hardware/arduino/avr/libraries/SoftwareSerial/",
"{path-to-arduino}/hardware/arduino/avr/libraries/Wire/",
"{path-to-arduino}/hardware/tools/avr/avr/include/",
"{path-to-arduino}/hardware/tools/avr/avr/include/avr/",
"{path-to-arduino}/hardware/tools/avr/avr/include/compat/",
"{path-to-arduino}/hardware/tools/avr/avr/include/util/",
"{path-to-arduino}/hardware/tools/avr/lib/gcc/avr/4.*.*/include/",
"{path-to-arduino}/hardware/tools/avr/lib/gcc/avr/4.*.*/include-fixed/"
"{path-to-arduino}/libraries
"C:/Users/user/Documents/Arduino/libraries"
],
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}

Unity2020にVSCodeの環境を紐づける

永らく文化的でない開発環境でやってきた関係で、オートコンプリート機能とは疎遠でした。
が、写経の過程でVSCodeを使うようになって、その恩恵を知ってしまうと……Unity実装時の半端なオートコンプリートが寂しいことに……。
emacsを使わなくなって4年ほど経ちエディタを改良していくという習慣に立ち返るには丁度いいタイミングかと思い、やってみることに。

実際のところ

環境

  • Windows10
  • VSCode 1.56.0
    • C#, ,NET系extension導入済み
  • Unity 2019.4.26f1 (64-bit)

実際の作業

何やら大量にextantionが出ていますが、とりあえず以下の三つが使われてる様子なので、導入しときます。
実際、みていてもこの3つが検索上位にくるみたいですし。
f:id:shuzo_kino:20210513002635p:plain

VSCodeが導入された状態で以下のリンクをクリックすれば、ダウンロードする筈。
あるいは、extention窓から自力で入れてもよいです。
Debugger for Unity - Visual Studio Marketplace
Unity Tools - Visual Studio Marketplace
Unity Code Snippets - Visual Studio Marketplace

よくなること

オートコンプリート

導入すると、通常状態ではついてないUNITY系のオートコンプリートがついてご満悦。
f:id:shuzo_kino:20210513002808p:plain

コマンドパレット

Ctrl+Shft+Pでコマンドパレットを開き、unityで検索すると、ツール群も新たに導入されているのが分かります。
f:id:shuzo_kino:20210513003128p:plain

とても便利

Ctrl+^で選択範囲をUnityの公式ドキュメントで検索可能。
技術面ではDuckDuckGoのリダイレクトを使ってる模様。
その関係か、初回だと権限設定を付けないといけませんが……。
f:id:shuzo_kino:20210513003750p:plain
ちゃんとやると、デフォルトブラウザで起動。
f:id:shuzo_kino:20210513003859p:plain

IMGUIのボタンを押すとゲームオブジェクトが降ってくる挙動をつくる

shuzo-kino.hateblo.jp
で使ったIMGUIのお手軽ボタンのアクションとして、
Level1をクリックしたらキューブが、Level2をクリックしたらキャラクターが降ってくる挙動をつくります。

実際のところ

作業の前提

以前の作業で作ったCubeやCapsle(赤米)と、そのイベントやら周りがある前提。
shuzo-kino.hateblo.jp

新しいロボットをAsetts Storeからよみこみ

ロボットは超有名ドコロのSpaceRobotKyle君をアセットストアから導入し、作業中シーンに読み込んでおきます。
assetstore.unity.com

スクリプト

オブジェクトの生成はInstantiate関数でいけました。

古めな情報だと前後に色々ついてた時代もあったみたいですが、
すくなくとも今回の用途ではこの記法で必要なオブジェクトを生成可能。

引数は順番に、

  • 対象オブジェクト
  • 生成座標(3DならVector3)
  • 回転情報 特に必要ないならQuaternion.identity = 回転なし
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Button : MonoBehaviour
{
    public GameObject boxobject;
    public GameObject robotobject;

    void OnGUI ()
    {
        GUI.Box(new Rect(10,10,100,90), "Loader Menu");
    
        if(GUI.Button(new Rect(20,40,80,20), "Level 1"))
        {
            Instantiate(boxobject, new Vector3 (0.2f, 0.2f, 0.2f), Quaternion.identity);
        }
    
        if(GUI.Button(new Rect(20,70,80,20), "Level 2")) 
        {
            Instantiate(robotobject, new Vector3 (0.3f, 0.3f, 0.3f), Quaternion.identity);
            print("here 2");
        }
    }
}

オブジェクトの紐づけ

Button.csはこれまでの作業でButtonTriggerというGameObjectに紐づけてあります。
スクリプトを更新したことで、Inspectorにも項目が増えてますから、画面でオブジェクトを紐づけていきます。
Hierarchyにあるもの以外でも、読み込んでいればAssetsから読みだし可能です。*1

やってみる

デフォでは、こんな感じ。
f:id:shuzo_kino:20210513013434p:plain
さっそくLevel1を押下してKyle君を呼び出します。
スクリプトを割り付けてないので、棒立ちですけどね。
f:id:shuzo_kino:20210513013327p:plain
更にLevel2を押下しCubeを表示!
f:id:shuzo_kino:20210513013400p:plain

生成ゲームオブジェクトにスクリプト他がついてるなら、それもついてくる

さて、ここで問題が。
このCubeにはこれまでの実装でIs Triggerとして機能させており、スクリプトも割付られています。
というわけで、どっちに触れてもイベントが発火し、赤米が回転します。
離れれば赤米も、新造Cubeも消えます。
今の実装だと元あったCubeは破壊対象じゃないので……赤米を破壊した後、元あったCubeに触れるとエラーでクラッシュします。
普通のゲーム作りなら問題ですが、今は挙動をつかむのが目的なのでそのまんまにしときます。

*1:私はここで、ロボットをHierarchyに入れてから不可視化方法で四苦八苦しました。考えてみれば、それでは使い辛くて仕方ないでしょうに。