Windowsデスクトップのアイコンをプログラムで動かす

愚痴

いろーーーんなこと調べたけど
delphi - How do I find the screen location of all desktop shortcuts? - Stack Overflow

の質問の回答の最後の方に
GetDesktopWindow()とか LVM_GETITEMPOSITIONとかSendMessageとか使う方法はWin10ではできないって書いてあった
これでできると思い込んで使った労力返して・・・

ついでなのでメッセージ系の値はここを参照した
List Of Windows Messages - WineHQ Wiki

ちなみにアイコンの位置はレジストリに保存されてるらしい
Where does Windows store icon positions? - Super User

調査結果

で、stackoverflowの方に書いてあるリンク先を調査
devblogs.microsoft.com

IShellWindowsとかをpythonでやろうとしたけど該当dll(Shdocvw.dll ?)をctypes.WinDLLしても
なんかうまくできなかったので諦めてc++に変更



visual studio2019でコンソールアプリとしてプロジェクト作って、
該当コードと
Do you know when your destructors run? Part 1. - The Old New Thing
プログラム内でも言及されてるけどこれのコードを張り付けて実行
アイコンの位置を取得するコードが動いた
で、その次のアイコンの位置を動かすコードも動いた
何をやっているのか全く不明なんだけど、動いたからヨシ!



ついでに、位置をファイルの保存にしようとしたら日本語が化けたりしたけど
標準ライブラリの入出力ストリーム | C++ プログラミング解説
のwofstreamのimbueのところのようにしたらうまくいった

まぁとりあえずできたしこれで記事終わり

東方林檎楼のコメ返し&こぼれ話

ピックアップは適当に
箇条書きのコメントに対する返事が見出しです
ちなみにコメントは適宜加工してるのでご了承ください

ありがとう

  • コブラじゃねーか!
  • 三村かなこ
  • もう離さない
  • スコアが生産量(系のコメント)
  • 草(鳥に対してのコメント)
  • グレイス音で草(系のコメント)
  • やってみた[難しい、ぬるい、やりごたえある]

すまんかった

よく気付いたな、ジュースをおごってやろう

  • iM@sの@か(うろ覚えのアイドル像に対して)
  • 背景にりんごろういて草(スペルに対して)
  • デレステのノーツ、おねシン譜面(シンデレラへの約束手形に対して)
  • 恐山繋がり(幽々子に対して)
  • アイマスやったことなさそう
  • 神霊以降の体力表示
  • ボムっても心が痛まないデザイン

ンフフ

  • どこでアイドルってわかったんだw

間に合わなかったor技術力の敗北or忘れてた

  • 墨染とたべるんごミックス期待したワイ
  • あ、左右に行くんじゃないんだw(bemybabyに対して)
  • 弾消し点が欲しいところ
  • 画面下にエネミーマーカーない
  • ボスの残機表示

  • 原作より会話成立してたの草
  • 安置兄貴ここでピチュりましたね・・・
  • あ、んごった

作者の人そこまで考えてないと思うよ

  • @で幽々子
  • 東方最新作最終ステージリスペクト

青森やぞ

  • 幻想郷入りしてる時点ですでに忘れられているのでは

個別回答

  • さすがに金閣寺には寄せなかったか

>>金閣寺の方は難しすぎる、名前が他に出てこなかった、など考えた結果こうなった
>>むしろ1つ前のスペカが金閣寺っぽい気がする

  • ピチュってもP落とさないのね

>>悩んだけど、ピチュり後にパワー回収できるなら、ピチュりのパワー減衰調整するだけで落とす必要ないのでは?ってなった

  • ハイスコアとかRTAとかできちゃうやつ?

>>ハイスコアは上限までできる、RTAは・・・映えません

所感

見てくれて、遊んでくれてありがとう
これ作るためにあかりのwiki読んだり調べたりしたので逆に布教されてしまった感じある
ここまで伸びると思わなかった・・・



コメ返しここまで-------------------------------------------------------


こぼれ話

弾幕
  • 本当は幽々子の3スペル目にコフィンダンスを入れたかったが、時間がなかった
  • 西行大旋風はラストワードの予定だったが、上記の理由により3スペル目に入った(故に難易度が一気に上がってる)
  • 元はラスワ撃破のTrueENDとピチュりによるNormalENDを考えてたが時間が
  • 道中の弾幕は、最初は紅魔郷などの1面の最初、途中から鬼形獣3面、最後の方は妖々夢の6面を参考にしている
  • 例の鳥による弾幕は道中弾幕よりも先に思いついていた
物語系
  • 初期案ではあかりは普通にしゃべっていたが、性格や話し方や過去の解釈に自信がもてなかったため、んごというネタにさせてもよさそうな言葉とりんごの宣伝という部分を強調して話すようになった
  • 経過案でも普通の言葉が入ってたが、ネタにするなら盛大にした方がいいと思ってああなった
  • 初期案では幽々子は通りすがりor怖がってもらうために来ただったが、どうも戦う理由が見つからなかったand何故そこに現れたか不明だったので、幻想郷に被害を出して現世(我々の世界orあかりが存在する世界)へ異変解決のために出張ってきてもらった
  • 美鈴は好きだが流石に無理がありすぎて出せなかった
  • アイマス(デレマス)の他キャラも解釈に自信がないし、アイドルが弾幕・・・?ってなるので出せなかった
  • 幽々子の起用理由は、1.大食い 2.こちら側へこれる実力がある 3.青森に霊場がある で決まった(というか他に候補がいなかった)
  • あかりはりんごを投げて食べさせて布教しているだけ(※イメージです)
音・画像系
  • 本当はラスワの曲を自作する予定だったが時間が
  • あかりの発する音は”全て”元の動画の音声からできている
  • それと曲以外の音は自作
  • スクロールする背景は手持ちの画像の組み合わせ
  • 低速時の魔法陣と、幽々子の後ろの魔法陣は自作
  • それ以外の画像は全てどっかから持ってきてる(or持ってきたものの組み合わせ)
  • 青い大玉を出す妖精は少しだけ改変してりんごを持たせてある
  • というか妖精全般は歩きモーション用のものを改変してそれっぽく見せている
  • 実は左右に動くと自機の効果音の位置も動く
  • フェードアウトとか地味に実装してる
  • 道中は強制スクロールなので弾幕を音楽と同期しやすい、ボスはプレイヤースキルによるので音楽と同期しにくい、っていうことでそれぞれの曲の使う場面が決まった
  • 簡単に言うと、道中曲は盛り上がりと落ち着きがはっきりしていて進行させやすい、ボス曲の方はある程度一定の盛り上がりの繰り返しなため同期しなくても問題なさそうって感じ
プログラム系
  • 合計約7000行
  • ホットリロードやイベントなどの外部化は行っていなかったので、会話や弾幕を変更する度にビルドとかいう糞調整をしていた
  • うまく改修すれば東方LikeSTGを作れるようなライブラリができるけど、今のところやる気はないしこれっぽいの出すかは未定
  • Managerクラスばっか、見る人が見たら卒倒するのでは
  • たぶん弾幕系の基本だけど、弾のメモリ確保は先にやって、一々Delete(メモリ解放)とかせずに使用状況(unityなのでactiveselfでいけた)を参照して弾を管理してた
  • ただ正確な最大弾数の調査はしなかったので余分にメモリ確保されてると思う(外部出力化すれば正確にわかるんだろうなぁ)
  • シンデレラへの約束手形の譜面再現は全部手打ち、四分音符n個だけ待ってこの位置にこの色をK個出す、みたいなのをひたすら作った
  • うろ覚えのアイドル像の文字は、全部直線と円のプログラムだけでできている
  • 乱数は使ってないが、乱数っぽいような動きをする波形を作って、参照する度に時間軸を進める処理にした
  • 敵へのダメージ判定にGetComponentを使って敵クラスを取得しているため、速度的な問題がありそうな実装になってしまい残念
  • 最初は弾によって攻撃力を変えようとしたためそのような実装になった(なお攻撃力を変えることはなかった模様)
  • 誘導弾とレーザーは難しかったのであきらめた
  • 残機が多い時はスコアが多くなるようにこっそり実装してある
  • delegateとIEnumerator(含むCoroutine)が非常に役立った
  • 道中の音楽と弾幕の同期を図るために、各Waveのフレームとwaitを計算しながら弾幕を管理してた

unityroomの1週間ゲームジャムの簡易記録

記録を取る理由

次回とかどっかでなんかに役立てばいいなっていう

やったこと、理由などを記す

記録

1日目

イデア出し

  • やらんとゲーム作れないからね、当然だね

散歩逆立ちなどの運動、アイデアを紙に書き出し、この記録を取るように義務、お題言葉の検索

  • なんでもいいからやるのは大事

とりあえず10個ぐらい考えて、そのうちめっちゃすぐにできそうなのを1つ、
個人的に作ってみたいのを1つ選んだ

  • とりあえず1つ確保したかったのと、どんな反応がくるか気になったので

簡単な方の作りだし、主に頭の中にあるものの吐きだし、素材収集

  • 出しとかないと脳の容量食うし、忘れちゃうからね

2日目

めっちゃすぐにできそうな奴の続き、プログラムとリソース作成
遊びながら数値の調整もした

  • 割とノリノリで作ってた

リソースは基本的に作らない方針だったけど一部欲しいのが見つからなかったので自作

  • 結果的に時計のアラームと叩く音以外を作った、持っててよかった音の知識

初発を作り終えるまでに5時間ぐらいかかったんですけどぉ?!

  • なんでこんなに時間をかけてしまったのか

WebGLとして出力を確認、なんかZ軸とかフォントとか色々問題発生してるので修正、それからブラウザだとゲームスピードが違うのでそれの調整

  • 実際の環境でやるのは大事、せっかく作ったものが動かないとかいうこともあるからね(経験談)

それに1-2時間費やして公開設定ONへ
結局7時間ぐらい使ってしまったんだが?????悲しいなぁ

  • 何に時間を食ったかというと全体的にまんべんなくっていう印象()なので、慣れによる高速化に期待するしかない

この時点でもう一個作る気が失せてるのでどうなるかは明日以降になる
因みに、ソースコードは300行弱ぐらいで済んだしファイルも1つだけ

  • これぐらいのゲーム(?)に細かいクラス分けとかいらんやろ・・・なお保守性

3日目

寝てる最中にちょっとした演出の改善点が思い浮かんだので修正をする

  • なんでこんなのに時間使ってるんだろうと思ったが、逆に考えるんだ、すぐに全部終えられたから作り込みができるんだと

が、特に変化を与えることができなかったので見送り

  • ドラムロールの音を近付くにつれて大きくしようと思ったが、到達が速過ぎてその変化に気付けない
  • 最後にもう少しおめでとう感出すためにクラッカー入れたら画面がごちゃごちゃしてしまった

それからこれ2周してくれないと意味がわからないのに2周させようとする仕組みがない
2周する、というか遊んでくれる人に、「2択」であることをわかってもらう必要がある
1周目、初っ端からプレイヤーに今から何をすべきなのかを提示しないといけない
現状ではプレイヤーは何も理解できずにオブジェクトを移動させる羽目になる
睡眠フェーズでは今のところただの間であるが、ここに何かを入れられないかと考える

  • なんでこんなのに時間使って

悩んだ結果、簡単な文章と簡単なアニメーションを入れてチュートリアルの代わりとした

  • なんでこんな

ニコニコ見ながらだけど3時間ぐらい使った

  • なん

再アップロード兼動作確認テスト終わり、もうこの時点でもう一個作るの諦めてるのでした

  • これにこんだけ時間かかってるようじゃもう一個はもう数週間かかるので・・・

4日目

いやもうこれ以上書く日はないだろうと思うぐらいにできた感があった

  • 果たしてこの成果物で達成感を味わっていいのかどうか

しかし残念ながら懸念事項が浮かんでしまった
通勤時間の片道平均ってどれくらいだろうか・・・・・
何も考えずに最速結果を30分ぐらいにしていたが、人によってはこの値を長く感じる人もいるはず

調べたところ、平日の鉄道通勤は60分ぐらいで徒歩が14分ぐらいらしい

  • 国交省のデータだからソースとしては信頼できるはず

国都市交通特性調査(国土交通省都市局)
都市交通調査・都市計画調査:全国都市交通特性調査 集計データ - 国土交通省

このままだと徒歩通勤の人にとっては早い感が無に等しい
ということでスコア計算式を見直して最短1分ぐらいに、
一方で最長は今まで通りぐらいor長くしたいので2次曲線な感じに

これも何回か試行した
なお、見た目を変更する必要はないと思ってたからモーションはそのまま

  • わけてあってよかったスコア計算

5-7日目

特に何も思いつかなかったので放置
ゲームの公開を確認したのでこの記事も公開

感想

本当は音に関係する何かを作りたかったけど何も思い浮かばなかった・・・
イデアの時点で出てこなかったので要精進

もう半分以下の時間で作れるつもりでいたけどカナシイナァ

UnityのHingeJointの注意点

1. HinjeJointは、回転させたいオブジェクトにアタッチする
2. 回転させるときの角度は、スタート時点での角度からの相対値である
 つまり、最初から何°回転するか、最初から何°がLimitsのMinかMaxかである
 仮にオブジェクトを傾けた状態で始まったとしても、最初の状態から回転させたい角度がSpringのTarget Positionである
 間違えてもグローバルな角度を設定してはいけない
 TransformのRotationで見える値での90°で始めて、同様の見える値で120°まで回転させたい場合は、
 Target Positionに120°を設定するのではなく30°(120-90)を設定するのが正しい

以上

blenderで詰んだ時のなんか

メモ帳


環境
blender2.81a

boolean(ブーリアン)がうまくいかない

1.編集モードでAを押して全部選択した上で、Ctrl+Vで頂点の結合->距離をする
これにより重複頂点を削除してもう一度やる

2.だめだったら、ブーリアンにより変形させたオブジェクトの方で、頂点ができてないか確認
 あったら地道に面を貼っていく
糞みたいな作業なのでもうちょっと簡単にできないだろうか・・・

3. できなかったら知らん



個人的に詰んだら随時追加していく

完走した感想(RTA in Japan 2019)

個人的反省点

  1. 非想天則の宣伝できてない
  2. 大凶時の反応が雑
  3. 非想天則のゲーム紹介ができてない
  4. 最後ミスった
  5. プレイ時に余裕がなかった
  6. あまりRTAの研究が進んでなさそう

振り返り

1.について

 完全に忘れていた、ほんとあれ
 EVOJapanでも大会やるし、終わったら言おうと思ってたのに失念
 次回あるかはわからないけど、言う事リストとか作っておくべきだったなと

2.について

 出るとは思わなかった・・・・・・・・・
 他下げ自上げの言及の仕方は、悪い印象を与える奴だと思う
 咄嗟に出てくる言葉ってのは地が出ると思うが、ちょっと意識して直しておきたい

3.について

 これがどういう立ち位置のゲームなのかとか、通常はどんなものなのかとか
 画面のどこを見ていればいいかとかを言及できなかった
 初見勢おいてけぼりになってしまったのではないかと反省

4.について

 めっちゃ自信あったのにほんと悲しい
 直近の練習では成功率高かっただけに残念すぎる
 慢心だろうか・・・まぁ気にしすぎてもよくはないんだが

5.について

 喋りながらゲームするのは直前にやった解説配信が初めて
 あと人前でゲームするのも初めて
 場慣れしないと無理かなぁ

6.について

 記録を更新してくれる人がいて助かった
 今のところはCPUを制御できてないし、カードもほぼ固定ではある
 これが研究し尽くしたのか、未発見が多いのかはわからない

まとめ

競技というものが楽しく感じたし、披露するというプレッシャーも
練習を重ねるモチベに対していい方向に働いた

一方で、人に魅せるという点において反省点も少なくないと思う
そもそもの性格が向いてない可能性もある

こういう場を用意する側の手伝いも少しはやりたいなと思った
(サブスクの宣伝という方法があったとは・・・)

いい経験になった

blenderの3DモデルをUnityにぶっこむまで

はじめに

覚え書きみたいな感じ
blenderのモデルの作り方からunityに入れるまでの流れ

バージョン

Unity2019.2.x
blender 2.8


blenderでの作業

モデリング

新規ファイルで、スタートアップを変更してなければ立方体がでてくるはず
作るものに対してそれが必要ならそれを使っていく
他に必要ならオブジェクトモードで追加する
編集モードでもできるが、追加されたものがまとめて1つのオブジェクトとなってしまうので
オブジェクトモードの方がいい気がする

TABキーでオブジェクトモードと編集モードを変更できる
できなかったら左上から変える

オブジェクトモードで選択した物体のみ編集モードで変更できる
頂点や辺、面のうちどれを選択するかは左上で選択できる
テンキーじゃない方の123キーでも選択できる
テンキーの方はカメラの角度変更、5は平行投影との変更

Wキーで選択、選択方式の変更
Sキーで拡縮
Gキーで移動
Rキーで回転
ctrl押しながらでキリの良い変更
SGRキーを押した後にXYZキーで操作する軸を固定

選択したところにFで辺、もしくは面を生成
右クリックするとメニューから細分化ができる
色んな設定は左下に出る、もしくは隠れてる

ctrl + tabでスナップをONOFF
スナップ位置は上部中央にある磁石のとなりから変更できる
大体頂点か辺を使う

右側のスパナのアイコンにモディファイアがある
ミラーとかブーリアンなど便利なものがあるので使う

uv展開

ここまで大体Modelingタブでの作業
上の方になんか色々タブがあると思うが
UVなんちゃらでUVのことをやる

UV展開したいオブジェクトをオブジェクトモードで選択して
編集モードにして上の方のUVから展開できる
ctrl + eで選択した辺にシームをマークできる
シームは展開するときに切りとる辺
うまく設定すると展開図がきれい

展開図の方も選択して移動させることができる
操作はたぶん編集モードと同じ

uvの貼り付けは、まず展開図の方で上の方にあるアイコンから
画像を読み込む(これ必要かは知らんけど)
次に、貼り付けたいオブジェクトのマテリアル設定(なんか球体っぽいアイコン)
から新規作成
で、ベースカラーのところから画像なんちゃらを選択
で、すぐ下に出てくる設定から読み込む画像を選択するとできる

表示されない場合は編集画面でzキーを押して
ルック開発とかにすると見れる

unityに取り込む場合は透明が必要な部分のみ
別のマテリアルとして作成した方がよい

できたらfbxとして出力


unityでの作業

unityへ

fbxと画像テクスチャを同じフォルダにしてunityにドラッグ&ドロップ
まぁ別にfbx内部の設定いじれば同じ階層じゃなくてもいいと思うけど

blenderとunityで系が違うのでx軸が前として出力される
z軸を前にするなら若干めんどいがblenderで逆向きにするとかがいる

透明部分を有効化するため、インポートしたfbxの中から
マテリアルを複製する
fbxファイルの右側のアイコンをクリックすればマテリアルが出てくる

複製したマテリアルのモードをopaqueからtransなんちゃらにする
そしてそのマテリアルをunityで割り当てる
fbxの詳細設定のタブの中にある
別にprefabにしてmeshに割り当ててもいいとは思うが

あとはfbxをprefab化して使う
時と場合によってはする必要ないかもしれないけど


その他覚えとけなんか

blender
上部の右の方でオブジェクトを表示する方法を選べる
一番左がワイヤーフレーム

tキーとかnキーで設定が開ける
nの方に確か頂点の自動マージの設定がある、ONにしとけ

オブジェクトの追加で背景画像を設定できる、使え


以上