ぐーるらいふ

しがないリーマンの記録。遊びのunityのメモ帳にしたい。

9月は忙しいけど、休日多くてなんか楽しい

なんかやりたいけど忙殺されておる!
休日多くてunityでちょいちょいミニプチゲーム作ったりしてます。
記事に出来るほど見識溜まってないけど…。

9月は会社的には別れの季節でもあって、
8月のボーナス支給に合わせて辞めた人が多い。
よってその作業が回ってくるのだ。

立つ鳥跡を濁さずと言うけど、後を濁しまくって辞めていく人も中には居る。
何にも引き継ぎしてなかったりしてね…ヒドイぜーツライぜー。

そんな中でも癒やしてくれるのは深夜アニメだったりする。
f:id:ghoul_life:20170920001809p:plain
ああ、明日も頑張るぞい。

暑い。夏はもう終わったはずなのに

まだ終わってなかったのか。
9月ももう半ば。あっという間だ。

もう少しunityについてなんかやりたいけど何がいいだろうか。
苦手なパーティクルでも勉強してみようか。

f:id:ghoul_life:20170915001903p:plain

【Unity】 メッシュをカットした後のcappingを作ろう

以前

以前メッシュカッターについて記事にした事があった。

ghoul-life.hatenablog.com

この時はなるべく簡潔な話にしたく、オブジェクトを切った後の「蓋」については
特に触れなかったのだが、ちょっとやる機会があったので、書いておこうと思う。

メッシュ断面図

メッシュカッターはオブジェクトをポリゴン単位で考え、一つずつ丁寧に処理していく。
カットラインと交点がある場合は、新たに頂点が2つ作られる。
四角形だった場合は以下のような断面になる。
図だと少し分かりにくいが、二つに分かれたオブジェクト両方ともこのようになる。

f:id:ghoul_life:20170913001850p:plain

蓋の考え方

そしてここに蓋を作るのだが、蓋をどう作るか?を考える。
四角形ならどうにでもなりそうだが、円形や人型のオブジェクトだったらどうする?

f:id:ghoul_life:20170913001905p:plain

そういった事なども簡潔に解決する方法として、「中心点を作る」という方法がある。
この2点と中心点を繋いでいく、にすれば簡単な計算で作れそうだ。

f:id:ghoul_life:20170913001920p:plain

実装

まずは交点となった新たに作られた点を別リストとして取っておく

// どちらにもカウントがあるということはplateと交差しているポリゴンということ
if (group1PosList.Count > 0 && group2PosList.Count > 0)
{
    CalcCrossPoint(plane, group1PosList, group2PosList); // 2.planeとの交点を求める

    // 3.両方のグループともに交点を入れる
    group1PosList.Add(_pos1);
    group1PosList.Add(_pos2);

    // capping用の表
    group1CapPosList.Add(_pos1);
    group1CapPosList.Add(_pos2);


    group2PosList.Add(_pos1);
    group2PosList.Add(_pos2);

    // capping用裏側
    group2CapPosList.Add(_pos1);
    group2CapPosList.Add(_pos2);
}

中心点を求める方法はそこまで難しくない。
頂点をすべて足して、頂点数で割ればいい。

// 中心点を求める
Vector3 center = Vector3.zero;
foreach(var v in cappingPosList)
{
    center += v;
}
center = center / cappingPosList.Count;


そして交点となる2点と中心点を繋いでいく…のだけど、
カッターとなるplateのどちら側にあるかによって蓋の向きが変わる。
この事に注意して、indexを割り振っていく。

var idx0 = centerIdx;
var idx1 = i;
var idx2 = i + 1;

var cross = Vector3.Cross(capPosList[idx2] - capPosList[idx0], capPosList[idx1] - capPosList[idx0]);
var inner = Vector3.Dot(cross, plane.normal);

// plateに対してどちら側の蓋かによって計算が変わるのに注意
if (isFront)
{
    if(inner < 0)
    {
        idx0 = idx2;
        idx2 = centerIdx;
    }
}
else
{
    if (inner > 0)
    {
        idx0 = idx2;
        idx2 = centerIdx;
    }
}

完成

後は全ての頂点とindexをまとめて、
オブジェクトを作れば完成だ。

f:id:ghoul_life:20170912233913g:plain

f:id:ghoul_life:20170913143608g:plain

f:id:ghoul_life:20170913143650g:plain

複雑なオブジェクトでもちゃんと蓋が出来ている。
全体をまとめたプロジェクトごとgithubに公開している。
他にもMaterialを付与したり、Rigidbodyを付与したりという遊びも可能だ。
参考にしてほしい。

github.com

【Unity】第5回 unity1week 「フロー」の開発

unity1week襲来

もう大分時間が経ってしまったけど、書く。

naichiさんのunityroomで定期的に開催されているunityの一週間でゲームを作るイベント

f:id:ghoul_life:20170905004123p:plain
https://unityroom.com/unity1weeks


もう5回目にもなる。
unityを始めてまだまだ日が浅いけど、なんか色々パッと出来るようになってきた。
(と思いたい)

見知らぬ、お題

毎回あるお題が出て基本的にそれに沿った形で開発を行う。
今回のお題は「フロー」。

フローとか言われると仕事感が凄いというか、
エスカレーションフローを思い出すというか…。
とにかくイメージが悪い。
(勝手に浮かんでくる自分が悪い。仕事柄しょうがないのだけど…。)

鳴りすぎる、Slack

お題見てからどうしよっかなーと頭抱えたかったのだが、
そんな事とは関係なくSlackが鳴り止まなかった。

どうも8月はなんか忙しい。
毎年4月〜5月は桜の季節だからか全体的に緩いムードなのだが、
梅雨のどんよりした季節から加速していき、夏場にピークを迎える傾向にある。

というわけで結局技術的な追求なども特に出来ず、
やれる事をやる事に。

イデア、風呂の向こうに

フロー…フロー…とりあえず風呂入って考えよう。
といった具合で特にアイデアが出ないまま時間が過ぎていく…。
流れるように水の上を滑る!
みたいなものを作ってみたが、なんというか今一つ面白くならず…。
マリオ64の滑り台パチモンみたいなもんになってしまった。

これにコインでも付けて一番下まで滑ろう!なんて適当案が最初に思いついたのだが、
どうしよっかなぁ、このまま詰めるしか無いのか…と
イデアが降りてくるのを待ったが、やっぱりSlackが鳴り止まない。

ベッドダイバー

もう飛んだ。

朝Slackで起こされる ->
家からリモートで暫定対応して、会社へ ->
午前中MTG ->
午後客先など ->
日付変わるぐらいに帰宅 ->
就寝

というループが続き、気がつけば金曜日。
冷や汗しか出ない。

静止した頭の中で

テキトーにBlenderモデリングする!

  • >豆腐
  • >お箸

テキトーにFractureして壊してみる!

  • >予めオブジェクト分けといて、死んだらRigidbody.AddForceでぶっ飛ばす

苦手なAnimationに挑戦!
→何度か使ってるんだけど、毎回戸惑う!

後は割と過去の遺産を掘り起こしてUIやらなんやらそのまま使いました。

死に至るBlender、そして

豆腐とお箸はこれで作りました。
すげー苦手なBlenderを頑張ってみる。
後で書く

FractureとModel

予め壊れたものにしておいて、AddForceでぶっ飛ばす…だけ

f:id:ghoul_life:20170905003447p:plain

メッシュカッターからcapping、そしてvolonoi法(もどき)について
まとめきれないいいい。

Anchor

unityにはanchorという考えを使いたい場合、ちょっとだけ工夫が必要だ。
色々手はあるが、親子構造にして、親オブジェクトをanchorの代わりにするのが単純だ。
お箸ではこれを使ってる

せめて、ゲームらしく

(これが書きたかっただけ)
出来上がったのがこれ。

最初はすげー難しくて自分で作ってクリア出来ないというひどい出来w
動く床は失敗だった…。
うまく追従してくれなくて、どうしようかなと一旦そのままにしている。

こういうアクションゲーム作ったことある人はunity使いに多いと思うが、
基本的にコード記述量が少ない。
基本誤魔化し誤魔化しでなんとか形にしておいた…程度。

命の選択を

f:id:ghoul_life:20170905003402j:plain

ラクガキしてる方が多くないかw
キーボードよりペンタブ触ってる方が長かったんじゃないかw
違うよこれはただの現実逃避だよ!

とりあえず夏休みを取りたい。
この炎上案件さえ終わればきっと取れる。
そう信じたい。

お疲れ様でした #unity1week

提出完了しました。

最後までアイデアは出なかった!
というめちゃくちゃな状態だけど、何とか乗り切った…。

題名は

豆腐が皿に乗るまでのフロー

という適当な…。

とりあえずみなさんお疲れ様でした!
ちゃんとした技術系のは後日書こう…。
f:id:ghoul_life:20170827184854p:plain

あと2日 #unity1week

ヤバい。
今月、今週はとても忙しく、ほとんど何も出来ず。
明日、明後日でどこまで出来るだろうか…。今日は寝ます。
みんな頑張ってるんだよな、明日徹夜する勢いで自分も頑張ります。
f:id:ghoul_life:20170826025545p:plain

f:id:ghoul_life:20170826025553p:plain

進捗はダメです。

随分間が空いてしまった

ほんとならAIについてでも書きたかった。
8月に入るやいなや、一気に忙しくなりてんやわんやの毎日を過ごしている。

通常の開発業務に加え、
人が抜けたり。
Jenkinsオジサンがひょんな事からぶっ壊れ、手術祭りになったり。
きっついIPものが入ってきて監修に追われたり。
クローズ作業に追われたり。
他の人が夏季休暇に入ってタスクが回ってきたり。
ドラクエやったり。

と、こんな感じ。
もうすぐ第五回、unity1weekも始まりそうだ。
ずっとunity触れていないのだけど、なんとかなるかな…。

f:id:ghoul_life:20170818005110p:plain
(体験版の期限切れたので、ちゃんと買いました。)

my memo