07:00いまや高度なゲーム開発ツールのおかげで数学や物理学の深い知識がなくても、誰でもゲーム開発ができるようになりました。『Unityでわかる!ゲーム数学』の著者・加藤潔さんはツールではできないことをやったり、適切なデバッグを行ったりするには基本的な数学を押さえておくべきだと強調。本書から、加藤さんが「ゲーム数学」を学ぶべき理由を綴った「まえがき」を紹介します。本記事は『Unityでわかる!ゲーム数学』の「まえがき」を転載したものです。昨今では、ゲームプログラミングを行うに当たり、Unityを始めとする高度なゲームエンジン、ゲームライブラリが整備され、自分ですべてをプログラミングしなくても、高度な技術を用いたプログラムを作成することが可能になってきています。ゲーム学校の講師をしている筆者から見ても、ゲームプログラマに対する数学・物理の知識に対する要求は今も決して衰えてはおらず、むしろ要求されるレベルが年々高くなってきている感があります。それにはいくつかの理由が考えられますが、やはりビデオゲームには本質的に「仮想現実をコンピュータ内に作り出す」という側面があり、そのためには根本的に数学・物理が不可欠である、という事情が大きいでしょう。etc.)を2進数という数字で扱うがゆえに、究極的にはすべてを数字で表現する必要があり、その数字を扱うためのツールである数学が必要不可欠になってきます。リアルな世界の物事を数字でもって表現する、つまり、リアルを数字に翻訳するためには、そのためのツールである物理が不可欠になります。これら不可欠なツールである数学・物理は、ゲームエンジンの進歩によって、自分でその知識を持っていなくてもある程度までのゲームプログラムなら組めるようにはなってきています。ある程度以上に高度なゲームプログラムを組もうとすると、途端に自分で数学・物理の知識を持っていなければ対応できなくなってしまいます。それは例えば、ゲームエンジンの作成者が想定した範囲から外れるようなことをしたいと思った場合に起こります。ゲームというのはエンターテインメントであり、ユーザーによって常にある種の斬新さというものが求められています。よって、同じUnityなどのゲームエンジンを用いたゲームが増えてきた場合、ゲームエンジンの作成者が想定した範囲で普通にできることというのはすぐにやり尽くされ、それをやっても新味のないことととらえられるようになってしまい価値が薄くなります。そのため、新味を求めてゲームエンジンが想定していなかったような動作も行わせようとすると、途端にゲームエンジンによる強力なサポートを受けることはできなくなり、その「想定外」を行うために必要な、比較的高度な数学・物理を自ら駆使しなければならなくなります。昨今のゲームエンジンは高度なサポートを提供してくれているがゆえに、そのサポート外に出ようとしたときには突然に多量の知識・技術が必要になってしまう場合が多く、その場合に生じるギャップに耐えうるような、数学・物理に明るい人材というのがますます必要とされるようになってきているわけです。ゲームエンジンが想定している範囲からさほど踏み出さないような処理しか行わない場合であっても、その処理に対するしっかりした知識を持っていなければ、デバッグが困難になる場合というのはよくあります。原理を理解しないまま使っていても、プログラムが想定通りの動作をしてくれているうちはよいのですが、いざプログラムが想定外の動作を始めてしまった場合には、デバッグの基本中の基本として、問題の分析と原因となっている問題点の特定を行わなければなりません。使っている技術の原理を理解していなければ、問題を分析することすらできずにお手上げ、という状態に陥ってしまうリスクは高いのです。原理を理解していれば、実行結果の画面を一目見た瞬間に問題点が特定できるようなバグであっても、知識がないために原因を特定することができず、大変な時間を無駄にしてしまった、というケースを、筆者もたびたび目にしてきました。数学・物理の知識がしっかりしていなければ、そのバグがアルゴリズム自体の問題点によるものなのか、打ち間違いなどによる単なるプログラムミスが原因なのかを区別することができずに、漠然とミスを探し続けるようなことになりかねません。そのような非効率な状況に陥るのを避けるためには、高度な処理を行ってくれるゲームエンジンに実際の処理は任せるとしても、その気になれば自分でもその機能を実装することもできる、というレベルの知識を身につけておくことが、結局は一番の近道です。自分で実装できるレベルまでの理解ではなくても、少なくともその技術の概要は理解していて、現象を見て問題点の分析ができる程度の知識は不可欠でしょう。そこで本書では、プラットフォームとしてUnityを用い、基礎的な数学・物理を、サンプルプログラムを動かしながら理解できるように構成しました。Unityは強力なゲームエンジンであり、自分で実装しなくとも相当高度な処理まで行ってくれるため、本書でもUnityに備わっている機能を使えば苦もなく行える処理と同じことを、手間暇かけて再現している部分も多くあります。その手間暇をかけて理解を深めることを怠ってしまうと、上で述べたような理由によって、ある日突然、それ以上先に進めなくなってしまったり、どうしても取れないバグが出てきてしまったりするわけです。楽に手に入れた機能を、苦労してもう一度実現したりするのは面倒な部分もあるでしょう。実際、原理を理解しないままゲームエンジンを使っていた場合、何となくかゆい所に手が届かないような、モヤモヤした気持ちの悪さを感じている方も多いのではないでしょうか。面倒でもいったんそれを自分でやってみれば、そのモヤモヤをきれいに解消することができ、さらにそれを発展させることで一歩も二歩も先んじることができるようにもなります。他人が設定した枠内でしかモノが作れない、というのはモノ作りを行う人間にとっては窮屈なものです。部分的にせよゲームエンジンの想定を超えてこそ、本当によいものをユーザーに提供することができるのだ、と筆者は思います。そのような技術的な自由度を手に入れるために、またトラブルをスムーズに解決して生産性を向上させていくためにも、皆さんにも数学・物理の基礎部分をしっかりと理解していただければ、と考えています。ゲームエンジンの便利な機能を使える所はしっかりと使いつつも、企画者やユーザーの新しい要求にも無理なく応えていけるようになっていただければ、と願っています。連載通知を行うには会員登録(無料)が必要です。会員の方はログインを行ってください。タクヤ)翔泳社マーケティング課。MarkeZine、CodeZine、EnterpriseZine、Biz/Zine、ほかにて翔泳社の本の紹介記事や著者インタビュー、たまにそれ以外も執筆しています。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。