ソースコードとUnityインターハイ

Unityインターハイは

年に一度の、高校生以下のゲーム制作コンテストだ(公式サイト)。作品としての総合力を競うもので、その審査の公平性や説得力は、私もUnity社員として心から誇りに思うところだ。

一方で私は、技術的な観点から作品を見ている。そんな人間もひそやかに存在しているのだ。もちろん審査とは無関係なのだが。

毎年、大会運営のお手伝いとして、作品と共に提出されたソースコードをチェックさせてもらっている。この記事は、私という技術者の視点で、この美しい大会を別の側面から語ったものである。配信される大会を鑑賞する上での味付け、サイドストーリーとして楽しんでいただければ幸いだ。

なお、本来ソースコードは表に出てこないものなので、文章と特定の作品が結びつかないように記述を工夫している点はご了承いただきたい。

事例1: クォータニオン・トリック

ある作品のソースコードを見ていて、こんな記述を見つけた。

var rot = transform.rotation;
go.transform.rotation = new Quaternion(0, 0, rot.z, rot.w);

おもしろい、こんなやり方があったか。クォータニオンの i, j 要素だけをゼロにする。この瞬間、回転表現として不正な状態になるのだが、transform.rotation ヘの代入で正規化が実行されるため、Z軸以外の回転成分がキャンセルされた正しいクォータニオンが代入される。見事なものだ。

いや、まてよ。これを書いた人間は、子どもといっていい年齢なのだ。クォータニオンの成分の意味や正規化のタイミングを理解しているとは、ちょっと信じがたい。これは試行錯誤によって生まれたコード、と考えるのが自然だろう。

きっと、意図しない角度で微小な回転をしてしまう物体に悩まされ、あれこれ試して、この方法に辿り着いたのだろう。各成分をコンソールに出力して閃いたと思うのだが、よく発見したものだ。問題が解決したときの喜びはいかばかりだったか。

そしてそれは、極めて孤独な歓喜だったろう。

まだまだ、プログラムを理解できる中学生や高校生は少ない。大人ですら、ゲームプログラムは意味不明のはずだ。ほとんど誰とも共有できない悩み、葛藤、そして輝かしい達成感を、彼らは内に秘めながら実装しているのだ。改めてそんなことを考えた。

事例2: ソースコード全取っ替え

コードを見ていて、 あるフォルダ以下のコードが全てコメントアウト(無効化)されているのに気づいた。どうやら、古いソースコードがたまたま残されていたようだ。

興味をひかれ、よく調べてみて驚いた。そこには大量の実装が、コメントアウトされた状態で存在していたのだ。しかもそれは中核のゲームシステムを含む上に、最終実装とはまったく異なる構造をしているではないか。

これはつまり、一度は実装したものがなんらかの理由で行き詰まり、すべてを捨て去って最初から(!)実装をやり直したことを意味している。

たしかに完成したゲームは実装が難しいタイプだった。よくこれを実装したな、という気持ちでソースコードを開いたのだが、そこには想像した以上の苦労があった。半ばまでは完成したもの、そのすべてを捨てる勇気。そして2回目の実装で乗り越えた、技術的な成長。

よく、がんばったな。このときばかりは目の奥が熱くなった。

他にも

ソースコードにはたくさんのドラマがある。時を忘れて没頭したのだろうか、朝の7時にコミットログが残されているもの。同一フレーム内の複数入力に見事に対応した処理。組み合わせ(combination)を多重ループで実装するという、高度なアルゴリズムで複雑な実装に成功しているものもあった。君は本当は何歳なのだ、と言いたくなる。

また、連続出場している参加者のコードからは目を見張るほどの成長が感じられる。彼らが1年という期間をどう過ごしたのか、ソースコードから浮かび上がってくる。

勉強との両立も大変だろうに。親御さんもよくこんな、困難の中身も不明な活動に理解を示していただいているものだ。お子さんを信じてらっしゃるのだろう、そこにまた心を打たれる。

ソースコードとUnityインターハイ

プログラマにとってソースコードというのは、ある意味では恥ずかしいものだ。大会前の打ち合わせではコードを見ていることを伝えているが、きっと参加者には恥ずかしさを感じさせていることだろう。申し訳なく思う。

プログラミングは、自分の愚かさと向き合う行為でもある。私も長らくプログラムを書いてきたが、恥ずかしくてとても人には見せられない。

だが一方で、知って欲しいという気持ちも存在する。それはgithubとは少し違う。

例えば、人知れずバグを直し、直したことによって誰にも気付かれない、ということがある。でもほとんどの人は修正した事実や実装そのものに興味がないので、その達成感を共有するのは難しい。

私も過去には過酷な業務を経験したこともあった。そんなとき、理解してくれる仲間の存在にどれだけ救われたかわからない。そんな、同じ苦しみや喜びを知る存在は貴重だと信じて、今年も参加者のソースコードを見せてもらっている。

Unityインターハイ参加者のみなさん、君たちはがんばった。心より祝福します。私が見るのは年に10作品程度だが、より多くの技術者が参加者のそばにいて、そのドラマを共有できるような世界になったら素敵だと思う。

この記事が気に入ったらサポートをしてみませんか?