ぐるのなんか

多分ゲームのプレイ日記とか

備忘録

すぐ忘れちゃうのでUnity用の備忘録

  • プレハブのインスタンスを作りつつ別のオブジェクトの子にするやつ
public static Object Instantiate(Object original, Transform parent);

もしくは

public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

インスタンス作ったオブジェクトへの参照を変数に取っといて後からSetParent()してもいいけど、こっちのがわかりやすくて好き。

別に問題ないならどっちでもいいとは思うけど、親を指定せずにInstantiate()すると一旦オブジェクトがルートに置かれるから、ルートにあるか否かで振る舞いが変わるようなコンポーネント付いてるオブジェクトは、これのせいで変な動きしたりする、かも(Canvasとか)。

「Unity オブジェクト 子」とかで検索して出てくる解説サイトとかだとparentをどうこうしてっつってるのばっかなのでリファレンス見に行って書いた。



  • Canvas作ったらプレハブにする

これ困ってんの僕だけだと思うけど、大きさ弄ったはずのCanvasオブジェクトが、エディタ上でPlayとか実機に入れて動かすと、表示された瞬間大きさがギャバァァァァンと変わって使い物にならなくなったりした。

状況としてはCanvasの子にCanvas作って、画面内にいろんな画面表示させたりしたかったんだけど、大きさが勝手に変わっちゃってまともに画面を見れなくなった。

色々試してみた結果、CanvasコンポーネントのRenderModeがScreenSpace - Overlayとかだとぐわーっとなるようで、WorldSpaceにすると上手く行くみたい。ただこのコンポーネントはルートにないと弄れないので、プレハブ化したものを弄るなりしなきゃならない。

まぁOverlayって言葉の感じからすると正しい動作なのかもしれないけど、結構前のバージョンだとそんな動きしなかったからすごく悩まされた。その分忘れにくいとは思うけど一応。

Unityやってる

※せっかく勉強してるんだし、なんかそれっぽい記事書いて「がんばってるんやで」アッピルしたいが為にこの記事は書かれました。
※僕はちゃんと勉強してUnity、C#を触ってる訳ではないので色んなとこに根本的な誤解がある可能性が大です。優しく教えて下さい。


最近またド素人なりにぼちぼちUnity弄ってるんだけど、なんか色々めんどくさいなぁと思うことがしばしば。特に親子関係とか。

親┬子
 ├子
 ├子
 └子

例えばこんな感じのオブジェクト作って、子オブジェクト全てに以下の様なスクリプトがあるとする。

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
  public bool isOpen = false;
  void onClick(){
    if(isOpen == false){
      isOpen = true;
    }else if(isOpen == true){
      isOpen = false;
    }
  }
}

要するにクリックしたらオープンしてるかどうかを切り替えたいと。
これにプラスして、isOpenがtrueなオブジェクトをひとつだけにしたい時にどうしよっかなと。今のところは、

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
  public bool isOpen = false;
  void onClick(){
    if(isOpen == false){
      Transform _parent = gameObject.transform.parent.gameObject;
      for(int i = 0;i < _parent.childCount;i++){
        GameObject childObj = _parent.GetChild(i).gameObject;
        if(childObj.GetComponent<ExampleClass>().isOpen == true){
          childObj.GetComponent<ExampleClass>().isOpen = false;
          break;
        }
      }
      isOpen = true;
    }else if(isOpen == true){
      isOpen = false;
    }
  }
}

こんな感じで、一旦親の視点に立ってからGetChild()とforループを使って子の状態を一個一個確認してるんだけど、見ててわかりにくい。コメント書くにしてもごちゃっとなる。もっと簡単な方法はないか、と。(実際のコードでは長ったらしいところは適度に変数に格納したりしてます)

今考えてるのは、

  • 親から見たそれぞれの子のインデックスをSendMessage()の引数なりで子のスクリプトに渡してやる
  • 子の方にメッセージを受け取るメソッドと、インデックスを入れる変数(仮にA)を用意
  • ついでに親のスクリプトに「isOpenがtrueになっている子のインデックス」を入れる変数(仮にB)を用意

という感じにして、後はisOpenをtrueにしたい時にBを確認しに行って、nullだったら自分のAを登録させて、そうじゃなかったら~.GetChild(B).~という形でisOpenいじりに行って、という流れ。
これなら「あぁインデックス渡してるんだなぁ」「インデックス使ってアクセスしてんだなぁ」ってのが読んでてわかりそ…う…?forループ回すのも最初のインデックス渡す時だけだし余計な処理しなくて済むかなーとか思う。まぁ書いて動かしてみなきゃわからないか。
そもそもTransformに「親から見た自分のTransformのインデックス」が用意されてれば七面倒なことしなくて済むんだけどなぁ。知らないだけであるかもしれないけど。

では。

情報処理技術者試験終わりましたね

いやはや 受験されてた方お疲れ様です。見てる人におるか知らんけどな。

自分は応用情報受けてたんだけど、過去問やってる中で27年の問題がクッソ簡単だったので、今年は難化してるやろなーと思ったら案の定でした。まぁ形式変わったのは去年からっぽいし大方、記述の量増えてるから一問一問楽にしてみるかなー→アカンやり過ぎたわ って感じなんだろうけど。
点数気になって午前問題は答え合わせしたけど、午後問題は何もしてない。だって中間点どんくらいもらえるかもわかんないしね、気にしてもしょうがないよね。そもそもIPAの解答に納得いかないこともしばしばあったんで?やってもストレス溜めるだけかもしれないですし?まぁまぁ。

結果発表は6月まで待たなきゃならんのが生殺しですねぇ。殺すならさっさと殺してほしいんですけど。完全に通ってるやろこれみたいな午前でなんかやらかしてるかも知れないし。結果発表はよ。

おわり

ひと段落ついた

リアルのごたごたが片付いて余裕ができたので久しぶりに。と言ってもIPAのアレが目前に迫ってるけども。

まぁなんというか色々あって「Twitterでクダ巻くのはともかくブログ書くのはなぁ」みたいな理由で二ヶ月近く放置してました。まぁどうせ見てる人そんなおらんでしょ。

近況報告と言うか最近やってるゲームはARKっていうマイクラ的なゲームとFGOです。星4が全く出ないから、空の境界コラボでもらったアサシン式を主戦力にする為にがっつりレベル上げとかしてる。星3もそこそこ使えるようになってきたかな。

ARKってのは基本マイクラみたいな感じなんだけど、恐竜を殺したり恐竜を手懐けたりする要素があるゲームで、アーリーアクセスだからまだ理不尽な感じのとこもあるけど結構楽しい。
恐竜の個別の能力のおかげで生存戦略に幅が出てるって感じかしら。でっかい恐竜なんかは背中に建築も可能だから移動拠点的に使ったり出来るし。
不満点としては、恐竜手懐けるのにめちゃくちゃ時間かかる。基本的には麻酔弾とかで眠らせてその間に餌をあげて懐き度を上げる、って感じなんだけど、気絶値ってのが設定されてて、それが0になると起きちゃう。当然失敗。だから結構長いこと張り付いてなきゃいけなくて、レベルによってはリアル数時間かかる奴もいる。ここをどうにかテクノロジー的なものを開発して自動化できるようにしてほしいかなぁ。恐竜手懐けて使役してってのが醍醐味なのに、そこを相当な暇人しか楽しめないんじゃなぁ。まぁ今後に期待かしら。
あとこのゲーム一人だと結構大変なので、一緒にやってくれる人お待ちしておりますです。なんやかんや言うたけど楽しいぞ。

おわり

SFを読みました

伊藤計劃の『ハーモニー』って本。実は以前SFの話を聞いた時に『虐殺器官』を買ってたんだけど読まずじまいで、結局こないだ寄った紀伊國屋で買ったのを体調不良で持て余した暇を使って読んだ感じ。

ざっと読んだ感じでは、結末はユートピアでもありディストピアでもありーと言った印象。本来良いものとされる「健康」の半強制と、それに絡む「善意」のあり方、あとそれらの目的としての「人類の幸福」の追求が行くとこまで行っちゃった世界の空恐ろしさ、辺りがメインなのかしら。
以前とりっくんさんが話してるとこに割り込んでSFとはなんぞやという話をしてもらった中で、「SFは科学技術の発展した(近)未来を舞台としつつも、その根底では現代社会への批判を行っている(うろ覚え)」みたいなことを教えてもらっていたのでそれを意識しつつ読んでたんだけど、これに関しては最近そういう話題があったので分かりやすかった。
この勧告についてはTwitterの方で「『健康』を錦の御旗にした検閲、言論統制じゃねぇのか」みたいなことを言った覚えがあるけど、物語上ではそういうのがエスカレートして、酒も煙草も(不文律、成文律はともかく)禁止され、カフェインすらも健康に悪いとして禁止する流れになってるという気味の悪さ。しかもそれは形式上は善意からのものというのがタチが悪い。
僕自身煙草を吸うので、善意から「煙草やめなよ」と言われることはよくあるけど、この善意ってのはほんとタチが悪い。相手に悪気がないから無碍には出来ない。煙草が健康に悪いのは事実だし。でもそれって一方で、健康に悪いなんてこと先刻承知の上で敢えて煙草を吸ってる僕の意志というか欲求というか、そういったものを丸っと無視しているというか。健康に悪いことなら無碍にしていいのか?というか。
まぁ現実問題としては煙草一つでそんな大それた話に持ってくのは頭おかしいとかニコチン中毒の成れの果てとか思われて終わりだけど、そういうのの拡大版が『ハーモニー』の世界観だった。
健康に悪いものは禁止、健康であることはステータス、健康な人間として社会の有用なリソースとして機能することが社会正義。
そういった価値観を善意で押し付けてくる社会への閉塞感とかは、現代社会でもある程度通じるとこはあるのかなーと。そしてそういった「善意」と動物としての欲求との葛藤を解消し、真に人類を幸福足らしめる手段が意志の消失っていう、そんなディストピアもそうそうないだろうという感じの結末。

当然この流れで「だから煙草吸うのも俺の自由意志で幸福やねん!ほっとけ!」という訳ではなくて、正しいこと、正しいとされていること、或いは善意、そういったものを掲げて邁進することが果たして本当に良いことなのか、ちょくちょく立ち止まって自分の歩んできた道程の中で誰かを不幸せにしてないか、とかそういったことを気にかけることが必要なんじゃないかな、と。今思いついた極端な例だと宗教戦争とかね。よく知らんけど。


実のところ、「これはSFだ」と認識して読んだ作品はこれが初めてで、何せ僕には文学的な教養とかが欠けてるのでどう読み解いたら正解なのかがよく分からない。例えるなら、精巧な作りの便利な機械があって、それの使い方は知ってるけど仕組みは分からないというか、それを部品レベルで構成を検証するのに必要な分解用のツールを持ってないという感じ。字面だけ追って「わー面白い話だなー」ってのは出来るけど、そっから踏み込んだ考証なんかは望むべくもない。のでまぁ、詳しい人とかいたらぬるっと見守っててほしい。
あ、WatchMeに関しては「そんな重要なシステムに決済だの個人認証だのをゴテゴテと連結するな」としか思えなかったです。サマーウォーズのOzとかも散々突っ込まれてたやつ。物語上の都合ってやつでしょうけど。

おわり

へったくそ

なのにFPS買っちゃうんだよね。困ったもんだ。

 
こないだのSteamセールでなんとなくレッドオーケストラ2を買って、まぁM1ガーランド担いでガンホーしてみたんだけど、いやもう死にまくる死にまくる。キルレ0.1行ってないんじゃないかな。
発売が何年も前のゲームでベテランばっかってのも大きいんだろうけど、まともなpingのサーバはほぼリアリスティックモード?とかいうのしか無くて、何もわからないままデスだけ溜まってく。そしてそもそも敵味方の区別が付かないからエイムが間に合っても撃っていいのか迷ってる間にこっちがやられる。日本兵は分かりやすいんだけど。
 
そもそもPCのFPS全般で碌に戦えたことがない。CS版ではMW2でRPD無双したりBF3でM240無双とかしてたんだけどなぁ。コントローラからマウスになっただけでここまで変わるもんかね。そらマウスの方がエイムはし易いけど。
そういや何年か前、「若い子にはもうエイムでは勝てないけど、立ち回りだけでも十分勝てる」っていう人のブログだったかコラムだったかみたいなのを読んだ覚えがあるけど、立ち回りとか全然意識してないな。意識どころかマップ内で迷子になったり。wikiを読もう。
 
LMG無双で思い出したんだけど、FPSでのLMGって単に弾数多いARみたいなもんだよなぁって愚痴ったことがあった。めっちゃ重いのに動きすぎでしょってのもあるんだけど、制圧射撃の意味が殆どねぇよなって。BFでは制圧効果があるけど、それは他の銃種でも同じだし、撃ち続けても相手に頭下げさせられるかは分かんないし。
そもそも多少被弾しても死なない限りは継戦能力に何ら問題無いから、被弾に対する恐怖とかが再現できないのよね。それ忠実に再現したとこでゲームとして面白いのかって言われたらなんとも言えないけど。でもそれがないとLMGの利点ってほんとに弾数多いだけって話になるよね。上手い人は銃撃の中飛び出してスパーン頭撃ちぬいて殺してくるからやんなるね。
 
まぁ悔しくなったら上手くなれって話なんだけど。なんかうまい立ち回りの強化法とかないすかね。

NMMのアレで

しばらく起動すらしてなかったSkyrimをまた最近ちょこちょこ弄ってる。

いつのだったかは忘れたけど、アーキテクチャを大幅に変更?とかで既存のModを一旦解除してアクティベートし直すよ!って通知があったやつ。アレの時に何かミスったのか、起動してもドゥン...ドゥドゥン...の辺りでクライアント落ちるようになって、何が原因なのか探るのにも時間がかかり過ぎるので放置。
で、最近Fo4ばっかだったしなんか違うのやろうやってんで復旧始めた。結果的に言えば直ったんだけど、未だに原因分からず。やったことと言えば
  1. Mod全部外す
  2. ヴァニラでの起動確認
  3. 文字が豆腐になってたのでbsaファイルの上書き*1
  4. 直ったのでバージョン古いModを更新しつつ再適用
ぐらい。幾つかNexusから消えてるModもあって、手動で落としてないのが殆どだったから完全に元通りとはいかなかったし、CKで弄ったとこが再現できなかったりとかはあったけど。
キャラクリもおかしくなってて、半分諦めてやり直してたら、途中ECE入れ直した時に元に戻ってホゲーッてなったのが今日。
 
まぁ概ね前の通りになったからいいんだけど、文字が豆腐になってたのだけは解せない・・・本体の更新とかあったのかな。今更それはないと思うんだけど・・・。
まぁSkyrimもFONVみたいに散々うろついてる割に全くストーリー進めてないのでぼちぼちやってこうと思ってる。今帝国とストームクロークが停戦協定結んだ辺り。
 
おわり。

*1:英語音声日本語字幕でやってた