プレハブに自身の参照を持たせた時にハマった挙動
先に結論を書きます。
自分自身の参照をフィールド(仮にmyselfとする)に持ったプレハブをInstantiateすると、生成されたcloneオブジェクトのmyselfフィールドはプレハブの参照からcloneオブジェクト自身の参照に置き換わります!
また、スクリプトのpublicなフィールドに自分自身をアタッチされたプレハブのクローンに対してinspectorからapplyを押すと、クローンにアタッチされたプレハブがクローン自身のオブジェクトに勝手に置き換わります(!?)。
プレハブ内の参照関係を壊さないようにする為に必要な仕様だということです。
解決するにはinstantiateした後cloneが持つ自身の参照フィールドをプレハブの参照に置き換えてあげる必要があります。
では以下蛇足。
Unity初挑戦からずいぶん時間が空いてしまいましたがまた少し触っています。
まずは練習として下のミニゲームの岩を投げる側目線のゲームを作ってみようと思ってます。
↑マリオパーティ3のごろごろいわころがし。1vs3のミニゲームで3人側は一番上を目指して坂を登り、一人側は岩を落として3人の邪魔をする
で、とりあえず岩を投げられるようにしようと思ってこんな感じのものを作ってみました。敵とかそういうのは一切まだできておらず、ただ岩を投げたら次が装填されるというだけのものです。
岩は等間隔で左右に動いていて、矢印キーの右左で向きを調整してスペースで投げます。投げたら2秒後に次の岩が出現してまた投げられるようになるというのがここまでの実装です。
この動きは全部rock_prefabのスクリプトに書いてあり、投げた後に自分自身の参照をInstantiateに渡して次の岩を出現させるようになっています。
この自分自身の参照をStartメソッドの中で毎回Resourcesからロードすれば万事上手くいったのですが、publicなフィールドにアタッチするようにすると初期位置に岩が出現せず、その場で分裂するようになってしまいました。
Hierarchyを見てみると1枚目の画像ではRock(clone)が複数出現しているのに2枚目ではRock(clone)の次はRock(clone)(clone)が出現しています。
つまりこれはプレハブではなくシーン上のオブジェクトをcloneしてしまっているということです。スクリプトも全く同じはずのcloneがなぜ別のものをcloneするのかと私はここでパニックになりました。
さらにHierarchy上のRock1オブジェクト(Rock_prefabとリンクしている)のスクリプトにRock_prefabをアタッチした状態でApplyやRevertを押すとRock_prefabがRock1に置き換わる!
その時Rock_prefab側は変化なしです。えー……
で、まあ結論としては冒頭に戻ります。参照が勝手に書き換わってしまうので上書きすればいいんですね。以下のように実装しました。
var clone = Instantiate(rockPrefab);
Rock rockScript = (Rock)((GameObject)clone).GetComponent(typeof(Rock));
rockScript.rockPrefab = this.rockPrefab;
rockPrefabフィールドにはこのスクリプトがアタッチされたprefab自身の参照が入っています。publicで宣言されていてinspector上でRock_prefabプレハブがアタッチされています。Rockはこのスクリプトのクラス名です。
Instantiateは生成したObjectを返すので、それが持つRockスクリプトを取得してrockPrefab フィールド(生成されたObjectの参照が入っている)を自身のrockPrefabフィールド(プレハブの参照)で上書きしています。
ただ、これだとinspector上でApplyを押した時の問題は解決してないんですよね。Hierarchy上のオブジェクトはプレハブとのリンクを切ったほうがいいかもしれません。
リンクはメニューのGameObjectからBreak Prefab Instanceで切ることができます。
以上の事柄は全てUnity質問スレの親切な有識者の方々から懇切丁寧に教えていただきました。本当にありがとうございました。
私もいつか初心者を導けるような技術者になりたいものです。
アグロトークンドルイド
久々にハースストーンのデッキ晒しです。
ついに仁義なきガジェッツァンが発売されましたね。
ランクは海賊が暴れ回る上チャリチャリ翡翠ドルイドがコントロールを根絶やしにするカオスな環境ですね。ウォリコン最強時代が懐かしい…
私はドッペルギャングスターを進化して6/7を並べたり、新マーロックを加えて息切れしにくくなったアグロマロパラで翡翠ドルを轢き潰したり、アヴィアナ忘却王でドラゴンを並べて気持ちよくなったりしてました。
使ってきたデッキが強化されると嬉しいものですね。
ですが今回晒すのは別のデッキです。ガジェッツァンのカードは一枚しか入っていませんが。これです。
シンプルな効果だからかあまり注目されていませんが、書いてあることおかしくないですかねこれ。2マナの野生の力だって十分強かったのに同じ効果で1マナです。回るとインチキくさい強さになります。
単純に全体バフが4枚詰めるようになったことでバフに依存したミニオンを採用しやすくもなりました。
そこで組んだのが以下になります。
核は目新しくもないエッグトークンドルイドですね。ただ、私は前も似たようなデッキを使ったことがありますが、蓮華紋のおかげで別物の強さになったと思っています。
卵がほとんど腐らなくなったので安定感が段違いです。(あくまで昔に比べてというだけで事故る時は事故りますが)
ドローソースに苦痛の侍祭を採用していますが、手軽にまとめて卵を孵化できる蓮華紋のおかげでこいつに野生の紋章を消費しても問題なくなりました。
野生の紋章ですが海賊に挑発が刺さって非常に頼もしいですね。卵に挑発とバフは相性最高なのでもともと使えるカードでしたが、今は特に輝いています。
魔力異常体は好みですかね。回れば強いですけどあっさり武器で除去られてしまうことも多々あるのでもう少し試行錯誤したいところです。
まだランク10〜8あたりでちょこっと回しただけなのでいくらでも改善の余地はあります。
海賊と翡翠に対してはどちらも五分くらいで戦えていると思います。事故ったら終わりですが何に対してもある程度戦えるので回していて楽しいです。
相性ジャンケンゲーが嫌だという人は是非試してみてください。
余談ですが、このデッキもともとはパワー上納を生かせるデッキを組もうとしてたんですよね。
序盤ミニオンを並べつつも加速したマナを無駄にしないよう重いカードも採用しないといけないので非常に難しいカードです。しばらく試行錯誤していましたがあまりの事故の多さに辟易し、とどめにある仕様を知るに当たって使うのを断念しました。
なんとこれ、過剰マナ*1がもらえないのです。1枚も。
性質上2枚目が確実に腐るこのカードにおいてこれは致命的ってレベルじゃないです。カードパワーも明らかに野生の繁茂に劣るのになぜ……
面白いカードではあると思うので、今後仕様が変わることを祈っています。
構築に自信のある方は是非使ってあげてください。決まれば超気持ちいいです。決まれば。
過剰マナもらえるようになりました。再挑戦してみましたが2枚目が腐らないというだけでかなりマシになりましたね。
普通にアグロやったほうが強いのですが、先生を絡めてうまく回れば5マナくらい加速できたりもするのでファンデッキとして組む価値はあると思います。
もう少し試行錯誤してみます。
*1:野生の繁茂等のマナ加速スペルを10マナ溜まっている時に使うともらえるワンドローカード
Unity初挑戦
ゲーム作りたいと言い始めて何年経ったか忘れましたが今更ゲーム作りに挑戦していこうと思います。
使うのは最も敷居が低そうなUnity。cocos2dxは去年ちょっとやって全然コードの意味が理解できず挫折してしまったので。
そうと決まればさっそくチュートリアルをやっていきます。Unity界のHello Worldであろう玉転しチュートリアルから挑戦しました。
このチュートリアル素晴らしいですね。私みたいな素人でも理解できる簡単なコードしか書いてないのに、これ応用するだけでもう色々できそうで夢が広がります。
実はひよこ本も買っていたのですが、本格的にコードを書き始めるまでが長いのでこんなに覚えること多いのか〜とげんなりして全然手をつけていませんでした。
さっさとこっちをやっとけばよかった!
で、出来上がったのが以下。
そのままではつまらないので一定時間で床を回転させたりタイマーを追加したりしました。タイマーはググったらすぐ実装方法が出てきたのでコピペで。
しかし、床についてはただ回転させるだけでは肝心のボールは空中浮遊しているかのように床の動きの影響を全く受けませんでした。
グーグル先生に聞いてみると、床に触れている間だけボールを床の子オブジェクトにする手法が出てきたのでそれを取り入れました。
でもこれ対処療法のような気がしてならない…… 摩擦の設定とか試してみてもうまくいかなかったんですが、多分やり方がよくなかったんでしょう。そのうちもっと正しい方法を探したいです。
で、せっかくだから作ったものは公開したいということで以下を参考にWebGLで書き出してみました。
【Unityメモ】WebGLでビルドしてブログに載せる - Bshiki
しかし、GoogleDriveは最近ホスティングサービスを終了したとのことで上記のページの通りにやってもうまくいきませんでした。
Dropboxも試しましたがこちらも同様にサービス終了済み。タイミング悪すぎないですかね…
で、以下のページでgithubならなんとかなるという情報を見つけました。
Git初心者でも大丈夫!完全無料でGithub PagesにWebページを公開する方法 | 株式会社LIG
よく見るとUnityのチュートリアルもgithub上で公開されてますね。
githubは仕事でちょこっと触ったことあったので、上のページの通りに適当に秘密鍵を作ってブラウザ上から登録してターミナルからadd、commit、pushとやるといい感じにリポジトリに書き出したファイルを追加できました。
結果がこれ↓
Unity WebGL Player | Roll-a-Ball
※PCでリンクを踏むと勝手にゲームが始まります。バッテリー食うらしいので注意。
十字キーでボールを転がしてカプセルを全部集めたらクリア。
タイマーが見切れちゃってますがちゃんと動きました!
Unity本当にすごい。こんな手軽に公開できるとモチベも上がりますね。
これはまだゲームと呼べるものではないですが、これからもうちょっとちゃんとしたものを作って晒していきたいです。
目指せ週一クソゲー作成。
上のやつも一応できるだけ速くカプセルを集めようとするとそれなりに難しいので、暇な人は遊んでやってください。
異端審問官マロパラ
なんか最近妙にアクセス増えてると思ったら下のハースストーンとシャドウバースの比較記事の検索順位が結構上がってるみたいです。
一時はハースストーン、シャドウバースで検索したらトップに出てました。
全然更新してないのになんでだろ…… あからさまに対立を煽るタイトルが目を引いたのだろうか。
なんにせよハースストーンの記事でアクセスきてるのに他の記事がクトゥーンシャーマンのみじゃ寂しいのでお気に入りを晒していこうと思います。
ガジェッツァンの評価は他にいっぱいやってる人いるだろうしいいや。どうせ私には使いもせず強さなんてわからないので。
というわけでマロパラ(鯛罪抜き)です。ものすごく今更感あるデッキですが。
序盤からバンバン展開して盤面をとって殴りきる単純明快な古き良きマーロックデッキです。
バイルフィンの異端審問官がキーカードですね。
この子誰も使ってるとこ見ないですが相当に強いです。
マーロックの1/1/3というだけで優秀ですし、ヒロパがマーロックシナジーを得られる心強さは使ってみないとわからないですね。
とはいえ普通にヒロパを撃つのがテンポロスなのは変わらないので、真価を発揮するのは激励持ちと組んだ時です。雄叫びでヒロパがリセットされるので激励を1ターンに2回発動させたりもできます。
マーロック騎士はもちろん採用なのですが、このデッキでは追加の激励枠としてムクラの勇者を採用しています。横展開するデッキなので相性は最高です。
ギミックとしてダークシャイアの管理官も採用してます。ヘルス1が多いので自然に入りますね。
というかこいつの情報が出た時アグロマロパラが流行りそうって散々言われてたきがするんですが全然出てきませんでしたね…… この子もハマれば強いんですが。
マーロックとムクラが揃っているので息切れ防止にはキュレーターを採用しました。アグレッシブなデッキなのでドラゴン枠にはドラゴニットクラッシャーを採用しています。
ただこいつは特段相性がいいというほどでもないのでもっといいドラゴンが実装されたら入れ替えですね。キュレーターにこだわらず恩寵やカルトマスターでも普通に戦えます。(旧神環境ではそれでランク3まではいきました)
このデッキの楽しいところは回ればほぼ一方的に蹂躙できるところですね。
管理官やマロ騎士、戦隊長、祝福がかかったミニオンなどこのデッキには放置できないミニオンが非常に多いです。
よって一度盤面をとってしまうと相手は後手後手になってでも必死に除去に回らなければならなくなります。相手の除去が尽きて困っている様子を眺めるのはなかなか気分がいいです。
逆に先に盤面取られると勝ち目ないです。諦めて爆発しましょう。
激励勢はあと数ヶ月の命です。
バイルフィンの能力は激励あってのものだと思いますので、持っている人は是非今のうちに使ってあげてください。
2016/12/7 追記
仁義なきガジェッツァンが発売されグリムスケイルのダチ公、ブロウギル・スナイパー、飛刀手流忍者・六丸が戦力に加わりました。
タイニーフィン、ブルーギル、ジャスティス剣はリストラです。
デッキとしては確実に強くなったのですが、海賊を相手にするとまず勝ち目がないのであまり回せていません…
デッキのコンセプトに逆らってまでメタカードを入れるのは好きではないので、海賊がメタられて減るまでお休みです。ただドラプリも辛いんだよなあ……
昔のクソコードを晒してみる
昔のファイルを整理してたら卒論の時に使った200行程度のperlのソースが2つほど出てきました。
何の気なしに開いてみましたが、これがもう目を背けたくなるほどに酷い。
今でもまともなコードなんて書けませんが、それでもこれが本当に2年前の私かと思うほどに酷い。
高校時代に書いた小説のプロットを発掘した時の苦しみを思い出しました。
私は卒論に関して12月下旬まで何にもせず(一文字も書いてないとかじゃなく研究自体何もしてない)、そこから2週間足らずで2万字でっち上げるという救いようのないゴミでした。
授業以外何の知識もないバカが締め切りに追われてネットからのコピペを繰り返し、とりあえず動けばそれでよしとするというクソコード降臨の条件としては役満みたいなとこあったので、こうなるのも当然かもしれません。
どうもブラウザの履歴ファイルを読み込んで解析もどきみたいなことをしたかったらしいですね。全く理解できないけど。
我ながら酷すぎて戦慄したので戒めも兼ねてクソコードを記録しておこうと思います。
------------------------------以下吐き気を催すクソコード--------------------------------
驚きの9行目からそびえ立つクソ
##use Encode;##文字化け対策→なぜか治ったのでコメントアウト
"なぜか治ったので"
"なぜか治ったので"
"なぜか治ったので"
##以下確認のための出力
=pod
-----適当にprintするクソコード-----
=cut
消せよ
これあと3回くらい出てきて頭痛くなりました。
※=pod ~ =cutはperlにおける複数行コメント
for(my $a = 0; $a <= $g; $a++){ ##$gはGroupの数
じゃあ$GroupNumとでも書けや!!!
と思ったらこんなの序の口でした。
for(my $b = 0; $b < @{'Group'.$a}+$count; $b++){ ##検証する配列名のカウンタ
DEC: for(my $c = 0; $c < @{'Query'.$b}; $c++){ ##検証する配列の要素数のカウンタ
for(my $d = 0; $d < @{'Group'.$a}+$count; $d++){ ##比較する配列名のカウンタ。$countを足しているのはGroupの要素が削除された時要素数が減るため
for($e = 0; $e < @{'Query'.$d}; $e++){ ##比較する配列の要素数のカウンタ
はい。
ちなみにこのループの中はこんな感じのがいっぱい
##print $b," ",$c," ",${'Query'.$b}[$c],"\t",$d," ",$e," ",${'Query'.$d}[$e],"\n";##デバッグ用出力
これで出力された文字列を見て私は何を読み取っていたのだろう。
@hoge = split(/\s| |\t/,$line);
$num = substr($hoge[0],-3,2);
$ev = substr($hoge[1],3,1);
$Time_array[$count] = $hoge[2];
まさかのhoge先輩登場。もちろんコメントはない。
Time_arrayとかいう意味ありそうで何も言ってない変数名が神に見えてくる。
for(my $a = 0; $a < @Dif_array; $a++){
$tt = $tt + $Dif_array[$a];
}
for(my $a = 0; $a < @Dif2_array; $a++){
$tt2 = $tt2 + $Dif2_array[$a];
print $Dif2_array[$a],"\n";
}
$t_av = $tt/@Dif_array;
$ct_av = $tt2/@Dif2_array;for(my $a = 1; $a < @Dif_array; $a++){
$w = $t_av - $Dif_array[$a];
$w = $w * $w;
$b = $b + $w;
}
for(my $a = 1; $a < @Dif2_array; $a++){
$w2 = $ct_av - $Dif2_array[$a];
$w2 = $w2 * $w2;
$b2 = $b2 + $w2;
}$st = sqrt($b/(@Dif_array));
$st2 = sqrt($b2/@Dif2_array);
これ何やってるかわかりますか。
######時間の差の平均と標準偏差の計算###########
だそうです。そうなんだ、すごいね。
ちなみにこれサブルーチンとかいう小賢しいものではありません。
連綿と続く一枚岩のメイン処理の一部です。男らしいですね。
print OUT5 "\n","<コメント>(もし何か気づいたことや感想等あればこの下にお願いします)";
死ね。以上。
あ、ちなみにこのコードは卒論に参考資料としてほぼ全て載っけました。字数稼げるからね、仕方ないね。
なんていうかこう、書いててどっと疲れました。
勉強しよう……
続・ハースストーン vs シャドウバース
http://sukiaraba.hatenablog.jp/entry/2016/09/22/200010
上の記事でハースストーンとシャドウバースの比較をしたのですが、読み返すと言いたいことがあまり書けてない気がしたので追記です。
これらのゲーム性について、私の主観をはっきりさせておきます。内容は前に書いたこととかなり重複してますがご容赦ください。
まず、ハースストーンには高いランダム性という特徴があります。(蠅の王とか見てるとそのうち大差なくなるんじゃないかとも思いますが)
ランダム要素はデッキ差や実力差が勝率に与える影響を薄めます。しかし、ゲームの展開に変化を与えるのでより柔軟な判断が求められるようにもなります。
ツキ不ヅキだけで勝敗が決まってしまう展開も起こるため強いからといって報われるとは限らないという欠点はありますが、ランダム性が強い方が考えること自体は多くなります。
一方、シャドウバースはデッキが40枚であるため引きにばらつきが出やすいという特徴があります。
おそらくはランダム要素を薄めることにより展開が単調になることを嫌ったのだと思います。結局TCGを面白くするためにはある程度の運要素は必要ということですね。
しかし引きによる展開の変化は限定的であり、HSのランダム要素ほど劇的な展開を引き起こすわけではありません。
それでいて序盤に低コストを引けない、中盤までに特定のキーカードを引けない、逆に重ねすぎるなどの事故はヒーローパワーで余ったコストを活用できないことも相まって致命傷になります。
人によると思いますが、私は事故による負けはランダム効果で裏目を引いて負けるよりもストレスが溜まります。
よってこの辺りの調整はハースストーンが優っていると思います。
次は進化についてです。
シャドウバースの進化システムがゲームをより奥深くしているのは間違いないです。
対アグロでは毎ターン進化でフォロワーを処理して被ダメージを抑えるのが最善になってしまうので、ロイヤル全盛期しかやっていない人は大したことのないシステムだと思っているかもしれません。
が、ミッドレンジ以降の対戦では一方を取れない状況でも進化してフォロワーを処理すか否か、有利盤面で顔を殴るために進化を切るか否か等の決断で勝敗が分かれることは多いです。
上手い人のプレイを見ると、稀にフォロワーも顔も殴れないのに特定の除去を警戒して進化を切る場面も見ます。これは私には到底できないプレイで、はっきり実力差を感じますね。
ハースストーンにはヒーローパワーがありますが、あれは(ウォーロックを除いて)効果よりもはるかに高いマナを必要とするのでテンポデッキでは極力使いたくない存在です。
もちろんハンドロックなどのデッキではキーになりますが、ゲーム全体に与える影響としては進化よりも薄いです。
この影響でミッドレンジの戦いはシャドウバースの方が楽しいと感じます。
しかし、シャドウバースはハースストーンよりもゲームのテンポを優先するゲームデザインを選択しました。(冒頭のリンク参照)
スマホメインのゲームだからそうしたのでしょうし、その恩恵は確かに感じます。
しかし、10ターン前後で決着が着く上デッキ枚数40枚となると、相手が使用したカードを覚えておき相手の手札を予測する意味合いは薄れます。
もちろん上手い人はちゃんと考えていると思いますが、ハースストーンにおけるコントロール対決ほどその思考は勝利に直結していないと思います。
ハースストーンにおけるコントロール対決では自分のこの除去は相手のこのカードに使用する等、相手のデッキタイプが判明した時点で試合終了までの長期的なプランが立てられます。理由は試合終了までにお互いほぼ全てのデッキのカードを引き切るからです。
よってコントロール勝負におけるゲーム性はハースストーンが勝ると思います。
色々書いても結局結論は前と変わらないんですけどね。どっちも楽しいからどっちもやろうよ、です。
3項目書いて2項目でハースストーンを推してますが、進化の存在がすごく大きいのでやっぱり私にはどっちが上とは決められません。
あとアグロは私はあんま使わないのでわからないです。どっちでやっても大差ないんじゃないかな。
主観全開なので色々反論あると思いますがそういうのは是非コメント下さい!
ブログにコメント全くないのはそろそろ寂しい……
コメントいただけました。 ありがとうございます!
しかしはてなブログってコメント返信機能ないんですね。コメント回りのマナーとか調べなきゃ…
ペタルフェンサー薔薇エルフ
シャドバのデッキ紹介です。
今回はペタルフェンサーをメインに据えたデッキになります。
ペタルフェンサーだけでは引けなかったり勝ち切れなかったりすることがあるのでローズクイーンも採用しています。今はあまり見ませんが陽光ビショップなどへの勝ち筋としては強力ですね。
スタンダードのみの頃から組んでいましたが、ダークネスエボルヴの登場で大きく強化されました。主にシンシアのおかげで。
レシピは以下になります。
スタッツが低くなく、かつフェアリーを手札に加えられるカードをメインに採用しています。
理想の流れはフェアリーサークルからフェアリーブリンガーで0コスフェアリーを生成し、5、6ターン目に3体以上のペタルフェンサーを展開していくことですね。
シンシア進化でペタルを補充&追い討ちと行ければ最高です。
消耗した後はフェアリープリンセスでハンドを補充、ローズクイーンでとどめまで決まれば最高に気持ちよくなれます。
この構築はまだ安定しているわけではなく、以前はリザの枠に翅の輝きを入れていたりもしました。
ただ、このデッキは序盤事故って2マナを出せなかったりするとテンポを失うだけでなく、手札がだぶついてフェアリープリンセスが使いにくくなり非常に動きが重くなります。
よって今は多少持久力を落としてでも序盤を安定させる構築になっています。今後またいじるかもしれません。
エルフバードは採用してみて印象が大きく変わったカードですね。
他のフォロワーが進化した時にフェアリーを手札に加える効果ですが、想像していたより発動の機会は多かったです。
しかもヘイトを稼ぎやすく相手が進化して処理してくれたりもするので頼もしいカードです。
フェアリープリンセスは弱いと評判のレジェンドですが、このデッキではメインエンジンになります。この子がいなければ二の矢であるローズクイーンの弾はとても供給できません。
場合によっては7、8枚フェアリーをかき集めてくれるこのカードが弱いなんてことはないと思うんですがね…
で、やっぱり問題はこの子。
壊れてるでしょこれ…
完全にエルフ界のセージコマンダーです。進化時のフェアリーはもちろんペタルフェンサーに変身してくれます。
ペタルフェンサーと効果が抜群にかみ合っているのは言うまでもないのですが、コスト6というのもペタルフェンサーが並んだ後に使うのにちょうど良いのです。
ちょっと相手が事故っていればペタルフェンサーも薔薇も引けなくてもシンシアビートで勝てちゃったりします。
まあ嫌われてもしょうがない性能ですね…
それにしてもかわいい。今まで私はウルズ推しでしたが完全にこの子に乗り換えです。セリフも凛々しくて最高。
今私はA1ですがまあ5割くらいは勝ててるんじゃないかと思います。
ハイレベルな環境では通用しないかもしれませんが、回ると楽しいので一度試してみて欲しいです。
しかしホーリーメイジビショップはあんま強くならなかったなあ…