アプリビレッジ

おすすめのゲーム・スマホアプリの情報やストーリーなどの濃い話(ネタバレ含む)、面白い口コミまでもひっそりと公開中!

【UWSC】画像認識が使えないときの対処方法。失敗しないゲーム自動化!

公開:2022年02月18日


Warning: Undefined variable $shoplink1 in /home/tareport/app-village.com/public_html/wp-content/themes/original/functions.php on line 745

Warning: Undefined variable $shoplink2 in /home/tareport/app-village.com/public_html/wp-content/themes/original/functions.php on line 746

UWSCの画像認識って、便利なんだけど状況に応じて使えないことがあるわよね。その時の対処方法を教えて欲しいわ

今回は便利なUWSCの画像認識がうまく機能しないときの対処方法をご紹介します。画面上に同じボタンが2つ以上ある場合や背景が透過している場合なども対応可能です。

興味がある人はぜひ覚えていってくださいね!

まずは画像認識の基本パターン

UWSCの画像認識については、以前にマクロ制作でもご紹介しましたので、今回はざっくりといきます。

UWSCの画像認識で基本となる形

IFB CHKIMG("画像ファイル名")
BTN(LEFT, CLICK, G_IMG_X+10, G_IMG_Y+10)
ENDIF

CHKIMG画像を探し、BTNでマウスをクリックするという流れですね。

UWSCでの画像認識はたったこれだけのプログラムでできるのですが、目標となる画像が1個とは限りませんし、背景が微妙に動く場合はクリックすらしてくれません。

ゲームアプリによって、対象となる画像は大きく変化しますので、思いつく限り状況に応じた対処方法をご紹介します。

同じ画像を何度もクリックしてエラーになる

まずはUWSCの画像認識が優秀すぎる問題から。

UWSCの画像認識の処理速度はパソコンの性能に大きく影響を受けますが、一般的なパソコンであったとしても「めっちゃ早い」です。ですので、画像をタップして、画面が切り替わる間に、確実に同じ画像を見つけて、もう1度クリックしてしまいます。

連打しても問題ないゲームなら放置しておいてもいいですが、複数回連続するとエラーになる……まあ、ちょっと古いタイプのゲームだと問題になります。エラーでたびたびマクロが止まるなんて、ゲーム自動化としても致命的ですよね。

もしも、連続でクリックして処理がおかしくなっているなら、「SLEEP」を設定してあげましょう。

使い方は簡単で、画像を見つけたら、処理を指定時間分だけ止めて、それからクリックさせるだけです。

IFB CHKIMG("画像ファイル名")
SLEEP(1)
BTN(LEFT, CLICK, G_IMG_X+10, G_IMG_Y+10)
ENDIF

こちら例ですと「SLEEP(1)」で1秒だけ処理を止めています。0.5秒なんて指定もできますし、10にすれば10秒の待ち時間を作ることもできます。ゲームによって処理時間はまちまちですので、あなたが使いたいゲームに合わせて設定してください。

同じ画像が複数並んでいる場合

クエストの選択で同じ画像がたくさん並んでいることって、結構ありますよね。

UWSCの画像認識にパターンがありまして、左上を基準に画像認識を始め、右方向に検索します。右端までいったら、1段下をまた左から右へと検索を繰り返し、右下まで到達したら終了します。
※マルチディスプレイでモニターが2つ以上あって、さらにマイナスの値になっていても、左上から右下の法則は変わりません。ご自身のモニターの並びに応じて自動で検索してくれます。便利!

これを踏まえると、上から順番にクエストが並んでいたら、一番上を必ずクリックします。横に並んでいた場合は、左上にあるクエストを必ずクリックします。

で、この法則に当てはまる並びであれば問題ありませんが、たまに2番目のクエストを周回したいなど、ありませんか? 僕はあります。そんな時はいつもの画像認識では対応できません。

同じ画像が複数あり、○番目をクリックしたい場合には、別の画像認識に少し手を加えます。

複数画像に対応するための下準備

まずはマクロファイル(UWS)の一番上にあるACWの下に以下を挿入します。

id = GETID(GET_ACTIVE_WIN)
x1 = STATUS(id, ST_X)
y1 = STATUS(id, ST_Y)
x2 = x1 + STATUS(id, ST_CLWIDTH)
y2 = y1 + STATUS(id, ST_CLHEIGHT)

GETIDでアクティブウィンドウの情報を取得し、STATUSでx1とy1にウィンドウの縦と横の座標を挿入し、x2とy2にはウィンドウの終了地点を教えています。まあ、難しく考えることなく、このまま入れておけば大丈夫です。

これが終わったら準備OK。同じ画像が複数ある場合は、以下のように変更して変えてください。

複数画像検索の基本パターン

IFB CHKIMG("画像ファイル",0,x1,y1,x2,y2,-1)
BTN(LEFT, CLICK, ALL_IMG_X[i], ALL_IMG_Y[i])
ENDIF

CHKIMGの最後にある「-1」で画面上にあるすべての「画像ファイル」の座標を「ALL_IMG_X」「ALL_IMG_Y」に記録します。それを使って「i」番目の画像をクリックという流れです。IFBの前に「i = 2」といれて、iの番号を指定しておいてもいいですし、直接「i」を数字に書き換えても構いません。使いやすい方法で指定してくださいね。

ただ一つだけ番号指定の注意点としては、番号は0から始まるということ。つまり、一番左上にある画像は0で、次の画像は1となります。全部で4枚の画像だったら、3で終わるということですね!

下準備さえ、きちんとしておけば、難しい事はありません。ぜひお試しください。

下から、右から画像を指定したい

さっきのは最初の画像から何番目という指定でしたが、今度は最後から画像を選択したいという場合もありますよね。この場合は、複数画像検索の下準備を終えたあとにIFBを以下のように変更してください。

IFB CHKIMG("画像ファイル",0,x1,y1,x2,y2,-1)
i = LENGTH(ALL_IMG_X) - 1 - n
BTN(LEFT, CLICK, ALL_IMG_X[i], ALL_IMG_Y[i])
ENDIF

LENGTHが配列の数を数えてくれるので、同じ画面内にあれば簡単です。

「n」の部分に最後から数えた画像の番号を入れてください。最後から2番目なら「2」ですね。

同じ画面にある画像なら、ここまでの話で事足ります。

でも、もしかしたら、画面外にある画像をスクロールさせて探したい。新しいクエストが下に並ぶという、ちょっと頭のおかしいスマホゲームの自動化だと、そんなことも必要になってきます。画面外にありますので、画像を検索する前にスクロールさせる必要があります。その時はどうすればいいのか?

スクロールさせて画面外の画像を見つけてクリックする

目標となる場所に変化を見つけ、それを見つけるまで、「BTN(WHEEL, 距離)」を使って、画面をスクロールさせ続けるのが1番簡単です。

IFB CHKIMG("目標となる画像ファイル")
IFB CHKIMG("画像ファイル",0,x1,y1,x2,y2,-1)
BTN(LEFT, CLICK, ALL_IMG_X[i], ALL_IMG_Y[i])
ENDIF
ELSE
MMV(横,縦)
BTN(WHEEL, -10)
ENDIF

上にスクロールなら「BTN(WHEEL, +10)」としてください。「MMV(横,縦)」でマウスカーソルの位置を移動させるのは、アプリによっては、カーソルが動かしたいウィンドウ内に置かれていないと動かないからです。ゲームによって場所は変わりますので、画面がスクロールしない場合は、適宜、調整してください。

スクロールさせるだけなら、これだけです。でも、やってもらうとわかりますが、このまま使うと「目標となる画像ファイル」が見つかるまで、ずっとスクロールを繰り返します。ゲームアプリによっては致命的なエラーとなって、ゲーム自動化が失敗が可能性があります。

それを回避するためには、スクロールさせるページにいるのかをIFBで作らなければなりません。

IFB CHKIMG("スクロールさせる画面にしかない画像ファイル")
IFB CHKIMG("目標となる画像ファイル")
IFB CHKIMG("画像ファイル",0,x1,y1,x2,y2,-1)
BTN(LEFT, CLICK, ALL_IMG_X[i], ALL_IMG_Y[i])
ENDIF
ELSE
MMV(横,縦)
BTN(WHEEL, -10)
ENDIF
ENDIF

これで出撃画面など、スクロールさせたい画面にいるときだけスクロールするようになります。WHEELに関しては、なかなか癖が強く、思った動きをしてくれません。その場合、SLEEPを入れたり、スクロールする量を「-10」から多くすることで、うまくいったりします。色々試して、理想の動きに近づけていきましょう。

画像のクリック位置にゆらぎを作りたい

ゲーム自動化のマクロを使っている上で一番気になるのが、運営にマクロでの操作がバレないのかという点。「ゲームを自動化して遊ぼう・マクロについての基礎知識」でも書きましたが、マクロ使用が運営にバレるはずはありません。

でも、それでも心配だという人もいると思います。そんな人の為に、マクロだと限りなくわからなくするために、クリック場所を毎回変えるようにランダムを使って、クリック場所を変更するマクロを紹介しています。

ゲーム自動化でランダムを入れて不規則にする

SLEEPを入れて、それもランダムで待ち時間も変更させれば、もう完璧ですね。クリック毎回同じなのが心配な人はぜひお試しくださいね。

透過など背景の変わる画像をクリックしたい

こちらは別ページであいまい検索について詳しくやっています。

毎回、若干変わる画像を扱う際には必須となるプラグインですので、この機会にぜひ導入してみてください。画像検索がもっと汎用性が高くなりますよ!

入力ミスが多発する場合の対処方法(おまけ)

マクロを作っていくと同じようなプログラムの繰り返しになって、それを修正したり、変更したりしていると、いつかどこかで入力ミスが発生します。それを避けるには、FUNCTION(PROCEDURE)を使って関数化し、似たようなプログラムを省略していくのが1番です。

興味がある人は「マクロで同じコードが続く場合の省略方法」をご覧ください。

画像認識が使えないときの対処方法。失敗しないゲーム自動化!のまとめ

状況に応じた画像認識の方法は見つかりましたでしょうか。もしも、希望の方法が見つからない場合は、メールやコメントでお知らせくださいね!

UWSCに詳しくなればなるほど、色々なことが出来るようになっていきます。僕がUWSCを学ぶ上で参考にした書籍はこちらです。

UWSCはWEBで調べれば、たくさんの情報が出てきますが、本にはまた違った魅力がありますよね。しっかりまとまった情報が欲しい人にはおすすめです。

前の記事

次の記事

あなたにおすすめ

よく読まれている記事

同時に読まれている記事

コメント

  1. 1 名無しさん ID:YTEyODA5

    記事拝読させて頂きました。
    マクロを使ったゲームの自動化に大変興味があります。さらに、派生元のプログラミングや、ITの系の知識に興味が湧きました。貴殿のような豊富などこから勉強すればよろしいでしょうか?私全くの初心者であり、知識0です。
    もしよろしければ、こちらのコメントに勉強のアドバイスを頂きたいです。

  2. 2 名無しさん ID:YmZmZDk4

    ここで扱っていることをやれば、初心者でも自動化はできますよ!
    勉強のアドバイスとしては、なんでも試してみることが重要です。
    最初は失敗もしますが、失敗の中から自分に必要なことが見えてきます。
    必要なことがわかれば質問も具体的になり、より求めている答えが引き出せるようになるはずです。
    抽象的な質問だと抽象的な回答しか得られません。その事を念頭において、質問を明確化できるくらいには色々チャレンジしてみるといいですよ♪

書き込みはこちらから