したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

AI製作関係スレ その2

1MUGEN名無しさん:2010/07/18(日) 15:05:37 ID:AP4BZlNs
AIについて語るスレです。
AIについての質問とか見つけたネタを書いてくカンジです。

前スレ
AI製作関係スレ
ttp://jbbs.livedoor.jp/bbs/read.cgi/internet/1117/1232180149/

2MUGEN名無しさん:2010/08/31(火) 08:30:50 ID:RIU4cLyQ
2 ついでにage

3MUGEN名無しさん:2010/09/04(土) 20:47:57 ID:SiUQf67k
>>1

4MUGEN名無しさん:2010/09/05(日) 08:49:09 ID:SWR92AEU
>>1
このスレも前半はダッシュの話題になるんじゃないかと不安です

5MUGEN名無しさん:2010/09/05(日) 22:27:12 ID:Ey2a8uMQ
では先頭は俺が

相手の高さについてだが、立ちはheadである程度認識出来るからいいとして
相手がしゃがみ状態のときの高さ認識をどうしたらいいか悩んでる状態
何かいい方法あれば教えてください

6MUGEN名無しさん:2010/09/05(日) 23:28:01 ID:bDuc95/E
基本的にはmidで適当に出してるなぁ。
あとは打点が高い技が当たるかスカるかで学習させるとか。

しかし打点が低いコンボ始動技がないキャラは
自動しゃがみガード勢に振る技がなくて困る。

7MUGEN名無しさん:2010/09/08(水) 19:09:30 ID:NOmzWBy.
>6
返答遅れたけどありがとう
midでちょっと試してみるわ

8MUGEN名無しさん:2010/09/09(木) 09:58:12 ID:vnkusP3w
そういや前スレでも最後のほうにあったんだけど飛び道具をガードさせるのにヘルパー使う人って多いのかな?

9MUGEN名無しさん:2010/09/09(木) 11:19:53 ID:pCtfZK2c
ひきつける
飛び越す・くぐる
とか細かい対応させたいならヘルパー使わないとね。
波動に飛びが刺さるとなかなか気持ち良いよ。
自分の趣味AIではprojectileもおよその位置を割り出すようにしてる。

全部ガードさせる程度ならいらないけど。

10MUGEN名無しさん:2010/09/10(金) 16:49:12 ID:cAblJtxY
飛び道具の大きさとかを認識する方法ってある?

11MUGEN名無しさん:2010/09/12(日) 10:55:42 ID:SBgZSc9.
当たり判定の認識とやってることが同じだから学習使わないと無理。
当たった瞬間の飛び道具の座標と自分の座標から割り出すぐらいかなぁ。

最近飛び越すだけなら飛び道具の位置を認識するより
飛び道具を飛ばすステートと発生を学習させた方がいいような気がしてきた。
超反応ではあるんだが、普通のジャンプの頻度が多いキャラなら
ジャンプが噛み合ったように見えてくれるし・・・。

12MUGEN名無しさん:2010/09/12(日) 17:53:35 ID:rG0DS60U
>>10
認識は無理なんで

予めサイズを想定して計算
→学習で修正

ってな感じで大雑把にやってる
自分はキャラ幅の1〜1.5倍くらいで大体の飛び道具に対処できると踏んでる
正義相手だとNB喰らって4,5割は持ってかれるけど仕方ないね
どうせ勝てる相手じゃないしw

対応動作に多様性を求めると、精度はある程度妥協せざるを得ないよ

13MUGEN名無しさん:2010/09/12(日) 17:57:10 ID:rG0DS60U
×認識は無理
○認識は学習しないと無理

14MUGEN名無しさん:2010/09/14(火) 13:44:03 ID:aj6/cWo6
AI作成中にふと思ったのですが、他人のAIの記述を真似もしくはコピペする場合ってAI製作者に許可とかもらった方がいいのかな?
いちいちこんなことで連絡したら迷惑だろうし・・・
許可いるならヘルパー式AIスイッチ作った人からも許可もらえとかにもなっちゃうし・・・
皆さんはどうしてますか?

15MUGEN名無しさん:2010/09/14(火) 23:06:26 ID:5N6YNkiQ
連絡はいらないんじゃないかなぁ。
さすがに気が引けるんでreadmeに名前を載せたりcnsにコメントをつけたりはしてるけど。

16MUGEN名無しさん:2010/09/15(水) 12:37:13 ID:wvoCWO7M
>>14
そもそもヘルパー式AIスイッチ作った人は使用許可だしてるしな。
とりあえず、記述を参考にしましたとかでreadmeにその人の名前かいておくといい。
何かアレば恐らく相手側から連絡してくると思う。
ただ、キャラ作成+AI作成してる人だと、「私の記述をコピペするのはやめてくれ」って人も多いから
キャラ作成の記述なのかAIの記述なのかどちらともなのか判断が難しいからそういう人はやめたほうがいい。

17MUGEN名無しさん:2010/09/24(金) 08:30:13 ID:c25dsH9s
ううむ・・・摩擦計算がうまいこといかないなぁ

やっぱり摩擦係数って変数に置き換えて使ったほうが簡単なのかな?

18MUGEN名無しさん:2010/09/24(金) 11:44:58 ID:jigQPGm.
変数に入れたほうが圧倒的に楽だよ
ヘルパーの変数で管理すればおk

19MUGEN名無しさん:2010/09/24(金) 14:38:28 ID:c25dsH9s
>>18
返答ありがとうございます。

変数使わないでやったからもう記述がグチャグチャだったよ。

20MUGEN名無しさん:2010/10/10(日) 16:51:09 ID:Uz9Qr8ng
ラウンド開始時にイントロをとばしたことをAIに認識させる方法ってありますか?

21MUGEN名無しさん:2010/10/11(月) 05:48:21 ID:6DdVFmvM
イントロを飛ばすとヘルパーやExplodなどが一度消えることを利用して
RoundState < 2で見えないよう(Scale=0,0)にExplodを出し
RoundState = 2にそのExplodがあるかを確認すればできるんじゃないかな。
ただNumExplod条件はID指定のないRemoveExplodで消えるのでRoundState=2で
NumExplodを確認してVarに記録し最後まで保持するのが確実かと。

22MUGEN名無しさん:2010/10/11(月) 11:05:26 ID:isDWLwKQ
>>21
返答ありがとうございます。
早速やってみようと思います。

23MUGEN名無しさん:2010/10/17(日) 17:04:37 ID:YGSiMEe.
てす

24MUGEN名無しさん:2010/10/17(日) 17:16:06 ID:YGSiMEe.
Don Dorago氏のギースのレベルを8に出来ません。
どうしても4ぐらいにしかなりません。
付属のリドミも英語ばっかりで、何て書いてあるかわかりません。
誰かやり方を教えて下さい。

25MUGEN名無しさん:2010/10/17(日) 21:17:58 ID:kLNWriMw
Setting.cnsで弄れた気がする
「AIlevel」とか書いてあると思うよ
見つからなかったら検索すればよろし
俺はタクマしかもってないんだが、たぶんギースもそうだろ

26MUGEN名無しさん:2010/10/17(日) 22:36:28 ID:YGSiMEe.
>>25
そこはわかってるんだけど、やはり4までしかあがらない、それ以上あげたらバグる。
聞くところによると、対人用と対AI用の二種があるらしいが、もしそうなら切り替えるにはどうすればいい?

27MUGEN名無しさん:2010/10/18(月) 12:09:19 ID:bx5hI6dU
最近の更新でレベルは4段階になったんだよ
対人用云々はAIレベルより下にある"hardcore mode"とかじゃないの?
AIというより性能自体が変化するんだと思うけど
もしくは、6ボタン4ボタンの操作それぞれに対応したcnsをレベルが二つあると誤解してるとか…ねーな

あとスレチなんで、そういう質問は他所でやるほうが良いと思うよ

28MUGEN名無しさん:2010/10/18(月) 13:28:47 ID:CL3EsEnE
>>27
そーなのか、でも最大レベルにしては弱いような。(JIN氏制作ギース(斑鳩氏製AI)にストレート負け)
ここがスレ違ならどこのスレですればいい?

29MUGEN名無しさん:2010/10/18(月) 18:05:25 ID:XYzVwGqI
ここはAI製作関係スレなんだからニコMUGENスレとかでいいんじゃないの?

30MUGEN名無しさん:2010/10/22(金) 17:48:57 ID:mcclLe1I
AI発動フラグにTrigger○ =RoundState = 2
と記述して戦闘開始後にAIを強制発動させようとしたのですが、
キャラが分身してしまいます。
これを直すにはどうしたらいいでしょうか。
ちなみにヘルパー式AIを利用しています。

31MUGEN名無しさん:2010/10/22(金) 21:42:14 ID:TjPivycU
triggerall=roundstate=2
で、
AI用コマンドの最後のtriggerにtrigger○=1をつけると強制発動するよ

それしか方法がわからないからダメだったらごめん

32MUGEN名無しさん:2010/10/22(金) 21:45:09 ID:8TnGsvaE
trigger○=!ishelperを追加すればおk。
○にはroundstate=2と同じ数を入れてね。

33MUGEN名無しさん:2010/10/23(土) 10:20:58 ID:oZY39U7s
32>>
実行してみたら分身することがなくなりました。
ありがとうございます
31>>
の方もご協力してくれてありがとうございます。

34MUGEN名無しさん:2010/10/24(日) 19:40:15 ID:pm3dOuic
タッグ時にキャラがまともに動かないのだがどうしたらいいのだろうか。
あとタッグ対策の記述があったら教えてほしいです。

35MUGEN名無しさん:2010/10/24(日) 20:35:52 ID:uZ6Bo2wQ
おそらくマトモに動かないのは、相手の死体に反応していることが大半。
色んなAIをおとして見て「タッグ時の生死判別」などの記述がある
AIパッチを参考にするといいと思う。
たいていは、AI起動スイッチのそばなどAI記述の最初の方に書いてある。

あと、相手の行動を参照するトリガーにある
P2MoveType / P2StateType
などの記述を
EnemyNear(x),Movetype / EnemyNear(x),StateType
などに置き換える必要がある。
xは生死判別に使用した変数を当てはめることが多い。

いじょ

36MUGEN名無しさん:2010/10/24(日) 20:38:40 ID:HIEhknw6
p2〜は死体を勝手に無視してくれなかったっけ?
死体に反応するのはenemynearだけだった気がする。

37MUGEN名無しさん:2010/10/24(日) 21:05:22 ID:uZ6Bo2wQ
>36
 あら、その通りかも。
 タッグの場合P2/P4に分かれる場合の対策だったかな。
 タッグでしっかり相手を補足しているAIを探すのが早いということで・・・

38MUGEN名無しさん:2010/10/24(日) 21:29:00 ID:pm3dOuic
書き込みサンクス
タッグ用AIなんてのがあるらしいし、それ探して参考にしてみるわ

39MUGEN名無しさん:2010/10/25(月) 08:54:32 ID:9sd4WqW6
そういやplayerIDでリダイレクトしてる時ってタッグ時もちゃんと動作できるのかな?

40MUGEN名無しさん:2010/12/09(木) 17:46:32 ID:56b1JW1U
アルカナのAI作ってる人いる?パラセのを捜してるんだが。
既出だったら作るのやめる。変数一覧なくて調べるのだるいし。

スレチか?

41MUGEN名無しさん:2010/12/21(火) 17:00:32 ID:uT0GjPG.
>>39
亀だけど、teamsideを参照すれば敵側のヘルパーか判別できると思うから、たぶん大丈夫
味方の弾に反応するのを懸念してるってことだよね?

キャラ製作者の方にはhelperのsize項目を設定して欲しいです

42MUGEN名無しさん:2010/12/25(土) 12:27:20 ID:gTFucDKo
>>42
返答ありがとうございます

飛び道具対策って上手くいくと楽しいですよね

43MUGEN名無しさん:2011/01/04(火) 20:10:07 ID:H8JSHk/Y
AIの作成を始めたけどvarがどうしても理解できない
前スレで分子氏やyes氏のサイトみたりいろいろググったりはしてるけども、
「なに」に使うのかわかっても「どう」使うのかが断片的な情報ばかりでよくわからない
実際に用例を出したり、こういう段取りでvarを使いますよ
って説明してくれるとこあるのかな?

44MUGEN名無しさん:2011/01/23(日) 21:18:15 ID:/e81czMI
>>43
厨忍氏のQ&Aとかいいんじゃないかい?

45MUGEN名無しさん:2011/02/16(水) 10:14:46 ID:mfxrlGjk
飛び道具がしゃがまれると当たらないことを認識する方法ってある?

46MUGEN名無しさん:2011/02/19(土) 14:43:25 ID:9bY7vnGs
>>45
・コンボ確定状況時、飛び道具と敵が同じX座標時にあり敵が屈被ダメステ
・contactを満たさずに飛び道具が消える、或いは存在してて敵が被ダメから抜ける
コレ満たせば暫定的に「スカ」は認識できるだろ
ヘルパー側で、飛び道具の背後に敵が居てdef11だったり屈被ダメで飛び道具が存在してれば、
「スカ」認識出来んじゃね

47MUGEN名無しさん:2011/02/19(土) 19:51:35 ID:HRHTVnkI
>>46
なるほど、そういう方法があったか
ありがとう、参考にしてみる

48MUGEN名無しさん:2011/03/21(月) 01:26:51 ID:VDMryTbI
Error message: State machine stuck in loop (stopped after 2500 loops) 131 for ○○○○
Check your states for infinite ChangeState loops

AI作ってためしてみたら、
試合の途中にこんなエラー吐いてmugen終了してしまった
一体全体どうなってしまっているのかわかりません
(○○○○はキャラの名前)

49MUGEN名無しさん:2011/03/21(月) 10:31:50 ID:5NogkGjo
>>48

ステートが無限ループしてるね。
[statedef 131]辺りのチェンジステートを調べてみると良いよ。

5048:2011/03/21(月) 13:26:03 ID:VDMryTbI
>>49
ありがとうございます。
原因はChangeStateのところに、
Trigger2 = EnemyNear(Var(57)),StateNo = Helper(99999),Var(0)(中段攻撃記憶)
Value = 130

Trigger2 = EnemyNear(Var(57)),StateNo = Helper(99999),Var(1)(空中下段記憶)
Value = 131

このように、学習したステートを利用してガード変更していたのですが、
変数に数値が代入されていない際の対策をしていなかったのでループしてしまっていました。
どちらにも代入されていなかったら、両方とも0ですものね。

51MUGEN名無しさん:2011/05/23(月) 11:23:41 ID:Z1nFIlkA
最初に適当に作ったAIが妙に味がある動きをしていて、
そこから距離計算とか有利不利とかきちんと計算してさらに強いAIにしようとすると
何か動きがつまらなくなることってあるよね

52MUGEN名無しさん:2011/05/23(月) 21:08:03 ID:AY2sQ51U
サクラカ氏が作るAIは大抵前者らしいな

53MUGEN名無しさん:2011/05/25(水) 21:11:40 ID:sxp0R4aM
適度にぶっぱとかいれないと単調になりがちだよね

54MUGEN名無しさん:2011/06/17(金) 13:46:34 ID:o1b2HBi.
StateDef40の記述に以下のような記述を入れているのですが、AIが無駄にジャンプしてしまいます。

[State 40, 2]
type = VarSet
Trigger1 = var(59) = 0
Trigger1 = command = "holdfwd"
sysvar(1) = 1

[State 40, 3]
type = VarSet
Trigger1 = var(59) = 0
Trigger1 = command = "holdback"
sysvar(1) = -1

var(59)はAIスイッチです。もちろん、AIの記述には40にchangestateする記述は入れてません。
無駄にジャンプするのは見映えが悪いので無くしたいと思っています。

55MUGEN名無しさん:2011/06/17(金) 19:50:19 ID:Upop9tps
>54
var(59)=0はAI無効(プレイヤー操作)ってことだよな?
なら逆にAI操作時の記述が必要ってことだ。

後はwikiや製作者のサイトを調べてみたほうがいいと思うよ。
他の人の記述見るのも手だけど、理解するのが大変かもしれない。

56MUGEN名無しさん:2011/06/17(金) 20:29:13 ID:OvOhwVCU
確かに人の記述は人によっちゃ魔術書か何かに近いレベルの難解な記述とかあるもんなぁ

57MUGEN名無しさん:2011/06/17(金) 20:41:43 ID:o1b2HBi.
>>55
書くのを忘れていましたが、AI専用のジャンプステートは既に用意してあって、
そこを呼び出してジャンプさせるようにしています。
相手が近距離でダウンしてるときしかジャンプしないようにさせているのですが、
ダウンしていなくてもぴょんぴょん飛んでしまうのでここで質問しました。
P2StateType = Lで相手がダウンしているとき、ですよね?

58MUGEN名無しさん:2011/06/17(金) 21:22:16 ID:GMMHtEVs
>>57
基本的なことなんですが
方向キーでする基本動作の歩き(20)・屈み(10)・ジャンプ(40)・ガード(120)はMUGEN側で処理されてるんです。
それらはChangeState記述を書いてなくてもCtrl=1などの状態で方向キーを動せばそのステートへ行くので、
MUGEN側のAIを起動させている場合も(MUGENのAIから)方向キーが入力されればジャンプなどをします。
なのでAIがその記述をしていないのにジャンプするという現象が起きるわけです。
ちなみに>>54のsysvarのvarsetは前後ジャンプ指定の記述です。

ニュートラル状態からCtrl=0で処理させようとなると試合開始の認識などが若干面倒なので、
操作処理のジャンプの時(!Time&&Ctrl=1&&StateNo=40)に屈みステートなどへChangeStateしたり、
Ctrl=1のダッシュ中などだけCtrl=0で維持させるといった処理でそうしたジャンプを抑制する方法があります。
前者はAI記述の最後尾に書いて制御し、後者はステートにtype=ctrlset,value=0の処理を追加して
技側を(Ctrl || StateNo=***)という感じで条件制御させればいいかと。

59MUGEN名無しさん:2011/06/17(金) 22:06:10 ID:o1b2HBi.
>>58
回答ありがとうございます。
wikiなども参考にしながらやってみます。

60MUGEN名無しさん:2011/06/18(土) 21:39:29 ID:jG/lVq.Y
自分はstate0でctrl=1になったらAI専用立ちステートに飛ばしちゃうな
これだと不具合起こるんだろうか

61MUGEN名無しさん:2011/06/19(日) 13:22:14 ID:EfW1Fcn.
0番ステートの中にCtrl=1&&RoundState=2&&AIフラグでChangeState→AI用立ちステならフライング系の不具合はないかと。
ただ他のステートでも制御してないと、屈み攻撃後の屈み状態(11)から立ち上がり(12)中にジャンプとかはありそうですが。

Ctrl=0制御関係全般に言える事なんですが、
他のCtrl=1のステートもCtrl=0にするなりAI用ステートで制御するなりしないと完全制御できないので大変かと。
Ctrl=1全部をAI用に制御する場合Ctrlの代わりとなる記述をまとめる必要があったりします。
AI用ステートを500xx番とかの括りにしてStateNo=[50000,500xx]で纏めたり、Ctrlの代わりにVarで制御するとか。
Ctrl代わりの情報を使わない方法としてはAI用ステートの中で動作制御をするとかありますけど、その場合
Time!=0条件とかを入れておかないと終了フレームで次の動作を開始したり本来無理な動作をやらかす可能性が。
あとCtrlが戻ったりする動作ステートの中から動作制御するのは、記述が分散して調整が面倒です。
面倒なので完全制御にこだわらず基本的な挙動だけCtrl=0制御するのもありですけど。
不具合としてはCtrl=0制御の場合、試合が終わったらCtrlを戻してやらないと試合終了合図が遅れるとかあります。

あと半分相手のバグの話だけど、Ctrl=0制御だとMUGEN側のAIからのガードが出来なくなるはずなんで、
方向キー操作のガードでないとガードできない状態の攻撃(半分バグ)には一切無防備になってしまうはず。
自分側の不具合以外を上げると、Ctrl=0制御だと相手側のAIがEnemy,Ctrl=0で状況を誤認する場合がありそう。
相手が挑発中とか回避動作中とか溜め動作中とかに誤認し続けるみたいな。相手のミスな気もしますが。

色々と面倒なので自分は最低限勝手なジャンプをさせない程度でいいやと思ってます。

62MUGEN名無しさん:2011/06/19(日) 16:59:39 ID:fGihNZv.
攻撃後の屈みについてはノーマークだった、教えてくれてありがとう

63MUGEN名無しさん:2011/07/03(日) 13:55:53 ID:xf0O4fY6
方向キーでしかガードできないものはどうせ偶然でしかガードできないんだから無視していいと思うけどね

でも専用立ちステートは変な数字にしてほしくないな
コモンやKFMを基準に考えれば200未満が通常の移動・待機ステートなんだからそこに収めて欲しい
じゃないと回避とかの特殊なMoveType=Iステートが推測できなくなる
まあ俺がCtrl=0&&MoveType=IのうちStateNo=[0,120)くらいを嘘硬直として認識してるだけなんですけどね

ただ、AIの都合だけ言わなくても、ステートは基本(KFM)に沿った数字にして欲しいがね
被超必KOカットインとかは3000以上のステートの攻撃でやられた場合、なんて条件になるからそこを外れるとやりづらい
これの場合、EX技なんかの強化必殺技はどうするか迷うところだが

64MUGEN名無しさん:2011/07/10(日) 19:40:48 ID:leYxo.eY
ちょっと違う話するけど、
ダッシュの時に1F目のアニメのまま滑走することがあるんだけど、どうすればいいかな
ちなみに厨忍氏のサイトに載ってる方法は試したんだけど駄目だった

65MUGEN名無しさん:2011/07/10(日) 21:20:31 ID:iOpADiBk
状況がよく掴めないけど、ctrlの条件でダッシュ連打してるとか?
ダッシュステートがctrl=1のキャラもいた気がする

66MUGEN名無しさん:2011/07/10(日) 22:30:42 ID:leYxo.eY
たぶんそうだと思う
ダッシュステートはctrl=1だった
stateno!=[100,101]をトリガーに組み込んだんだけど駄目だったんだ

67MUGEN名無しさん:2011/07/11(月) 01:31:19 ID:B4fMOWDk
自己解決したかも
AI時のみダッシュステートをCtrl=0にして、AI行動のトリガーに

triggerall=Ctrl||stateno=100

と記述するようにしたらなんともなかった
ただこれって不具合でないかな?

68MUGEN名無しさん:2011/07/30(土) 19:50:56 ID:WdSKJcmI
helpertypeがplayerになってる飛び道具の対策って皆さんどうしてます?
triggerにenemynear,ishelper = 0を入れているのですが、AIがそのヘルパーに向かって技を振ってしまいます。

69MUGEN名無しさん:2011/07/31(日) 09:43:06 ID:5I21l7zs
>>68
HelperType=Player自体が特殊なもの(AIを殺しにきてるもの)なので、
余程入れ込んで作ってない限り対策してないと思います。

対策としてはEnemyNearやEnemyのリダイレクトはヘルパーを一切感知できないため、
それを逆手に( Pos X - EnemyNear,Pos X ) * Facing * -1の距離数値(擬似P2Dist X)に
向きやStateTypeを感知してConst(Size.Ground.Front)だとかを減算・加算する方式で、
相手本体の位置を認識させて、上手いこと動かすのが一番分かり易い方法ですかね。
その場合「相手本体が後ろに居る」とかを充実させる必要もありますけどけど。
(P2***タイプの情報はHelperType=Playerも(StateNo=5150(死亡ステート)の相手を除いて)認識するので、
相手StatetypeなどもP2StateTypeでなくEnemyNear,StateTypeとかで認識することになります。)

ただHelperType=Playerは「攻撃の当たる分身」の場合もあるのですが、
飛び道具かそうでないかの確実な認識にはその相手ヘルパーを
IDを調べてPlayerID(xx),リダイレクトで感知して
hitdefattr情報を入手して〜ということまでしないと無理かと。

AIを作る側としてはHelperType=Playerは分身以外に使って欲しくないのが本音です。

70MUGEN名無しさん:2011/08/09(火) 03:30:09 ID:mzq5aRog
70

71MUGEN名無しさん:2011/08/12(金) 12:23:23 ID:3QApvRMs
p2nameを使っちゃうのは?
helper指定して出ている間は攻撃振らないようにしちゃうのがカンタン
なんじゃないかな
まあそのhelperが常時発生してるなら使えないんだけど

72MUGEN名無しさん:2011/09/17(土) 01:38:47 ID:yTMaV9kM
AI製作について語りたいから来てみたけど・・
あまり書き込まれてない?
>>67
自分の場合、ダッシュは
Statedef -1 に動作開始条件を、
飛んだ先のステートで終了条件を書いてる。

73MUGEN名無しさん:2011/09/19(月) 13:32:06 ID:eGOoZPwo
>>72
>>67のやってることは半分それじゃないかな。

いつまでも続けられる+いつでも止められる+Ctrl=1タイプのラン型ダッシュは、
AIに制御させる場合、Ctrl=1のままだと色々調整が難しいから
>>67のようにダッシュステートをAI時にCtrl=0にしてしまって、
AI側にあるCtrl=1の動作条件にTriggerAll = (Ctrl||StateNo=100)で
ダッシュステート加えてしまう方式が一番安定するんじゃないだろうか。記述に手間かかるけど。
ただその場合「ダッシュステート内のChangeState(ダッシュ終了処理)で立ちステートへ」戻す時、
ChangeStateのオプションとしてCtrl=1を入れとかないとCtrl=0で立ちステートに戻ってしまうんで、
Ctrl=1を入れるかダッシュステート内のChangeStateをAI時に使わないようする必要があるけど。

自分も動作開始を-1(AI記述)でダッシュステートをCtrl=0に、
Ctrl=1動作条件にダッシュステートを加えてるけど、
自分の場合Var使って終了条件そのものは-1で調整してる。
その方が細かい調整をしたい時に、一々そっちのファイル開かなくて済むから。
ちょっと特殊なのとしては、Ctrl=0の状態を「ダッシュの出始め数F」だけにして、
AIはCtrlのみのままで【ダッシュ開始直後に他の動作をできないようにする】ようなものもあるけど、
他の人はどんな具合で調整してるんだろうか。

74MUGEN名無しさん:2011/09/23(金) 23:48:25 ID:cdMy6nIw
色々考えてみたけどCtrl=0にするのが一番いいな。

75MUGEN名無しさん:2011/09/26(月) 22:06:48 ID:TNRBPrp.
学習機能つけている人いる?

76MUGEN名無しさん:2011/09/27(火) 18:40:39 ID:nw0NZSmE
>>75
自分はガード中下段の記憶装置と対当て身投げの記憶装置を全部のAIにつけてる。
どっちもテンプレート使いまわせて対応も中下段は立ち屈み指定の切り替えて、
対当て身投げは状況判断Varで攻撃しないよう制御して終わり目を狙って攻撃する感じ。
ただそれら以外の細かいのはほどんど手を付けてない。面倒そうで。

77MUGEN名無しさん:2011/09/29(木) 01:56:12 ID:nP7iLijo
俺はガード不能とコンボ失敗と攻撃失敗の学習機能を付けている。
コンボ失敗は失敗したらそのコンボを使わないというもの
ガード不能と攻撃失敗は失敗直前の相手のStateNoを記憶して
次からその技を出された時は別の対応してる。
攻撃失敗(ジャンプとゲージ溜めも含んでる)はちょっと面倒だけど
記憶するプログラム書けば他のAIでも使えるし便利です。
ただ、自分のはVar一つで2つのStateNoしか記憶できないので
かなりVarを消費しました

78MUGEN名無しさん:2011/09/30(金) 00:27:12 ID:BFrcSfE.
敵攻撃f学習(未完成)、中下段学習、コンボルート失敗学習の3つかな
システム上コンボが安定しないキャラなもんで最後のは特別
普段は前者二つだけで済ませてる

今度は当て身用に、相手の攻撃判定の大きさ等をある程度測定、学習する
機能をつけたいんだが、厨忍氏のQ&A参考にしてもさっぱりわからん……

79sage:2011/09/30(金) 05:13:21 ID:uiv.vhk.
>>78
厨忍氏のQ&A
攻撃が当たった時に相手のStateNoと距離と
攻撃開始してからの時間を記憶。
距離が長くなれば更新しているみたいだね

80MUGEN名無しさん:2011/09/30(金) 08:59:19 ID:uiv.vhk.
>>78 厨忍氏のQ&A
varの偶数値にStateNo、奇数値に当たるまでの時間
fvarの偶数値に距離X、奇数値に距離Yを記憶している。
var(47)は順番に保存するためのカウンタ。

81MUGEN名無しさん:2011/09/30(金) 14:55:12 ID:p7FsDtTE
ttp://homepage3.nifty.com/andil/mugen/AI_atemi.txt
前スレで話題が出たときに作ったヘルパーを使った当身投げ用の記憶装置。
2年前のなんで色々と型落ちしてるけど、参考になれば。
10個分(Var各4個)までの技しか記憶できないものの相手の攻撃に当たったら
相手のStateNo,Time,ID,相手とのX距離Y距離(本体が動いた分も補正),etcまで覚えて
複数の記憶からX距離の近しい方を参照するようにする機能も。
(突進系の技とかは相手との距離で命中するタイミングがずれるので)

実際の使い道ではシールド持ちキャラのAIへ、bitに改良してStateNo,Time,X距離、
ID,攻撃回数,失敗回数,直前のStateNo,直前のMoveTypeまで記憶させて
最大20個分の技を覚えられるようにしてるのを使ってる。(Var各2個)
今それを元にループ処理を加えて新しいAIに搭載準備中。

細かい調査が不要ならStateNo,Time,X距離の記憶だけでいいだろうけど。
攻撃の発生Fを認識させて色々と利用しちゃうと凶悪になるけどね。
相手の攻撃にあわせて始動無敵の技を重ねるとか。

82MUGEN名無しさん:2011/10/01(土) 05:27:09 ID:nh/r5i2k
飛び道具でループコンボをつくろうとして
trigger1=var(55):=var(55)+1
のような記述を入れてみたのですが数値が代入されません
勝手に初期化されたのか、トリガーの一番下にかいてあるのかいろいろ疑ってみたのですがやはり代入できません
打撃技だと問題なく代入されるのですが、飛び道具だとこの記述は使用できないのでしょうか?

83MUGEN名無しさん:2011/10/01(土) 13:01:19 ID:8X3lUDWc
んなこたない
他のトリガーでミスってるんだろう

84MUGEN名無しさん:2011/10/01(土) 13:58:25 ID:tEuzyBeY
>>82
代入のしくみが良く分らないならこれを見てみよう。
ttp://homepage3.nifty.com/andil/mugen/Var.txt

85MUGEN名無しさん:2011/10/01(土) 15:03:43 ID:7rHsflRE
>>82
もしかしてtrigger1=var(55):=var(55)+1の前に「MoveHit,MoveContact」系のトリガーが入ってるんじゃないだろうか。
そうなら「攻撃があたった」という条件の為にMoveHitだとかにしたのかもしれないけど、
MoveHitとかは自身の攻撃しか認識できないので、飛び道具はHelper型ならHelper(*HelperID*),MoveHit=1だとか、
Projectille型ならProjHitTime(*projID*)=1だとかの参照方法で認識させる必要がある。
ただHelper側はMovetype=Aによる処理の前後でもしかしたらそれでも上手くいかない場合があるかも。

Helper型用でもっと確実なのは、Helperのステート側にParentVarAdd(親のvarに加算)をする加えるとか、
もしくは飛び道具を出すステート(始動用,ループ用両方)へのChangeStateをValue=**** +(var(55):=var(55)+1)*0にして、
相手の状態も条件にしてループするとかかな。Valueだとかの:=は「処理が行われる際に代入される」ので。

86MUGEN名無しさん:2011/10/02(日) 04:37:47 ID:sUWrMYD6
>>84
を熟読してようやく解決できました

>>85
の解説も非常に参考になりました、お二人様ありがとうございました

87inae:2011/10/02(日) 12:49:45 ID:8ADYXSVM
主に以下のような感じで浮かせ技を作ろうと思っているのですが、
trigger1 = time = 16
trigger2 = time = 22
trigger3 = time = 30
animtype = Diagup
ground.velovity = -1.5,-8
air.velocity = -1.5,-8
fall = 1
空中の敵に当てると問題無いのですが、
地上の敵に当てると浮かずにダウンしてしまいます。
何が原因でしょうか?

88MUGEN名無しさん:2011/10/02(日) 13:35:55 ID:794g7uFo
>>87
キャラ作成のスレで聞いて

89MUGEN名無しさん:2011/10/02(日) 16:51:14 ID:794g7uFo
質問です。helper(ID),〜って相手のヘルパーも参照できるんですよね。
相手のヘルパーIDと重なった時は自分のヘルパーを参照するのですか?

90MUGEN名無しさん:2011/10/02(日) 20:28:44 ID:H0U0Ivpk
>>89
Helper(ID),で他のキャラの出したヘルパーは参照できませんよ。
Helper,で参照できるのは自分が大本となっているヘルパー、
自分が出したヘルパーの他、そのヘルパーから射出したヘルパー(その子も可)などだけです。
なのでパートナーのHelperも同様に参照できません。安心してください。

ただ参照する方法がないのではなく、PlayerID(*ユニットID*),ならば敵味方関係なく参照できます。
そうした参照方法を多用して相手のヘルパーを探す場合、自分のヘルパーでないことも確認する必要があるのですが、
他のキャラが同キャラの場合は、PlayerID(xx),Name="xxxx"などが一緒になってしまう問題があります。
そこでPlayerID(xx),IsHelper(xx00+ID)という風な処理にすることで、確実な判断が可能になるわけです。
※ちなみにPlayerID(xx),TeamSide=TeamSideだけの判断では「パートナーの」と混同する可能性が出てきます。
(それ以外にもヘルパーのIDを記録して照合する方法もありますが、手間的にはHelperIDに+IDしてしまう方が圧倒的に楽)
そうした理由から射出するHelperIDに自身のIDもくっつけるという手法を用いている人たちがいるのでしょう。
私もそういうのCNSを覗いてHelperIDは重なるとマズいのかなと思ったわけですけど、
テスト用にいじってるKFMを使ってテストして調べて大丈夫だと確認しました。

91MUGEN名無しさん:2011/10/03(月) 18:15:56 ID:YTHbDy/E
>>90
自分のヘルパーだけでしたか。
なら、持ち越さなくていい数値はヘルパーに管理させても問題なさそうですね。
詳しく説明していただきありがとうございます。

92MUGEN名無しさん:2011/10/05(水) 07:53:33 ID:29s/I0cE
記述がわかりやすくて参考にしやすい作者のAIなんてありますか?

93MUGEN名無しさん:2011/10/05(水) 12:39:34 ID:xq0bvpUQ
どういうAIを作りたいのか、何を知りたい・何の参考にしたいのか、初心者かどうか
もう少し情報くれないとちょっと答えづらいな

デフォAIは基本的な記述でマイルドに作られることが多いし、初心者さんがAIに慣れるには良いかも
人それぞれ癖や好みがあるから、色々なAIを見るのが良いと思う
俺がぱっと思いつくのはPotS氏、GM氏、Gal129氏、rei氏、別府氏かな

94MUGEN名無しさん:2011/10/05(水) 14:57:20 ID:29s/I0cE
参考にしたいものはいろいろありますが、主に攻撃がヒットして浮いた敵まで走ってタイミングよく技を出して拾う、という一連の動作が知りたいです
今のところ平成㌢氏の説明書を参考にしてEnemyNear,vel yや時間調節用のvalue = 0などを使っていますが、
最初の浮かせる攻撃がヒットした時の打点が高すぎ・相手との距離が離れすぎて拾うタイミングがズレ、最悪の場合受身を取られて反撃されたり
相手によって体が小さい・重いなどの理由で追撃に失敗したりしてどうしても精度の悪さが気になります
それでよく作りこまれてる製作者のAIをのぞいてみたのですが、やはりそこはしっかりしてるようで
あまり馴染みのない記述がビッシリと書かれていて理解に苦しんでいるところです

95MUGEN名無しさん:2011/10/05(水) 15:50:27 ID:xq0bvpUQ
ここで書くのは結構しんどいですねw
とりあえず大雑把にいきます

・重力計算をする
相手が重かろうが計算が正しければそんなに空振りません
地上コンボの場合は摩擦計算をお忘れなく

・追撃の種類を増やす、受身を取られる場合は追撃しない

・浮かせる攻撃を当てる際に追撃のことも考えておく
→浮かせる攻撃が当たる条件以外に当たった後の動きを予め計算し、
 受身可能時間となるまでに追撃範囲に入るかを計算する

・相手の喰らい判定の変化を考慮して計算する
→空中では足元が薄くなったり、絵に合わせて判定が動いたりします
 その分を考慮して余裕を持ったy方向のヒット条件を考えます
 立ち状態の腹〜胸の高さは空中でも喰らい判定に入ってると予想して
 p2dist y(足元)にconst(size.mid.pos.y)を加えた位置を狙うようにする、など

「時間調節用のvalue = 0」とは0番ステートでしょうか?
立ちにせよ歩きにせよ、AI専用ステートにした方が管理が楽です

もう少し細かく、ということであれば捨てアドでも用意していただければ

96MUGEN名無しさん:2011/10/05(水) 20:50:30 ID:29s/I0cE
返事遅れてすみません、ご丁寧にまとめられていてとてもわかりやすいです
お言葉に甘えて、捨てアドの用意が出来ましたので記述の流れなんかを簡単に書いて頂けると助かります
mugenaisuteado@yahoo.co.jp

97MUGEN名無しさん:2011/10/05(水) 22:47:01 ID:w3LoBL32
>>95-96
相手の吹き飛び中の当たり判定について零れ話を。メールの方では話してるかもしれませんが。
「吹き飛び状態」の時、相手の体は体の中心当たりを基準に「斜め〜横」になりますが、
その時当たり判定の横は「衝突判定(Const(Size.Air.Front))」より広いが良くあります。
特に体の大きい相手は横にしても大きくはみ出すことが多いので、Const(Size.Head.Pos.Y)<-70くらいを目安に、
P2Dist X-Const(Size.***.Front)+Enemy,Const(Size.Mid.Pos.Y)/3程度、縮める計算をした方がいい場合もあるようです。
>>94のようなタイプだと大差ないかもしれませんが、吹き飛ばし直後に追撃するタイプの場合、
大きさの違いによる空中と地上の衝突判定の設定差のせいで追撃の判断に違いの出ることもありました。
(実際には当たるはずなのに、当たらなさそうな場合の判断をしてしまう、など。)

98MUGEN名無しさん:2011/10/05(水) 22:52:32 ID:Ojx0C6.g
相手の差は後回しにして
まず一つずつ調整するのが良い。
そんなにいっぺんに質問したら答えにくい・・

99MUGEN名無しさん:2011/10/07(金) 19:54:24 ID:RAl2LVQw
>>94
自分が作っているAIはぶっ飛んだ相手を拾ってコンボするのが中心です
P2Bodydist XとP2Bodydist Yを使えば
ある程度は当たり判定が分ると思います。
あとはVel XとVel Y を使って相手が地面に落ちるまでの時間を計算して
相手を拾っています。

100MUGEN名無しさん:2011/10/07(金) 20:20:55 ID:poxUzhlI
>>96
この間メールしたものです
あの後追記と訂正のメールを送ったのでメールチェックお願いします


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板