【Unity】8月8日はそろばんの日 16進そろばんを作ってみた。

# はじめに
「インドでゼロが発明された」というが一体どういうことなのかという疑問から数学の歴史を調べはじめて、10世紀あたりまでを資料として「[数学史 黎明期 - SlideShare](https://www.slideshare.net/yaju88/ss-72292130)」で公開しています。

その中で日本の算盤は上珠1つ下珠4つですが、中国の算盤が上珠２つ下珠５つとなっており、10進法と16進法の計算が可能であることを知りました。
8月8日がそろばんの日ということもあり、勉強がてらUnityで中国の算盤を作ってみようと思った次第です。

# そろばんの歴史

* [アバカス(abacus) - wiki](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%90%E3%82%AB%E3%82%B9)
* [そろばん - wiki](https://ja.wikipedia.org/wiki/%E3%81%9D%E3%82%8D%E3%81%B0%E3%82%93)
* [そろばんの歴史 - 日本珠算連盟](http://www.shuzan.jp/gakushu/history/)
* [江戸の数学 年表](http://www.ndl.go.jp/math/chronology.html)

中国の算盤が上珠２つ下珠５つだったのは、当時の目方(尺貫法)の単位が1斤を16両(16進法)としていたので、1桁に15までおけるものが重宝だったといわれています。
室町時代末期に宋(中国)の商人が日本に伝え、日本にもこの形が輸入されました。日本では16進数の計算は必要ではなかったのですが、江戸時代の乗算や除算の方法では、一時的に1桁に10以上溜まる場合もあったこともあり、江戸時代までは上珠2つの形式が多く使われていました。
中国から伝来した当初には枠が大きく珠の形状が丸かったが、日本では江戸時代にそろばんが広まっていくうち枠の大きさが手の大きさに合わせて小さめに珠の形状がすばやく計算しやすいよう円錐を2つ合わせた菱形のような形に変化していきました。

明治時代になって不要な5珠を1つ減らした上珠1つ下珠5つの形が普及しました、現在の上珠1つ下珠4つに統一されたのは1935年(昭和10年)となります。速算術では5珠だと遅くなってしまいます、一番下の珠は残して使ってた人も多いようです。
下珠5つは位が上がることを確認する意味があり、間違いが致命的になる商人の方には使われていました。

このように日本の算盤は高速で計算できるように工夫がなされてきており、このことが世界的な普及につながっています。国際的にメートル法が使用される現在では中国でも上珠1つ下珠4つの算盤が普及してきているとのこと。

# そろばんが見直されている
8/5のマツコ会議でも海外でそろばんを教える女性がこんな凄いスキルがあるの英語が出来ないことから英語を学んでいると仰っていました。

コンピューターに押され、一度は姿を消しましたが、集中力向上などの効果が認められ、再び教える学校が増え始めたそうです。
2000年代半ばより再びそろばんが見直されてきており、そろばん塾の塾生は再び増加傾向にあるそうです。

現在の日本の小学生は３～４年生で必ず珠算を学んでいます。

# 16進数そろばん
ここからが本題です。
16進数そろばんで検索すると「[そろばんで１６進数、2進数計算 Abacus & Hexadecimal/Binary](https://www.youtube.com/watch?v=rVLGy5LYfEQ))」の動画が見つかります。
この動画に則ってUnityで作った16進そろばんで一部を計算してみます。

※コンピューターで使われる16進数にしているので、昔に中国で使われていた計算と違うかも知れません。

下記の動画は「[ScreenGif](http://www.screentogif.com/)」を使っています。

## 10進 48 + 51 = 99
最初は通常の10進計算です。桁上りを10進にするためDecにチェックを入れます。
![48Plus51.gif](https://qiita-image-store.s3.amazonaws.com/0/14053/5816a2be-18a6-c26b-6fca-060c5e794c41.gif)

## 16進 F4 + 8A = 17E
桁上りを16進にするためHexにチェックを入れます。
![F4Plus8A.gif](https://qiita-image-store.s3.amazonaws.com/0/14053/61cb9f13-7a4d-ec10-0d8f-6117683644f4.gif)

# ゲーム投稿サイト unityroom
AndroidやiPhoneのスマホアプリとして公開するほどでもないし、WebGLビルドして公開するところがないかと検索したところ、「[ゲーム投稿サイト unityroom](https://unityroom.com/)」を見つけました。
[【unity】unityroomに投稿する方法](http://blog.naichilab.com/entry/how-to-upload-unityroom)によれば、Twitterアカウントがあれば投稿できるようです。

# GitHubに公開
>ゲームはUnityRoomってのがある…が、ゲーム専門って有るので、そこにゲーム性無いのを上げるのはちょっとアウトだろうなぁと思う。
[WebGL投稿先としてGithubを使ってみる](http://for.hatenablog.jp/entry/2017/07/11/021333)

上記サイトを見つけました。確かにゲームではないしWebGL投稿先としてGit Hubが使えるならソースリストも公開するしということで、下記サイトに公開しました。
https://yaju.github.io/WebGLBuild/Abacus16/

![Abacus16.png](https://qiita-image-store.s3.amazonaws.com/0/14053/ebdeda18-f352-979e-1b9e-b2b9a0232aa7.png)

10進モード(Dec)の際に全ての珠を使うと計算が合いませんが、これは仕様です。
確認してから払いをして、位を繰り上げるという手順になっていたからです。

ソースリストはこちらになります。
https://github.com/yaju/Abacus16

# 最後に
2015年に静岡Developers勉強会で「[UnityとBlenderハンズオン - SlideShare](https://www.slideshare.net/yaju88/presentations)」でUnityを勉強したのですが、1年半以上離れていたらUnity2017までバージョンが上がってるし色々と忘れていました。

リハビリも兼ねて、今回16進数そろばんを作りました。

物理演算で下の珠をクリックすると直上の珠に順々に衝突してバーで自動で止まるようにするのは上手く出来たなと思います。まー途中で珠が衝突して変な方向にバラバラになってしまったりと微妙に調整が必要でしたけどね。

Toggleの処理が初めてで手間取ったのと、WebGLでビルドしたらGUIや文字の大きさと位置がずれていたため作り直したりと8月8日の公開が遅れてしまったのが残念でした。