やりたいことがC#でできると知り、Unityで作りたいアプリが決まった
今日、突然に色んなことが一つに繋がった。私は本格的にC#を学んで使いこなすための勉強を始めようと思う。今日までのPythonやAutoHotkeyでの試行錯誤は全部今日のための「壮大な予行演習」だったみたい。
(約 3,100文字の記事です。)
C#、やりたかったことが全部できると判明
まずAutoHotkeyを使った理由だが、これはつまりは他者製のWindowsソフトを自動操作したかったわけだ。そして調べてみたらC#ではマイクロソフト謹製のUI AutomationというAPIを使えばいいことが判明。C#もWindowsもマイクロソフト製だから相性がいいことは間違いない。そしてその使いこなしについてもUI Automation For Desktopという無料ツールを使えば簡単にIDやNameなどが取得できるとか😱
なのでこれでAutoHotkeyを卒業してC#に統合できることが判明!
<追記>
と思ったら役に立たず😭結局Windowsでのお気楽自動化はAutoHotkey一択だった。それ以外だとAutoHotkeyと同系統のAutoIt, UI Automation for Desktopなどになる。さらにそれ以外だともはやAppium, Seleniumというガチのテストツールになってしまい、シンプルなGUI制御とはまったく毛色が異なる。
なのでここは今後もC#からAutoHotkeyのexeファイルを呼び出すなどして実装すると思う。なのでAutoHotkeyの習得はムダではなかった。こういう風に何周も回ることが実験段階ではよくある。裏の裏は表で、その裏は裏という……。
そもそもPythonを選んだのが間違いだった
情報収集中に小耳に挟んだ情報で出所はもう忘れてしまったが、プログラミングでは言語選びが重要らしい。なんだかやりにくいな?と思ったらそれは言語選択ミスの可能性が高いとか。うん、今回の私。Pythonは完全に間違いだった。
Windowsオンリーでいい
GUIアプリを作りたい
他者ウィンドウを制御したい
Webサイトから情報を取得したい
ま、どう考えてもPythonの強みがほとんど見当たらず。
1~3、これはもうマイクロソフト製の言語を選んだ方がいいに決まっている。クロスプラットフォームは気にしないが将来性がある分には困らない。
4についても当然できる。Pythonが特別なのではなくて今のプログラミング言語でこれができない言語の方が珍しい。Zscriptが特殊だったのだ。
GUIのデザインツールも既にVisual Studioに完備
まぁ当たり前だよな、Windows作ったマイクロソフト製なんだから、GUIがあってナンボ。これによってPyQt, PySide6のQtデザイナーも不要でVS1つでカバーできる。
またTkinterのような難解なコードを書かなくてもXAMLデザイナを使ってグラフィカルに設計できるそうな。GUIはやはり可視状態で設計するほうが理にかなっている。CLIからGUIを作り出す方がちょっと無理がある。
結局TkinterかPyAutoGUIかPySide6かを検討した時間もリファレンスを読んだ時間も全部無駄。
Zbrushプラグイン開発も全部予行演習に
今の実装はZscript+Python+AutoHotkeyだが、これは実はシンプルにZscript+C#で済んだのだ。ムダに遠回りした。いや、AutoHotkeyは代替が効かないので結局はPythonがC#になるだけか、ならあまり違いがないな。
だがここまでで試行錯誤したことはほとんど次に生かせる。例えば、
英語でPythonを学習した>英語教材で学べる耳ができた
未経験のPythonから1つの成果物を作り上げた>全体像が見えている
ウィンドウ要素の取得と制御のやり方は共通>利用ツールが変わるだけ
コーディングよりもIDEの補完機能が重要(スペルミスなど時間の無駄)
Gitは必須科目
プログラミング言語は「目的」に応じて選ぶべし!
特に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から探そうと思う。
まるで雷が落ちたかのように、突然に「全てが一つ」に繋がった。
天啓(てんけい)とはまさにこのことなのだろう。
今回の創作活動は約1時間(累積 約3,892時間)
(1,137回目のnote更新)
読んでくれてありがとう。気長にマイペースに書いてます。この出会いに感謝😊