タイ語を勉強するとトイレには行けるが洗濯はできない

新婚旅行でタイのバンコクとアユタヤに行きました。 屋台グルメ,荘厳な寺院,象乗り,カオスな市場,マッサージ,夜景の見えるバー,…などなどそれはもう最高の一言です。

バンコクもアユタヤも世界中の人が集まる観光地です。なので,現地の人とはほとんど英語でコミュニケーションが取れます。 そうと知りつつも旅の楽しみの一つとして,タイ語を勉強していきました。 英語以外の言語をかじってみたいという思いもありましたし,自国語でしゃべってくれる外国人ってウケがいいよねという気持ちもありました。

とはいえ,タイ語学習に費やせたのは,タイに行くことが決まってから実際に行くまでのたった1か月半。 ほぼ「かじる」程度しかできないと考えて,やること絞って短期集中でチャレンジしてみました。

タイ語の勉強

大学1年生同士がする「俺の受講してる第二外国語がヤバくてさ」みたいな会話のノリで体験談を書いてみます。 発音記号が出てきますが,雰囲気で読んでもらえればと思います。

タイ語ってどんな言語?

思いつく限り挙げてみると下記のような感じです。

  • 発音
    • 声調言語である (単語の音の抑揚がしっかり決まっている)
    • 子音が20個,母音が9個 (二重母音など含まず) と日本語より多い
  • 単語
    • 合成語が多い (水+魚で,ナンプラー)
    • 似た発音の単語が多い
    • 日本語の助数詞 (1"本"とか3"回"とか) に相当する類別詞がある
  • 文法
    • 孤立語である (格変化(I, my, me, mine)や活用(speak, spoke, spoken)がない)
    • SVO型である (英語と同じ)
    • 全部後置修飾 (「冷たい+コーヒー」「海鮮+料理」じゃなくて「コーヒー+冷たい」「料理+海鮮」)
  • 文字
    • 独自の表音文字
    • 子音字と母音字と声調記号の組み合わせ
    • 子音字は44字,母音字は14字,声調記号は4字
    • 声調記号と声調の対応が子音字の種類によって異なる

学習前にささっとググった難易度としては

  • 発音: 難しい
  • 単語: 簡単
  • 文法: 簡単
  • 文字: 激ムズ

というものでした。

これを踏まえて,1か月半という短期間で旅行先のコミュニケーションをどうにかするために,

  • 発音と聞き取りという観点で単語を覚える
  • 文法は、肯定文否定文疑問文レベルまで理解する
  • タイ文字習得はスッパリ諦める

という学習方針を立てました。

(なので本記事にもタイ文字は出ません)

意外と難しい単語学習

キクタタイ語 入門編で勉強を始めました。

数少ないタイ語単語帳の中でも,発音にフォーカスした単語帳です。 タイ文字は小さめに,発音記号はデカめに書かれています。

付属の音源を聞きながら,音と意味の対応を取って単語を覚えました。 子音がLだったかRだったか,声調が平音aだったか上声ǎだったか高音áだったか,末子音がmだったかnだったかŋだったか,かなり気を使って覚えた記憶があります。

とにかく似た発音の単語がやたら多いです。 子音母音声調で言い分けられる分,1単語あたりの音節が短いためでしょうか。

  • khâaw ご飯,khǎaw 白,khâw 入る,khǎw 彼
  • chây そうである,cháy 使う,chûay助ける
  • tɔ̂ŋしなければならない,tɔ́ɔŋお腹,tɔ̂ɔŋお釣り
  • klây 近い,klay 遠い

話を聞く分には流れでどうにか補完できると思いますが、自分からアウトプットするときにはごちゃごちゃになります。 また,声調が絡むことが単語の覚えにくさに繋がっている感じすらします。

数も大変です。 言いたい数字に対して未だにパッと発音が出てきません。

僕らが英語の数字を one! two! three! four! five!, ...! って早口で読み上げられるのは 長年の慣れ親しみがあったからなのだと実感しました。

バンコクでマッサージをしてくれたお兄さんが勢いをつけて何かするときに 「sǎam (3), sɔ̌ɔŋ (2), nɯ̀ŋ (1), ...!」とカウントダウンし始めたときも, 即座に数字が認識できなかったので,どのタイミングで何が起きるか全く分からず怖かったです。

時間も大変です。数字すらおぼつかないのですが,「○時」の表現が不規則過ぎて,未だに時計を見ても5秒くらいシンキングタイムが入ります。 午前1時 tii nɯ̀ŋ(1), 午前2時 tii sɔ̌ɔŋ(2), ... ときて法則が分かったところで 午前6時になった瞬間 hòk(6) mooŋ cháaw になるし, 午後1時 bàay mooŋ, 午後2時 bàay sɔ̌ɔŋ(2) mooŋ, 午後3時 baay sǎam(3) mooŋ, の後に午後4時 sìi(4) mooŋ yen が来るのでリアル厚切りジェイソンになりました。

こんな調子で文句を垂れつつ単語(と例文)を詰め込んできました。結局キクタタイ語 入門編の音声を合計77時間くらい聞いていたようです。えらい。

めちゃめちゃ楽な文法

タイ語の文法を学習し尽くしたわけではないので、堂々と楽とは言いがたいのですが,文法は非常に楽でした。 例えば僕らが英語学習で苦労したような数々のことが、タイ語には含まれていないようです。

まず時制 (現在,過去,未来) や相 (進行とか完了) がないです。時間表現がないというよりは、時間表現のために動詞の形をあれこれ変えるということがないです。

mɯ̂a wan níi (昨日) といえばそれは過去の出来事になるし,yaŋとつければ「もうやった」「まだやってない」の意味になるし, 大抵は「そういう単語を置く」ことでなんとかなります。

時制や相に限らず,中高生の頃教わった英文法って8割方「いかに単語の形を正しく変えるか」に終始していなかったでしょうか? 人称,単数複数,疑問文,否定文,受け身,比較級,分詞,不定詞,話法,…

タイ語は動詞や形容詞や代名詞の形状が状況によって変わるということがなく (孤立語),このあたりのめんどくささがかなり省かれている印象を受けました。

その他お世話になった教材

タイトレ www.youtube.com

リスニングテストとしてもスピーキングテストとしても役立ちました。

Ling

Master Ling - タイ語勉強中 もくもく

Master Ling - タイ語勉強中 もくもく

  • SIMYA LABS COMPANY LIMITED
  • 教育
  • 無料
apps.apple.com

会話の流れに沿ったロールプレイングをやってみたかったので, チャットボット形式の発音テストが助かりました。

タイ語の実践

いざ現地へ。

スワンナプーム空港からエアポートレイルリンクに乗り,マッカサン駅構内。 緊張しながら sa wà dii khráp (こんにちは) 以外で初めて使ったタイ語は,

This line chɯ̂ɯ aray? (この路線の名前は何ですか?)

でした。

半分英語使っとるやんけ。

駅員のお姉さんがMay I help you?と英語で話しかけてきたので, つい英語が出てしまいました。

それでも「パッと出てこない表現は最悪英語に変えればいいか」という考えで タイ語で話す心理的なハードルを下げられたのは良かったです。

できたこと

正直,タイ語話して撃沈という覚悟もしていたのですが, 思いのほか色々なことができました。

市場の買い物,価格交渉,服の試着,飲食店での注文,おすすめメニューを聞く,美味いと伝える,…などなど

「こいつタイ語しゃべるやん!」みたいにびっくりされたり 「話すの上手いね」と言われるのは素直にうれしいものです。

タクシーで尿意の限界を感じて,最寄りのトイレに寄ってもらったのもいい思い出です。

注文した飯がいつまでも来なくて,タイ語で催促したら持ってきてくれたけど, 計算の2倍くらいお会計ぼったくられたのもいい思い出です。

ニューハーフのお姉さんが女性の語尾khâを使っていたのに気づいたときは感動しました。(男性はkhráp)

できなかったこと

こちらが中1英語の教科書みたいなシンプルな問いかけをして, Yes, I do. レベルの返しを聞く分にはタイ語トークを楽しめたのですが, むこうから複雑なタイ語を話された時にはさすがに無力です。

ホテルのランドリーサービスを使いたくて,用紙に書いてあるランドリーサービス担当に電話をかけました。英語があまり分からないようで,要件を伝えるのにかなり難儀しました。(ランドリーサービスだから要件もクソもないんだけど)

結局「部屋まで来てくれるから置いておけばいいのかな?」と何となく理解して, 洗濯物一式を部屋に置いて,一日遊んで帰ってきたとき見たものは…

綺麗にベッドメイキングされたシーツの上で放置されたままの洗濯ものでした…

手を動かすvs考えるの自分史

反射と思考の融合

突然ですが「反射と思考の融合」って言葉かっこよくないですか? 元ネタはガンダム00にて,ガンダムマイスターアレルヤ・ハプティズム(ともうひとりの人格ハレルヤ)が最終的に体得した戦闘スタイルのことです。 僕はガンダムには乗りませんが,僕にとってのここ数年のチャレンジは,この相反する2つのバランスをいかに取るかということでした。

反射というのは,「手を動かす」「考えるより先にやってみる」「行き当たりばったり」「やってみなければ分からない」「ボトムアップ的」とも言い換えても良いでしょう。 思考というのは,「考える」「考えてから行動する」「計画を立てる」「目標から逆算する」「トップダウン的」とも言い換えられます。 (脳活動全般というよりは「事前に考える」ことに今回主眼を置いています。)

学生の頃の自分は圧倒的に「反射」寄りで行動する人間でした。というより,考えてから動くということを一切しませんでした。 夏休みの課題は最初の3日に勢いで一気に進め,最後の3日に追い込まれてやるタイプでした。 ドライブの行先はいつも車に乗ってから何となく決めていました。 趣味のゲーム作りは,とりあえずゲームエンジンを立ち上げてから,そのゲームの詳細を決めていました。 これまた趣味の電子工作も,その日の思い付きで部品を買い,回路図を書き,はんだ付けをし,プログラムを書くという有様でした。 「習うより慣れよ」「とにかく手を動かせ」「考えるより行動しているやつが一番偉い」「行動力は大事」のような価値観を何となく持っていた気がします。

高校時代の英語の勉強も例にもれません。上達への道は「何度も読み書きをすること」と信じていました。 数学も「問題を見た瞬間に解法が浮かぶまで繰り返し演習を積む」というスタイルで勉強をしていました。

予備校

この野性的な行動方針が見直される最初の機会は,大学受験の失敗でした。 志望大学に落ちて入った予備校では,いわゆる受験テクニックを叩き込まれることはありませんでした。 代わりに「手を動かす前に考える」方法を教わりました。 英語講師からは,英文の全体構造を把握してから細部を読み進める方法を教わりました。 数学や物理の講師からは,問題文から与えられる情報を整理し,見通しを立ててから解答に着手する,という方法を教わりました。 現役時代に感じていた「解けそうで解けない」感覚が消え,ゆっくりではあるものの着実に問題が解けるようになりました。 (志望大学にも受かりました)

大学(学部)

しかし愚かにも,この「手を動かす前に考える」方式を受験勉強の中に置いてきてしまいました。 大学に入学してからも,前述したような行き当たりばったりの反射的な活動が続きます。 多分「それをやったら面白そうかどうか」くらいしか考えていなかったと思います。

一応この反射的な活動にも,幅広い経験と学びを得られるというメリットがあります。 在学中,流行りに乗ってとりあえずVRゴーグルを買いましたが,それをきっかけにVRゲーム制作と展示にチャレンジする機会を得ました。 大学の書店で,面白そうだと感じて買ってみた新書から,機械学習技術の世界に触れることになりました。(深層学習が話題になるかならないかの頃) 一方で,このとりあえずの活動には,容易に人を巻き込んだり,大きな成果を作れないというデメリットもあります。 出口戦略がない個人の思い付き活動なので,人を巻き込むにも説得のしようがありません。 やりっぱなしになるので,何等かの成果にも結び付きません。

研究室

そうこうしているうちに,研究室配属の時期になりました。反射ではなく思考を鍛える2回目の機会です。

「君たちの目標は来年の2月に卒論を出すことです。」というのが,初回打ち合わせで指導教員から言われた言葉です。 (気が早いなぁ… もっと研究テーマ決めの話とかあるだろうに…)と思っていると,指導教員はA4用紙を1枚見せてくれました。 それは先輩の研究をパワポスライド4枚にまとめたものでした。

研究やったことある人ならピンとくるかと思いますが,そのスライドは大雑把に「背景・課題・アプローチ・結果」と分かれていて,各スライドはメインのメッセージ一言と,そのメッセージをサポートする簡単な補足説明や図で構成されています。 それらのスライド埋めることさえできれば,それをベースに卒論が書けるというものでした。イメージしていたような「12月くらいに論文を1行目から書き始める」というやり方をしていませんでした。 1年くらい先の目標を見据えて,作るものを大枠から考えていくというトップダウン的な方針が当時は新鮮でした。

もちろん一朝一夕で身につく考えではないので,ほとんどの時期はうまくいかず苦労していましたが,何とか卒論・修論を書き上げて社会人になりました。

社会人(配属直後)

ところがこの,「大枠からやるべきことを考えて,徐々に詳細に向かう」というトップダウン的な考え方を,入社後半年の研修期間で忘れてしまいました。(研修で何を学んだの…!?) 研修が終わり,R&D系の部署に配属されてからも,僕のとりあえず手を動かすような行動方針は変わりませんでした。 課題解決につながるアイデアや分析が思いついたら,とりあえず数値計算ソフトを叩いて結果を出してみる。その結果が良かったら一歩前進,悪かったらまた考え直そう。…というのが基本的な仕事の進め方でした。

社会人(〜最近)

ただ,明確なきっかけはないのですが,上司から仕事のやり方について(ありがたいことに)徐々に指摘を受けるようになりました。 出来高で仕事をしないこと,目標から逆算すること,やろうとしていることが最善手かよくシミュレーションすること,枝葉から着手しないこと,トップダウン的に物事を進めること,情報を整理してよく考えて色んな可能性を考慮して手を動かすのは最後だということ,スケジューリングをすること,パワポに図を貼ってから報告内容を決めないこと,文書もプログラムも要件定義と設計から始めること,… 等々色々言われましたが,要は「手を動かす前に考えろ」に類することをを繰り返し言われてきました。

指摘を受け始めてからは数か月,苦しい時期が続きました。 手を動かす前に考える(例えば実験をするための段取り)を試してみるものの,考えが短時間でまとまらず,その間手も動かせず,仕事が全く進まないような状況が続きました。「まず手を動かす」ということに慣れすぎていたのです。あまりに慣れないので毎日吐き気がする思いで仕事をしていました。「あのとき長々と考えてないで手を動かしていたら,今頃結果が出ていたはずなのに!」と憤慨することも何度もありました。

が,結局は慣れやトレーニングで何とかなるもので,今ではある程度「考えてから手を動かす」「大枠から考える」のスタイルで仕事を進められるようになりました。

いつも手元にはガントチャートがあり,日々の業務はそのガントチャートに従って進めています。 このチャートは単なるスケジュールではなくて,「プロジェクトのゴールに対して,こういう風に仕事を進めれば大丈夫だよね」というのを年度初めに検討した「思考」の成果物でもあります。 もともとは月単位で大雑把に描かれてたものを,適宜週単位に詳細化します。 週初めにはその週に割り当てられたタスクをどうこなすかを考えますが,その考えに平気で半日くらい費やします。(相談等含めて) 「手を動かすのは最後」「考え終わるまで絶対手動かさんぞ」という意識で進めるようになりました。

また,週ごとに定例ミーティングがあるのですが,そこでの報告資料は前回のミーティング直後におおよそ作られています。 ただし,そこで書くのは各スライドのタイトルとメッセージだけで,それをサポートする実験結果や調査結果は追々手を動かして追加していくことになります。 会社員がパワポとエクセルをよく使う理由が分かった気がします。まず「手を動かす前に考える」ことに大きな価値があり,その考えた結果をまとめて共有・議論・合意をするためになんやかんや丁度いいのだと思います。

仕事に限らず,趣味のゲーム制作においても「思考」が使えるようになりました。事前にコンセプトを練り,必要な要素を洗い出し,計画を立て,それからやっとゲームエンジンとエディタを立ち上げてコーディングをするようになりました。

(友人を巻き込むこともできました。なんやかんや今までの人生でできていなかったことなので,これは快挙です。)

27年くらいサボってきた「手を動かす前に考える」の実践に当たって,下記の書籍たちも大いに助けになりました。

「考え方を考える」の事例が,まさに僕の置かれている状況に刺さりました。

これ読んでから中学生に戻りたいと思いました。ロジックツリーやマトリクスを書いて思考を整理することは,何もコンサルだけが使う特別な道具ではない(このくらい中学生でも普通にできることだよ),という感覚になります。

仮説フェーズと検証フェーズという考え方を初めて知りました。研究室時代は,1個有力な仮説が思いついたらすぐに手を動かし始めて,動かしている最中に「やっぱりおかしいなぁ…」ともやもやすることがありましたが,そういうやり方ではいけないということを学びました。

現在

こうしてめでたく「思考」を体得した僕ですが,悩みがすべて解決されたわけではありません。 「反射」に含まれていた行動力や,行動に伴う思考活性化効果を失ってしまったような気がしています。手を動かすことに罪悪感すら抱くようになりました。(物理的に手を動かすことに限らず,「実験結果が想定と違う原因を考える」ようなことについても「今それをやっている場合か?もっと手前に考えることはないか?」という心の声が聞こえます。)また,思考優位な状況を単純に「息苦しい」「やりづらい」と思うこともあります。

思考の訓練をした反動か,未だにもっと行動的でありたいと思うことがあります。 職場で年一回,特性診断みたいなのがあるのですが,「手を動かす前によく考えるタイプである」に「よくあてはまる」と答えるべきか「まったく当てはまらない」と答えるべきか悩みます。矯正して前者になったけど,根っこは後者だよな…「どちらでもない」にしよう。という感じです。

時々転職サイトを覗くことがあります。「頑張って習得した『手を動かす前に考える』ことが生きる求人だろうか」と思いつつも,「『とりあえずやってみる』態度がもっと受け入れられるような職場はないだろうか…」と矛盾したことを考えてしまいます。

仕事で実験協力してもらっている部署と,実験の段取りを確認することがあります。散々想像力を張り巡らせて考えた段取りを伝えても,先方に「まあとりあえずやってみましょうか!やれば分かりますよ!」と言われると,その態度とそれができる部署を羨ましく感じてしまいます。(実験は時間オーバーしました。)

「世の中の人はもっと行き当たりばったりで上手くやっているよ!」という証拠を探したくなり,「その日暮らしの人類学」なんて本を読んでみたりもしてみました。

(僕には真似できそうにないタンザニア商人のタフな生き方が紹介されていました。)

「反射」と「思考」は性質こそ逆ですが,いずれも持ち合わせるのが理想だと思います。多分世の中探せば,両方を持ち合わせた人もいるでしょう。大きなビジョンを描いて,ロードマップをしっかり描き,一歩一歩着実に行動しつつも,その時その時の状況を見て,臨機応変に瞬発力をもって対応する,ような人のことです。 ただ,どうしてもどちらかに偏ってしまったり,どちらかの性質が合わなかったりというのを体感しているので,結局自分はどんな生き方をしたらいいのかなぁともやもや考えながら2021年を終えそうです。

(ちなみにこの記事は「反射」寄りでバババっと書いてみました)

『ゲームプランナー入門』に沿ってunity1weekを振り返ってみた

先月,ゲーム制作イベント unity1week にてゲームを作りました。

今回はその作ったゲームについて振り返りをしていこうと思います。 そして振り返りに使う観点として,書籍『ゲームプランナー入門』(著:吉冨 賢介) の力を借りようと思います。

タイトルに「ゲームプランナー」とありますが,僕はゲーム会社勤めでもプランナーでもありません。 趣味の範囲でゲーム制作をしているだけですが,面白いゲームを作るために参考になると思って読んでいます。 また,僕の頑張りどころがグラフィックやサウンドやプログラムではなく,ゲームのアイデアメカニクスの設計に置かれているので, 想定読者のプランナーであるといっても差し支えないと思います。

目次

unity1weekで作ったゲーム

振り返りの前に拙作「地中水中走行ちゅう!」を紹介させてください。

地中水中走行ちゅう! | フリーゲーム投稿サイト unityroom

このゲームを一言で言えば「どこでも通ってよいタイムアタック横スクロールアクション」です。 「地面の上を走って障害物や穴を飛び越える」という横スクロールアクションのお決まりを破って,異能感や全能感*1を楽しむゲームです。

ゲームの主人公のネズミは,対応するアイテムを取得すれば水中でも空中でも地中でも金属中でも移動してコースをショートカットできます。 それゆえ,タイム短縮のために適切なアイテム・ルート選択がカギを握るゲームです。

ゲームアイコンに書かれた「こっちのほうがはやいよ!!」が本作の醍醐味を物語っています。

f:id:shinji00:20211009171906p:plain
「地中水中走行ちゅう!」のゲームアイコン

振り返り

『ゲームプランナー入門』はゲームプランナーを目指す学生をメインターゲットとして, ゲームアイデア・企画書・仕様書・就職をトピックにプランナーとしてやっていくためのノウハウを示した本です。 前半のゲームアイデアの話に面白いゲームを作るためのヒントが沢山詰まっているので,こちらを参考に振り返ってみます。

同書ではゲームの面白さの本質を「挑戦と達成感」にあるとしています。

そのため面白いゲームを作るためには,

  • そもそも挑戦と達成感の仕組みがあること
  • 挑戦に能動的に取り組んでもらう仕組みがあること
  • 達成感を得られる盛り上がり(クライマックス)があること

が必要だそうです。

果たして僕のゲームはどこまで実践できているのでしょうか。

挑戦と達成感があるか

多くのゲームにおいて,挑戦と達成感は以下の流れで成り立っているそうです。

  1. ルール,ゲームシステムの紹介
  2. クリアすべき課題・目標の提示
  3. 挑戦!⇒クリア!
  4. 報酬・評価 (2.に戻る)

これらの要素と流れを持っているか確認してみましょう。

ルール,ゲームシステムの紹介

このゲームにはコアになるゲームシステムがあります。それは水中や地中,空中への状態遷移です。このシステムは,チュートリアルステージ内でテキストと実際の体験を通して説明されています。

アイテム「魚」の後に水辺を,アイテム「もぐら」の後にトンネル掘ったらショートカットできそうな壁を用意することで,水中や地中の移動を体験してもらうように仕向けています。

f:id:shinji00:20211009181757p:plain
地中を移動するための操作説明

操作方法については,直感的な操作方法で状態遷移できるようにして説明不要になるよう心掛けました。 しかしそれでも「移動キーを0.5秒押し込むと水中に潜れる」「空中でもう一度ジャンプすると空中を飛べる」という仕様は見逃される可能性がありました。 そのため,水中に潜れずにしばらく水上を泳いだ人に向けに,テキストメッセージを読んでもらうようにしました。

f:id:shinji00:20211009175031p:plain
水中を移動するための操作説明

以上のような工夫により,ゲームシステムを理解してもらうようにしています。 しかしプレイ実況を見る限り,まだまだ説明不足・説明下手である点も見受けられます。

チュートリアルを終えた後の本番ステージでは,水中・地中・空中に加えて金属中を移動可能になります。 プレイヤーは本番ステージで初めて金属パイプ(もぐらを手に入れても進めない)を見かけることになりますが, 「金属であることが伝わらない」「土管のように入り口から中に入れる」といった誤解を招いているようでした。

また,「触るとアウトでチェックポイントに戻らされるトゲ」を用意しましたが, ネズミ(プレイヤー)がチェックポイントに瞬間移動する挙動は混乱を招いているようでした。 これはエフェクトやカメラワーク,チュートリアルでの体験で取り除けた不快感だと考えています。

クリアすべき課題・目標の提示

「地中水中走行ちゅう!」は,画面右方向に進んでなるべく早くチーズにたどり着くことを目的としたゲームです。

ゲーム内で明確に説明していませんが,「まず右に進むべき」ことは横スクロールアクション(プラットフォームゲーム)の常識として暗黙に理解されるものとしています。 万一プレイヤーが左に進んでしまう場合に備えて,壁(崖)を用意しています。

f:id:shinji00:20211009174053p:plain
チュートリアルステージ開始時の画面

また,ゴール(チーズ)がどこにあるかを説明するために「ゴールまであと○○m」の表記をしています。 もちろん,ゲーム開始時にカメラを動かしてチーズを映しても良いですが,その際にステージの形状が分かってしまうと「こっちのほうがはやいよ!!」を自分で見つける楽しみが分かってしまうので,あえてぼかして伝えています。

さらに,タイムアタックであることを伝えるために経過時間の表記をしています。 特にコンマ単位まで表記することで,プレイヤーに数字が高速でパタパタ変わるのを見せ,「急がなきゃ!」と思わせるように仕向けています。

これらの仕組みでなんとかルールと目標は伝わったのではないかと思います。

挑戦!⇒クリア!

このゲームの挑戦は最短ルートを見極めるところにあります。

例えば山を前にしたときに,一段一段ジャンプして山を越えるか,地面を掘り進んで突き抜けるか,少し遠回りしてでもアイテム「羽」を手に入れて飛び越えるか,最も早いルートは何だろうと考えることです。

その挑戦を与えるために,本番ステージのレベルデザイン(マップデザイン)は一本道にならず多様なルートを取れるようにしています。

また,画面の範囲と見える情報に気を使うことで,最短ルート探索が程よい難易度になるように調整しています。 ステージの全地形が把握できるほど表示範囲が広ければ,見るだけでおよその最適ルートが分かってしまいますし, 狭すぎれば別ルートの発見機会を損なうことになってしまいます。

f:id:shinji00:20211010130959p:plain
別ルートの可能性をチラ見せ

以上のように,レベルデザインと画面範囲の調整によって「最短ルートを見極める」という挑戦をプレイヤーに課しています。

報酬・評価

ここは正直よくできていない部分です。

一応,ゴールタイムを「評価」して,ランキング機能によって達成感を与える仕組みにはなっています。

しかし,苦労してゴールしたプレイヤーに与える「報酬」,例えば「褒める」演出が決定的に足りていません。

f:id:shinji00:20211009185652p:plain
シンプルすぎるリザルト画面

熱心なプレイヤーはタイム更新のために何度も何度も途中リトライをしています。 そのような苦労の果てにゴールしたからには,もっと大げさな褒める演出が必要です。 (チーズを見たって誰も嬉しくありません。)

例えばかわいいネズミちゃんが大喜びするとか,クラッカーや拍手やファンファーレで出迎えるとか,タイムを強調表示するとか, プレイヤーを褒める演出はいくらでも加えられたかと思います。

挑戦に能動的に取り組む仕組みがあるか

いくら挑戦と達成感が定義されていても,それを面白いと思ってもらうには「能動的」に取り組んでもらわないといけないそうです。

曰く,人が何かに能動的に取り組むために

  • 目的が明確である
  • 手段が明確である
  • 自分で決められる
  • 小さな成功体験で自信を得る
  • 適度な難度である
  • 正当な評価・報酬を得られる

であることが必要だそうです。僕のゲームは能動的に取り組める仕組みを備えているでしょうか。

目的が明確である

「目的」は「なるべく早くゴールにたどり着くこと」と伝わっているはずです。

手段が明確である

「手段」も「右に進むこと」「アイテムを使ってショートカットすること」ということをチュートリアルで体験してもらっているはずです。

自分で決められる

この手段もプレイヤーが発見できる範囲で無数に用意しているため,「自分で決められる」ゲームとなっているはずです。

小さな成功体験で自信を得る

しかし,「小さな成功体験で自信を得る」作りになっているかは怪しいところです。 チュートリアルを除けば1ステージのゲームなので,成功体験はゴール時の1回しか得られません。 細かく成功体験を与えるには短めなステージを多数用意する構成にした方が良かったかもしれません。

また,1ゲームの中でも小さな成功体験を演出することも考えられます。 例えば,地中や水中に行く能力で「うまくショートカットしてやった感」が出るようなマップ構成にする方法が考えられるでしょう。

適度な難度である

次に「適度な難度である」についてです。 クリアできず挫折するようなゲームではなく,タイムを縮めようとすれば工夫が必要なゲームなので,やる気をそぐような何度ではないと思います。

正当な評価と報酬を得られる

最後に「正当な評価と報酬を得られる」ですが,これは前述の通り苦労したプレイヤーを褒める演出が足りていません。 また,「小さな成功体験」とつながる話ですが,ゲーム終了時のみでなく途中途中にも細かい報酬が必要でしょう。

こうして振り返ると,僕のゲームをより能動的に取り組んでもらうには「細かく細かく成功させて褒めること」の不足が課題であることが分かりました。

クライマックス(盛り上がり)があるか

ゲームはエンタメなので,起承転結の「転」に相当するクライマックス(盛り上がり)が必要だそうです。 『ゲームプランナー入門では』下記のような例をクライマックスとして挙げています。

  • 歯ごたえのある挑戦 (ボス戦など)
  • 一時的なパワーアップ (マリオのスターなど)
  • ボーナスチャンス (ドラクエはぐれメタルなど)

残念ながら「地中水中走行ちゅう!」制作時には,クライマックスが必要という考えが全くありませんでした。

単一ステージなので「歯ごたえのある挑戦」ステージは用意できていませんし, ネズミの能力取得も「一時的なパワーアップ」ではありません。

しかし,「ボーナスチャンス」については意図せずたまたま用意することができました。 ゲームのネタバレ(?)にはなりますが,水中・金属中・真空中移動によって長距離を高速に移動できる区間があります。

f:id:shinji00:20211010182509p:plain
「ボーナスチャンス」ともいうべき長距離を高速移動できる区間

ここは細々したルート選択や試行錯誤のことを忘れて,一気にタイムを縮められる気持ちのいい部分になっています。 「いいルート見つけてやったぜ!」「うおおおお!!ショートカットじゃあああああ!!!!」と,プレイヤーがテンションを上げてくれたなら大成功のレベルデザインだったと思います。

まとめ

振り返ってみると,「地中水中走行ちゅう!」には以下のような良い点,悪い点があることが分かりました。

  • 良い点
    • ゲームの仕組み,目的をおよそ正しく理解できるチュートリアルになっている
    • プレイヤーの選択肢が多くある挑戦を用意している
    • ゲームを盛り上げるボーナスチャンスがある
  • 悪い点
    • 細かく成功体験を積ませ,細かく褒める仕組みになっていない
    • 苦労してゴールしても褒め方がそっけない

精進したいと思います。

*1:いわゆる俺TUEEE

Neo Gymnast -Extreme Bars- Privacy Policy

Privacy Policy

Shinji built the Neo Gymnast -Extreme Bars- app as a Free app. This SERVICE is provided by Shinji at no cost and is intended for use as is.

This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service.

If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy.

The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which is accessible at Neo Gymnast -Extreme Bars- unless otherwise defined in this Privacy Policy.

Information Collection and Use

For a better experience, while using our Service, I may require you to provide us with certain personally identifiable information, including but not limited to IP address, device identifiers, information regarding the delivery of ads, your interaction with ads information, score name, score. The information that I request will be retained on your device and is not collected by me in any way.

The app does use third party services that may collect information used to identify you.

Link to privacy policy of third party service providers used by the app

Log Data

I want to inform you that whenever you use my Service, in a case of an error in the app I collect data and information (through third party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing my Service, the time and date of your use of the Service, and other statistics.

Cookies

Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory.

This Service does not use these “cookies” explicitly. However, the app may use third party code and libraries that use “cookies” to collect information and improve their services. You have the option to either accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to refuse our cookies, you may not be able to use some portions of this Service.

Service Providers

I may employ third-party companies and individuals due to the following reasons:

  • To facilitate our Service;
  • To provide the Service on our behalf;
  • To perform Service-related services; or
  • To assist us in analyzing how our Service is used.

I want to inform users of this Service that these third parties have access to your Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they are obligated not to disclose or use the information for any other purpose.

Security

I value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and I cannot guarantee its absolute security.

Links to Other Sites

This Service may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by me. Therefore, I strongly advise you to review the Privacy Policy of these websites. I have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services.

Children’s Privacy

These Services do not address anyone under the age of 13. I do not knowingly collect personally identifiable information from children under 13 years of age. In the case I discover that a child under 13 has provided me with personal information, I immediately delete this from our servers. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact me so that I will be able to do necessary actions.

Changes to This Privacy Policy

I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. I will notify you of any changes by posting the new Privacy Policy on this page.

This policy is effective as of 2021-08-02

Contact Us

If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact me at tbw.rbcn.1211129@gmail.com.

This privacy policy page was created at privacypolicytemplate.net and modified/generated by App Privacy Policy Generator

Unity1week「回」を振り返った

創作意欲が湧いてくる今日この頃,Unity1weekに参加しました。今回のお題は「回」でした。自身の参加は学生以来の2回目です。

ちなみに作ったゲームはこれ。良かったら遊んでみてください。(宣伝)

unityroom.com

現時点で「面白い!」「気持ちよかった!」という評価コメントを頂いて,テンションがめちゃめちゃ上がっている。 実況プレイ動画を撮ってくださる方もいて,本当にありがたい。

しかし,友人の評価を聞いてみたり,プレイ動画を眺めたりすると反省するところも沢山出てくる。 まだ相互評価期間も終わってないけど,上手くいったところと反省点をまとめておこうと思う。

上手くいったところ

面白さの作りこみをしっかりやった

「面白い!」「気持ちいい!」の評判に一番効いたのはここだと思う。 Unity1week初日には一切Unityを開かず,ひたすら机上でアイデア作りをして,面白いと断言できるところまで持って行った。 どんな感情を与えるゲームにしたいか,というコンセプトをしっかり固めて,あとはそのコンセプトを実現する仕組みを決めていけば良いと考えた。

コンセプトの設定

お題の「回」を聞いた時点で,せっかくなら回ることそのものが楽しさや気持ちよさにつながるゲームが作りたいと考えた。 回ることが敵を倒す手段とか,回ることがゲームのギミックの一部とかではなく,回ること自体をゲームの楽しさにしたかった。 とかとかいう謎のこだわりが発生したので,それをそのままコンセプトとした。

コンセプト:回ることそのものが楽しい,どんどん回したくなる,回るほどうれしい

具体的には「人生で回って楽しかった経験」をひたすら思い出してみた。コマ,ハンドスピナーに始まり,ペン回し,事務イスと続き,最後は体操競技に行きついた。 (実は中学時代は体操部だった。しかし下手だったので,体操についてはその後の人生で見る専を決めた。)

回ることが楽しいというコンセプトと体操競技というテーマが決まってから,Youtubeで体操の動画を沢山眺めてアイデアを練った。 体操の動画,観てるだけでめちゃめちゃ楽しい。例えば鉄棒の大技「コバチ」は,大車輪から真上に飛んで1回転した上でまたバーをつかむ技だけど*1, これがもっと高く飛んで,2回転,3回転と回転数が増えたらめちゃめちゃ見ごたえあるだろうし,それを自身の手で実現できるゲームにしたら絶対楽しいだろうなと思った。

かくして,「鉄棒的な,段違い平行棒的な競技*2で回転しまくれる超人体操ゲームを作ろう!」という思いで2日目のゲーム制作に移った。まだUnityは触らない…

f:id:shinji00:20210305234856p:plain
ゲームアイデアが固まってきたあたりのOneNoteのメモ。バーが1本だとつまらないので増やした。これが後々上手く機能するとは思わなかった。

類似ゲーム調査

ゲームジャンル?が決まったので類似ゲームの調査をした。 実際にプレイしてみると参考にしたい部分もある一方,イライラを感じることもあったので,そういうのは自分のゲームからもなるべく取り除くべきだと考えた。

体操の,特に鉄棒のゲームは沢山あるが,やってみると難易度の高い死にゲーが多いように感じた。バーに衝突したり,バーをつかみ損ねて落ちたり,着地に失敗して頭から落ちたり…という具合だ。 確かに体操競技って難しいし,その難しさを超えた時の達成感もあるので,そういうゲームになるのも道理があるかなと思った。失敗したときのシュールさも絵になるし。 ただ前記コンセプトが頭にあると「かっこいい技を決めたいのに死にゲーをやらされている!」というネガティブな気分になった。

なので,自分のゲームでは「沢山回る」以外の部分は極力イージーに作ることにした。 体のどこがバーに接触しようがバーをつかめるようにしたし,どの角度から地面に激突しても足を下にして着地するようにした。 バーも1本ではなく6本にしたことも,狙いの角度に飛べなくてもどこかしらにつかまれるという効果があった。

f:id:shinji00:20210306121607p:plain
類似ゲーム調査時のメモ。素直に思ったことを全部書いた。

そもそもunity1weekで400作品も投稿される中から遊んでもらうわけなので,想定プレイヤーは「2,3回触ってみて微妙だったら止めて他のゲームを遊ぶ」人たちである。 そのプレイヤーたちになるべく早く成功体験を積んでもらって,その先の高みを目指してもらうためにも,今回のイージーな設定は必要だったと思う。

ゲーム化

コンセプトが損なわれない範囲で制約を作りゲーム化した。

この時点でできているゲームルールは「大車輪からバーを離して飛ぶ。回転しながらほかのバーに飛び移る。飛んでいる間の回転数を競う。抱え込みをすると回転数が速くなる。」だった。 このままでは飛んだ瞬間抱え込んだままにすれば最高得点が出てきてしまうことになり,それではゲームにならない。

「抱え込みをしたままバーに当たるとミスになる」というルールを導入した。これなら「バーに近づくギリギリまで抱え込んで回転数を稼ぎたいが,バーに近づいたら離さなければいけない」というジレンマが生まれる。 工夫したのは,バーに近づく直前だけにジレンマを導入したことである。これにより,バーから遠い「飛んでから落ちる」間は何も考えずに純粋に高速回転を楽しむことができる。 もし回転している最中,何か別の心配事や難しい操作があると,回って楽しいというコンセプトを実現できないのではと考えたのである。

もう一息ジレンマを起こすためにルールを追加した。「中央のバーを飛び越えるような移り方は配点が高い」「抱え込みをすると当たり判定が狭くなる」というルールである。 「ミスを覚悟で抱え込みをして中央のバーをぎりぎり飛び越えて高得点を狙う」というハイリスクハイリターンなプレイと,「飛び移り高得点は狙わないので,中央のバーが近づいたら抱え込みを解除する」ローリスクローリターンなプレイを選択可能にした。(なおこのジレンマは後述の理由により,あまり機能しなかった。)

f:id:shinji00:20210306134012p:plain
抱え込みのリスクとリターン

f:id:shinji00:20210306134413p:plain
飛び移り技の配点表のメモ

コンセプトとテーマ,基本ルールとジレンマを作る仕組みができたところで,2日目(祝日)の午後やっとUnityを開いた。(数年ぶりだったのでログインとかアプデとか色々大変だった。)

Classの役割と参照関係を定義してからプログラムを書いた

自分が今まで作ってきたソースコードたちはスパゲッティになりがちだったので,反省してちゃんとクラス設計をすることにした。 1週間という短い期間だからこそ,大急ぎで手を動かすのではなく,手戻りが無いように設計しておきたかった。 といってもそのあたりあまり詳しくないので,どこかで聞いたことのある「1つのクラスには1つの役割」「循環参照はしない」だけ守ることにした。

f:id:shinji00:20210306135826p:plain
クラス設計図。主に参照関係を定義した。UMLとやらの書き方を参考にしたけどよく分かりません。

Visual Studioを開いて,参照に関係するコード(public float GetScore(){return 1.0f;}とか)だけ書いてエラーが起きないことを確認してからコーディングを開始した。 そのクラスの心配だけしながらコードを書けて,安心かつ手戻りナシで良い感触だった。この辺の勉強もっとやりたい。

反省すべきところ

コンセプトも定義して,そのための仕組みも作ったので,「こういう反応やこういうやりこみをしてくれたら成功」というのは頭にあった。 まさにその通りのコメントも頂いて一時はテンション上がったけど,プレイした友人の反応や実況動画を見る限り,必ずしも成功とは言えなかった。

回るゲームにするつもりがつかむゲームになった

あれだけ気を使った飛び移るギミックが思いのほか難しく,回転を稼ぐよりも飛び移りの成功を目指すことがゲームになってしまった。

バーに近づけばつかむこと自体に苦労はないが,そもそもバーとバーの間をすっぽ抜けたりしてつかめないということが多かった。 バーをつかむためにはバーを離して飛ぶタイミングをかなり気にしなければいけなくなった。 具体的には3回くらい飛んでみたら失敗するくらいの確率だった。(自分のテストプレイでは習熟しすぎてて気づかなかった。あるある。)

プレイヤーの反応も「1回でも多く回るぞ!」「あのバーに飛び移るぞ!」ではなく「つかまなきゃ…!飛ぶタイミングをミスれない…!」「10回も飛べない!」という感じだった。 このおかげで,前記飛び移り配点表の存在を意識してプレイする人はあまりいなかっただろう。(得点ポップアップの意味が分かりづらいのもあると思う)

対策としては,単純にバーのつかみ判定を広くするか,バーを増やしたり,配置に気を使うといったことが考えられそう。 また,バーを離すのはキーを押した瞬間ではなく,キーを離した瞬間という仕様だったが,もしかしたら前者の方がやりやすい人もいるかもしれないので,再検討してもよさそう。 「ゾーン」に入った時のように,キーを押した瞬間スローモーションにして離すタイミングを決めやすくするのもありかもしれない。 マリオのように飛んでいる間も位置のコントロールができるようにしても良いかもしれない。

やっぱり第3者にテストプレイをしてもらって,面白さに到達するまでに思わぬ難易度の壁が無いか確認するべきである。 チーム開発やっている人が毎日テストプレイ会を設けているのもそういう理由だと思う。

UIに時間をかけすぎた

現在のスコアと,技を決めた時の加点スコアを表示するために。次のような仕様書を作った。

f:id:shinji00:20210306142425p:plain
UI(というかスコアビューアー)の画面仕様書

すごく簡単そうに見えるだろう。筆者はこれの実装で土曜日を潰したのである。 Canvas座標の理解に苦しんだり,思った通りに動かすのに苦労している内にかなり時間を使ってしまった。 この時間が節約できれば,絵作り(背景とか)や調整に時間をかけることもできただろう。サムネや背景を作りこんで人を呼ぶこともできたかもしれない。ランキング昨日も実装できたかも。

結果の画面表示そのものにゲームとしての独自性はないし,とはいえ必要なことだし,どんなゲームにも共通する作業なのでパパっと手間なくできるべきである。 DOTweenとかいうのが便利そうなので,次は活用してみようと思う。

実はUIちょっと動かす時も,カメラ操作するときも,「timerフィールド用意して,speed*Time.deltaTimeでちょっとずつposition動かして,timer<0になったら止める」とか「止めたい位置周辺まで来たらposition=target_positionする」とか,そういう面倒くさいことをやっていた。DOTweenなら一行で,しかもUpdate()ごとではなく一度で,簡単なアニメーションが実行できるので,使わない手はない。

というわけで,この辺の反省は次回のUnity1weekに参加するときや,このアプリをブラッシュアップしてスマホアプリ化するときにでも生かそうと思う。

*1:この動画見た方が早いです https://www.youtube.com/watch?v=AgSjm7Gd21w

*2:できたゲームは段違い平行棒という女子体操の競技が冠されているけど,モデルはぱっと見男性…100年後のオリンピックという設定だし,正確にはバーが6本ある"Neo段違い平行棒"だし,こまけぇこたぁいいんだよの精神で作りました。

運転のGと不快度を可視化する装置を作った

久しぶりにM5Stackで工作をしてみたので手動かしてみた感想と得た知見を書いていく。

筆者はドライブを趣味にしている。昔から人を乗せる機会が多く,普段から乗り心地のよい運転を心がけていて,それ自体もまた楽しみにしている。赤信号で停車するときにはなるべくカックンさせないようなブレーキ操作をするし,カーブでは減速していわゆる横Gを感じさせないようにしている。MT車なので,変速時の衝撃をいかに抑えるかということにもこだわっている。乗り心地の良さならそこらのドライバーに負けない自信がある。

f:id:shinji00:20210123112544j:plain
愛車のインプレッサGH8

ところが正直,運転する側は酔いづらいということもあって実際にはどのくらい快適な運転ができているか分からない。たとえ同乗者に聞いたとしても,乗せてもらう立場ゆえに遠慮して「酔っている」と言えていないだけかもしれない。 というわけで運転操作によるGと不快度を定量的に確認できる装置を作った。 (というのは建前で久しぶりになんか手動かして作ってみたかっただけです)

M5Stack GRAYで作成

  • 大雑把な仕様

    • 加速度の取得と不快度の計算
    • 不快度を可視化
      • 表情で示す。注視しなくても分かるように色の差をつける
    • G(加速度)の可視化
      • 矢印で示す。前後左右にどの程度のGが働いているかわかるように
    • キャリブレーション
      • 静止時に取付時の角度を基準として前後左右のGを計算するような初期化を行う
      • 起動時及び,Cボタン押下時にキャリブレーション
  • 実現方法

    • 加速度センサ,LCDディスプレイ,ボタンを搭載したM5stack GRAYを使用
    • ジャーク(加速度の時間変化のこと,躍度,加加速度とも)を使った不快度推定

画面のイメージはこんな感じ。

不快度の程度を4段階に分け,低い順に「ハッピーな顔」「普通の笑顔」「ぴえん顔」「げろ吐き顔」を表示するようにする。 ドライバーは装置画面を注視できないので,周辺視野でも顔を把握できるような図柄にした。特に「ぴえん顔」「げろ吐き顔」については顔の色を変えてヤバさを訴えることにした。(ブザー鳴らしても良かったかも)

Gは赤い矢印でその方向と大きさを示す。こちらも周辺視野で程度が分かるように,矢印の長さを伸ばすのではなく矢印自体を大きくするようにした。「なんか画面がめっちゃ赤くなってる」ように見えればそれはかなりのGを感じさせているということである。

不快度の定量化が吐きそうなほどしんどかった

ジャークが不快度に聞くという事前知識を持っていたので,「ジャーク,自動車,酔い」当たりのキーワードでヒットした文献『自動車の加減速と乗り心地の関係に関する研究』 を頼った。結論としては,直前3秒間の加速度のピーク値とジャークの実効値(二乗平均?)が効いていて,それらの重みづけ和が被験者実験で得た不快度をよく近似できるというものだった。この文献の式とパラメータをそのまま使えばすぐに実装できるだろうと思った。

しかしそこそこ開発を進めた段階で重みパラメータが文献中に明示されていないことに気づいてしまった。「加速度とジャークを標準化した後の重み」なら載っているが,どのようなデータを使って標準化したかもわからないので,結局不明のまま。

そこで重みパラメータを文献から取るのを諦めて,変数をジャーク1本に絞り,重みパラメータは実車を運転して実験しながらそれらしいものに合わせることにした。本当は同じ量のジャークでもその前後で不快度は異なるらしいが,ここも簡単のためジャークの実効値の絶対量だけ見ることにした。そもそも快不快なんて人やその人体調によって異なるので,もう目安にする程度のものができればいいのではとも思った。(やけくそ)

さて実験するにも筆者はそこまで酔いやすい体質ではない。とはいえ友人に協力してもらう時間もあまりなかった。ので,自ら酔いやすいコンディションを作り,実際に車を動かしながらパラメータを合わせることにした。具体的には直前にラーメンをしこたま食べてお腹いっぱいにし,酔いやすい状態を作った。(この時点でもう運転したくない)

この状態の自分が「気持ち悪いぴえん」となるタイミングで「ぴえん顔」が表示され,「吐きそう」と感じたタイミングで「げろ吐き顔」が表示されるように,パラメータを調整するのである。

実際に車に乗り,駐車場内の安全な範囲で急な加減速,急ブレーキ,急ハンドルを試しながら調整した結果,それらしいパラメータを設定することができた。たとえ徐行でもブレーキを強く踏んで停車すればかなり不快であることが分かる。本当に不快,吐きそう。

公道を走ってみると路上の段差(橋のつなぎ目など)を踏むだけでもすぐに「ぴえん顔」「げろ吐き顔」が出てくる。辛口でシビアな設定に感じたが,段差踏んで吐きそうになるのは事実なのでなにも間違ってはいない。

1速から2速,2速から3速の切り替えでも意外と毎回ぴえんになる。ドライバーとしては操作で体が動いているためか気にならないが,同乗者からするとクラッチ踏んだ時の無加速状態もクラッチつないだ後の加速も不快に感じるのだろう。例えば路線バスに乗った時のことを思い出すと,確かに発進時シフトチェンジが激しくて酔いやすかった気がする。あんな感じだろうか。

というわけで,できたコードはこんな感じです。ドキュメントはおいおい書きます。

github.com

得た経験と知見

  • 描画に数十ms時間がかかって,メインの加速度信号処理(100Hz)に支障が出る
  • 加速度を一定サンプルで取得しようとしたが,タイマ割り込みの機能と併用する(タイマ割り込み関数の中で加速度取得を行う)と「Guru Meditation Error: Core  1 panic'ed (Interrupt wdt timeout on CPU1)」みたいなエラーが発生して,再起動を繰り返してしまう
    • Loopの中で処理時間を計測し,処理時間を差し引いたdelay()を置くことで,10ms(100Hz)置きにloopを動作させるようにした。
    • IMU機能とタイマ割り込みは相性悪いのだろうか... 組み合わせた例もあまり無く,原因がよくわかっていない。
  • IMUは今現在最新のライブラリではMPU6886を使うと良いらしい

今後

  • 毎ループM5.Lcd.fillScreen(BLACK)で画面を塗りつぶしてから描画をすることによる画面のちらつきを直す。
    • 顔は変更時のみ描画すればよい
    • 矢印の更新は差分だけ描画しなおすように変更すればよい
  • 1ドライブ,または単位時間あたりに何回「ぴえん」「げろ吐き」を起こしたかをドライブ後にリザルト画面として出す。
    • 友人のアイデア。交代で運転しながら旅行するとき楽しそう。

参考文献

自動車の加減速と乗り心地の関係に関する研究

Arduino - M5Stack Gray スケッチサンプルのエラー|teratail

マルチタスクで実装 - m5stackで組込み!!

“躍度(やくど)”ってナンだ? 加速度のその先を見据えたマツダのクルマ作り - Car Watch

2019年に読んだ技術史本

この世界が消えた後の科学文明のつくりかた

Dr.STONE』の元ネタと知り,気になって読んだ。 核戦争か何かで科学文明が滅び人類が少数しか残らなかった大破局後の世界を仮定して, 単なるサバイバルにとどまらず,現代のような科学文明を復活させるために何をすればよいかという本です。

石鹸のつくりかた,火薬のつくりかた,動力のつくりかた,電池のつくりかた,無線機のつくりかた等々が解説されるので,読めば読むほどDr.STONEだなという感じ。 とはいえ解説は教科書みたいに詳細だし,作中であまり触れられなかった(これから触れる?)農業と外科の技術もカバーしている。 科学文明の復活を目指すので,必然的に技術史のような内容になる。

こういう技術史系の本読むと,今までとりわけ面白いとも思ってなかった分野が,実は自分達の生活・社会に強烈なインパクトを与えてきたことを知れて少し好きになれる。

例えば学生時代に大してときめきもしなかった「炭酸カルシウム」も,『Dr.STONE』や『この世界が消えた後の科学文明のつくりかた』での持ち上げられっぷりはすごい。畑の栄養状態をよくする,酸化カルシウムにして病気の蔓延を防ぐ,水酸化カルシウムにして水処理する,建設資材にする,海藻燃やして作った炭酸ナトリウムと混ぜて水酸化ナトリウムを作って石鹸づくりに使う,火薬の生成に使うなど割と何にでも使えるし,リアルに生存率に関わる物質なので,「炭酸カルシウムってすごい!好き!」とならざるをえないのだ。

アンモニアを生成するハーバー・ボッシュ法も好き。中学だか高校の先生が話してくれた「ドイツは空気から爆弾を作る」話も好きだけど,本書の「世界人口の三分の一が合成アンモニアによる肥料のおかげで腹を満たせている」話も影響力がデカすぎて好き。僕らの体の窒素のほとんどは合成アンモニアで作った窒素でできているわけだ。こんな手法,教科書に載せない方がおかしい。 今なら言える。炭酸カルシウムはいいぞ!ハーバー・ボッシュ法はすごいぞ!

化学に限らず,高校地理で習ったノーフォーク農法も土地を肥沃にし続けられて家畜も育つのですごいし,小学校から散々させられた手洗いも感染症の半分を防げるので良い。

そのほかトリビア的に好きな話は

  • 自転車の安定性はジャイロ効果あんまり関係ない(前輪のハブがハンドルより前にあるのが大事らしい)
  • 二十世紀初頭から電気自動車・蒸気自動車・ガソリン自動車すべて一般的に使用されていた

あたりです。知らなかった。

「ものづくり」の科学史 世界を変えた《標準革命》

就職してから「標準化」という言葉をよく聞くようになるものの,正直よくわからんと思って読んでみた。 本書によれば,

  • 互換性技術:部品のサイズを定め,同じ製品同士で部品交換ができる技術
  • 標準化:サイズを段階的に分けて種類を減らす
  • 規格:標準の中でも公的に定めたもの,デジュールスタンダード(⇔デファクトスタンダード)

だそうだ。

標準化誕生のすごい大ざっぱな歴史はこんな感じ。

まず,部品のサイズを統一することで同じモデルの銃同士で部品交換ができる互換性技術が18世紀のフランスで提唱・開発された。これは戦場で武器を応急修理する(部品交換で済ませる)という軍事上の利便性から生まれた。

互換性を持たせるには部品を決まった形に加工する技術が必要で,これは工作機械の導入によりなされた。工作機械の導入は豊かな資源に対して労働力の不足していたアメリカで特に盛んになった。(一方ヨーロッパは職人気質でイギリスでもラッダイト運動起こしてたくらい)

同じ形で部品を作れると標準(規格)を定めることができるようになった。最初はネジの規格,パイプの規格あたりから始まって,タイヤもドアも規格化されるようになった。標準化は部品サイズを少数の種類に絞るため(例えばアメリカの産業経済局は国内に287種類あったタイヤのサイズを9種類に削減した),全国規模で連携した大量生産を可能にした。(一つの工場が一つの品種の製造に専念できる)

逆に言うとそれまではネジですら同じ大きさのものはこの世に一つもなかった。標準化が当たり前の現代からしたら考えられない世界である。部品同士のはめ合わせもその都度やすり掛けして調整していたという。

標準化もミリタリーと絡むと魅力的に見えてしまう。標準化は第一次,第二次大戦でのアメリカの勝利を決めたといっても過言ではないそうだ。「物量のアメリカ」の背景には,豊富な資源だけでなく標準化による武器の大量生産体制の活躍もあったわけだ。

ちなみにストラテジーゲームCivilization 5のテクノロジー「共通規格」を取得すると「第1次大戦歩兵」を生産できるようになる。そういうことだったのか。標準化は強い!

Runtime error - Civilization5(Civ5 シヴィライゼーション5) 攻略Wiki

ミリタリーな話が多いけど,作業の標準化,安全規格,キー配列,通信プロトコル,輸送系(コンテナサイズの規格とか)といった身近な話も扱われてます。

僕はこの本を読んでから,家の黒靴下を1種類に標準化して互換性を持たせてみました。 ペアを探さなくていいのと,一つ失くしても使い続けられるのでので便利!

工学の歴史ー機械工学を中心に

機械工学を中心に,運動学の始まりから,建築,時計,水車,蒸気機関,鉄道…の技術史を扱った本。もともと別物扱いだった「科学」と「技術」がルネサンスあたりから融合し始めて,産業革命後期では科学による技術の裏付けが欠かせなくなり,理工系という人たちが生まれた。けどこれからは理工系に加えて人と社会のこともよく分かる人が大事だよねという話。

この技術史本は出てくる登場人物が軒並み「数学・理科の教科書で見る偉人」なので,「信長よりニュートンが好き」という人にとっては心が躍る内容になっている。

何よりも,引用される参考文献のリアリティがすごく良い。 例えばニュートンの『プリンキピア』(1687)を紹介するにもこんな感じ。

 『プリンキピア』の構成は「著者から読者への序文」,「定義」,「公理,または運動の法則」,第1編「物体の運動について」,第2編「(抵抗のある媒質中における)物体の運動について」,第3編「世界体系について」となっている.「定義」では質量,運動量,力の定義と絶対時間・空間に関する注があり,「公理」ではいわゆる運動の三法則とその系を述べて本文への導入とする.第1編では中心力のもとでの運動で,ケプラーの法則の証明や惑星の運動に必要な力学問題が扱われる.第2編では抵抗と速度の関係を種々仮定したときの媒質中の運動,流体力学,振動,波動,流体の円運動が述べられ,デカルトの渦動宇宙論が力学的に成り立たないことを徹底的に論破する.

ニュートンはプリンキピアを著した」くらいの話は聞いたことがあっても,その書籍がどのくらいのボリュームで,どんな構成で,どんな内容がどこにどんな風に書いてあるかまでを知る人はなかなかいないと思う。本書はそこまで踏み込んでくれる。今まで歴史上の遠い存在だった文献が,蔦屋書店とかGoogle Scholerにあるんじゃないかってくらい身近な存在に感じられる。

ガリレオが晩年に書いた『新科学対話』(1638)は,彼の動力学研究(放物運動とか衝突とか)の集大成を,登場人物の対話を通して紹介するらしい。図もすごくコミカルで,今で言う「漫画で分かる動力学!」みたいなことをガリレオさんもやってたんだなと思った。

Kindle読書履歴に基づくおすすめ

技術を歴史と絡めて知るのも楽しいし,歴史の背景に技術を見出すのも楽しい。

こういった本をもっと読んでみたいのでKindleのレコメンドを確認してみた。

  • 科学の発見
  • 科学の社会史
  • パラダイムと科学革命の歴史
  • 世界史を大きく動かした植物
  • 医学の歴史
  • 人はどのように鉄を作ってきたか
  • 世界をつくった6つの革命の物語
  • 天才数学者はこう解いた、こう生きた
  • IT全史

本の消化力が心配だけど2020年も楽しめそう。