見出し画像

やりたいことがC#でできると知り、Unityで作りたいアプリが決まった

今日、突然に色んなことが一つに繋がった。私は本格的にC#を学んで使いこなすための勉強を始めようと思う。今日までのPythonやAutoHotkeyでの試行錯誤は全部今日のための「壮大な予行演習」だったみたい。

(約 3,100文字の記事です。)



C#、やりたかったことが全部できると判明

まずAutoHotkeyを使った理由だが、これはつまりは他者製のWindowsソフトを自動操作したかったわけだ。そして調べてみたらC#ではマイクロソフト謹製のUI AutomationというAPIを使えばいいことが判明。C#もWindowsもマイクロソフト製だから相性がいいことは間違いない。そしてその使いこなしについてもUI Automation For Desktopという無料ツールを使えば簡単にIDやNameなどが取得できるとか😱

なのでこれでAutoHotkeyを卒業してC#に統合できることが判明!

AutoHotkeyとPythonとの連携を探った時間は全部無駄になった。またAutoHotkeyか別のツールかを検討した時間も全て無駄。
AutoHotkeyの使いこなしのための学習も全てムダ。

<追記>
と思ったら役に立たず😭結局Windowsでのお気楽自動化はAutoHotkey一択だった。それ以外だとAutoHotkeyと同系統のAutoIt, UI Automation for Desktopなどになる。さらにそれ以外だともはやAppium, Seleniumというガチのテストツールになってしまい、シンプルなGUI制御とはまったく毛色が異なる。

なのでここは今後もC#からAutoHotkeyのexeファイルを呼び出すなどして実装すると思う。なのでAutoHotkeyの習得はムダではなかった。こういう風に何周も回ることが実験段階ではよくある。裏の裏は表で、その裏は裏という……。



そもそもPythonを選んだのが間違いだった

情報収集中に小耳に挟んだ情報で出所はもう忘れてしまったが、プログラミングでは言語選びが重要らしい。なんだかやりにくいな?と思ったらそれは言語選択ミスの可能性が高いとか。うん、今回の私。Pythonは完全に間違いだった。

  1. Windowsオンリーでいい

  2. GUIアプリを作りたい

  3. 他者ウィンドウを制御したい

  4. Webサイトから情報を取得したい

ま、どう考えてもPythonの強みがほとんど見当たらず。

1~3、これはもうマイクロソフト製の言語を選んだ方がいいに決まっている。クロスプラットフォームは気にしないが将来性がある分には困らない。

4についても当然できる。Pythonが特別なのではなくて今のプログラミング言語でこれができない言語の方が珍しい。Zscriptが特殊だったのだ。

GUIのデザインツールも既にVisual Studioに完備

まぁ当たり前だよな、Windows作ったマイクロソフト製なんだから、GUIがあってナンボ。これによってPyQt, PySide6のQtデザイナーも不要でVS1つでカバーできる。

またTkinterのような難解なコードを書かなくてもXAMLデザイナを使ってグラフィカルに設計できるそうな。GUIはやはり可視状態で設計するほうが理にかなっている。CLIからGUIを作り出す方がちょっと無理がある。

うん、まったくPythonを選ぶ理由がなかった。でもなぜPythonを選んだのだろう?BlenderアドオンがPython開発だから、だった気がする。あとウェブで調べれば将来性があるとでてきたから。まぁ間違いではないが、専門家のエンジニアが使いこなすPythonに価値があるだけであって、素人+Pythonでは役に立たない、今なら分かるw

結局TkinterかPyAutoGUIかPySide6かを検討した時間もリファレンスを読んだ時間も全部無駄。


Zbrushプラグイン開発も全部予行演習に

今の実装はZscript+Python+AutoHotkeyだが、これは実はシンプルにZscript+C#で済んだのだ。ムダに遠回りした。いや、AutoHotkeyは代替が効かないので結局はPythonがC#になるだけか、ならあまり違いがないな。

だがここまでで試行錯誤したことはほとんど次に生かせる。例えば、

  1. 英語でPythonを学習した>英語教材で学べる耳ができた

  2. 未経験のPythonから1つの成果物を作り上げた>全体像が見えている

  3. ウィンドウ要素の取得と制御のやり方は共通>利用ツールが変わるだけ

  4. コーディングよりもIDEの補完機能が重要(スペルミスなど時間の無駄)

  5. Gitは必須科目

  6. プログラミング言語は「目的」に応じて選ぶべし!

特に6、プロのエンジニアを目指すなら使える言語の多さ=自分の価値の高さに直結する。クライアントからの要望に応じて最適な言語を選べるからだ。私の場合は自分のためのツールなので、学習コストを考えれば「できれば1つの言語で」となるのが自然だが、Pythonはハズレだったわけだ。C#が今のところの最適な答えっぽい。知らんけどw 一難去ってまた一難というパターンも有り得る。


Unityで作りたいアプリが決まった

ゲームではなくてアプリを作りたいのだ。C#のみで作るよりもUnity上で実現させた方が効率的らしいとChatGPTが教えてくれたのだ。リアルタイムで大量の情報を処理するのはC#よりもUnityのほうが得意らしく、GPUの力なども借りられるそうで。

まぁゲームエンジンだからリアルタイムで軽く処理することに特化しているわけで。

そしてそのアプリに必要な3DCGモデルはBlenderで作ればいい。そしてUnity上でリアルタイム物理演算だったり、リアルタイムで大量の情報を処理する必要がある。

今まで長らく宙ぶらりんだった3DCG活動のゴールが見えた。道筋がハッキリと見えたのだ。そうなればもう回り道などしていられない。迷わないとぶれない。動き始めるしかない。

数年かかったが、ようやく自分の「道」を見つけた気がする。


なのでPython休止でC#に全集中

道が決まったのでそこに集中したい。Pythonについてはなかったことにするw 忘れる必要はないが、Blenderアドオン開発しない限り出番はなさそう。

なおBlenderアドオン開発ではTkinterは使えない。Blender APIでBlender側のUIを使うしかないようだ。なのでTkinterに関しては完全に終了😭

ただしおすすめ教材の講師の言うとおり、GUIの基礎はほとんど共通だということが分かった。なのでTkinterのpack, grid, placeの概念はC#でも使えるだろう。その他の細かいTkinterオンリーのパラメーターや作法は忘れる。

こんな感じで、言語やソフトを切替えたときに「次に使える知識、使えない知識」が分かれる。なるべく使い回せる知識が多いほうが無駄が少ない。

失った時間は取り戻せない。なのでこれから効率よくC#で前に進むしかない。

とりあえずまだUdemyのセール中なので、C#でWindowsアプリを作るための知識と、Unityでアプリを作るための教材をUdemyから探そうと思う。


まるで雷が落ちたかのように、突然に「全てが一つ」に繋がった。
天啓(てんけい)とはまさにこのことなのだろう。

天の啓示。天の導き。神の教え。「—にうたれる」

goo 辞書


今回の創作活動は約1時間(累積 約3,892時間)
(1,137回目のnote更新)



読んでくれてありがとう。気長にマイペースに書いてます。この出会いに感謝😊