ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

youtubeの音量バーのデザインについての話

[日記][youtube]

普段youtubeを使っていて特に不便なく使っているのですが、今日ふと疑問に思ったので書こうと思います。

  • 音量バーを隠すことに意味はあるのか?という話

まず下の画像の音量アイコンを見てみましょう。
f:id:takeg:20140913070651p:plain
※2014年9月13日のyoutubeの画面デザインです。
音量アイコンのみで、音量の大きさを操作できるバーは表示されていません。
しかしこのアイコンにカーソルを合わせると、
f:id:takeg:20140913071551p:plain
音量バーが表示されるというデザインになっています。

本題は、このデザインは必要か?という話。
画面右側空いてるじゃん。いちいちバー隠さなくても、ずっと表示しとけば良くないですか?目に見える情報が少なくなっていることで、逆にシンプルじゃなくなっているというか、操作性が損なわれている感じがします。少なくとも初見の人(とても少ないと思うけど)に音量を操作するバーを探すことを強いているデザインになっているのではないでしょうか。シンプルってなんだろうね。

f:id:takeg:20140913072501p:plain
上の画像はWindowsの音量操作画面である。こんなでかい音量操作バーが常時表示されていたら邪魔でしょうがないですよね。普段はアイコン表示、操作したいときにはバーを表示。これはいいデザインだ。納得できる。
しかしyoutubeのデザインは常時表示していてもなんらデメリットはないはずなのに、いちいち隠すデザインになっています。これなくてもいいんじゃね?そういうことを疑問に思った早朝7時でした。

f:id:takeg:20140913073110p:plain
音量バーは常時表示でした。
他の動画サイトと比べてみたり、普段習慣化されているけどこのデザイン初見時にはわからなかったなあとか、明らかにクソだよなあとかいうデザインを探してみると面白いかもしれません。

MMDAgentでモデルの回転

[MMDAgent][ROTATE_START]

MMDAgentでモデルを回転させるのには2パターンあると思う

  1. ROTATE_STARTを使う
  2. 多分これが方法としてはシンプルな方法。 文法は以下。

    ROTATE_START|(model alias)|(x rotation),(y rotaion),(z rotation)|(GLOBAL or LOCAL rotation)|(rotation speed)

    例えば公式のサンプルスクリプトを環境に入れている時、model aliasとしてmeiが設定されているので、メイを回転させる記述例は次のようになる。

    1 1 KEY|1     ROTATE_START|mei|0,90,0|LOCAL|10

    キーの1を押すと、メイがy軸正の方向に90度回転した後、静止します。

  3. TURN_STARTを使う

  4. 文法は以下。

    TURN_START|(model alias)|(x position),(y position),(z position)|(GLOBAL or LOCAL position)|(rotation speed)
    TURN_STOP|(model alias)

    記述例

    1 1001 KEY|0     TURN_START|mei|0,0,0|LOCAL|30
    1001 1 KEY|0     TURN_STOP|mei

    0キーを押すと回転を始め、また0を押すと止まります。
    注意としては、各positionの値をmeiのpositionと同じ値に設定しないと変な挙動します。あとこのpositionが具体的になにを指しているかは不明。

ちなみにSample Scriptのコメンドアウトされているところに使用できるコマンドが記述されているので、それっぽいものを試してみるといいかもしれません。

みんなgit使えて偉いね、という話

[github][git]

To https://github.com/username/hogehoge
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/username/hogehoge'

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

こんなエラーが出た。
原因はリモートリポジトリのファイルAとローカルリポジトリのファイルAが互いに変更されていて、どちらの変更を優先していいかわからない、つまり競合状態にあるのが原因らしい。
チームで開発しているとよくあるエラーらしいのだが、これの対処方法がわからない。色々ネット上の記事を読んで回ったがいまいちわからない。というかそもそもgitの仕組み自体わかっていない状態だ。gitについて詳しい人は頭のなかで「あれがこうなって今こういう状況だから……」と組み立てることができるのだろうか。すごいね。

とりあえずみんな大好き「サルでもわかるGit入門」の「競合の解決」をみてみる。

どうやら競合状態にある場合は、競合しているファイルを開き、手動で直せと書いてある。おわりにはサルが「おつかれさま!これでGitの基本的な使い方の説明は終わりばい!」とか言ってる。なめとんのか。

テキストファイルならまだしも、バイナリファイルとかの場合はどうするのだろうか。競合箇所が多い場合は?いろいろ無理があるのではないか。というか私が抱えている症状はまさにそれで、手動じゃ直す気になれないファイルばかりだ。

・解決方法1:「とにかく俺のローカルが正しいんだよ」
開発者が自分1人か、あるいはジャイアンであるかいずれかの場合では、強制的にpushすればよい。

git push --force 

これで強制push。どうなっても知らない。

・解決方法2
いろいろ探した結果、マージでバイナリファイルがコンフリクトした場合のGitの動作と対処方法というサイトに行き着いた。
マージ元とマージ先のいずれかを優先させるかの決定はcheckoutを使えば良い?いけそうな気がしたが症状は直らず。
merge...?って人はここでも見て勉強しましょう。

・解決方法3
【git】git pushがrejectされたときの対応方法の対応方法を上から順番に試してみる。

・まとめ
gitはよくわからんまま使わないほうが良い。なんとなく便利って聞いたから程度で始めるとよくわからんことになる。運用するなら勉強をしましょう。

進行方向に身体を向かせて歩かせる

[Unity][Quaternion][LookRotation]

void Update () {
//Walk
if(Input.GetButton("Horizontal") || Input.GetButton("Vertical")){
transform.Translate(Vector3.forward * Time.deltaTime * speed * 1 ); //正面
}

//Direction of Caracter's face
if(Input.GetButton("Horizontal") || Input.GetButton("Vertical")){
transform.rotation = Quaternion.LookRotation(transform.position + 
(Vector3.right * Input.GetAxisRaw("Horizontal")) + 
(Vector3.forward * Input.GetAxisRaw("Vertical")) 
- transform.position);
}
}

ミソはQuaternion.LookRotation
これでキャラクターの身体の向きを指定している。
Quaternion.LookRotation(向きたい方向 - 現在のポジション)で、キャラクターの向きを指定している。
ここを参照。わかりやすいスクリプト例が記載されています。
似たようなのでtransform.LookAt(target)もある。

Unityで魔理沙を動かす(Animator)

諸事情によりMMDのキャラクターをUnityで動かさなくてはならない。かなり苦戦したのでメモを残す。

 

  • 前提

MMD for Unityでミクさんとケロリン町を周るお話 その1をひと通り終わらせていること。上記リンク先は初音ミクだが、私は東方キャラクターの魔理沙を動かすことにします。

 

  • 確認

魔理沙はfbxになっているか

・RigはHumanoidになっているか

あとは忘れた。

 

  • Animator Controllerの作成。

とりあえず魔理沙を走らせてみる。

Projectビューを右クリックしてAnimator Contorollerを作成。

「右クリック>Create State>Empty」で空のステイトを作成。Inspectorビューで名前を変更。「Marisa@Walk」にする。

「Motion」にアニメーションをセットする。突然だけどAssetsに「Locomotion Setup/Locomotion/Animations」にたくさんアニメーションがあるでしょ。

Locomotionてなんだよ。

たぶんここを参照してダウンロードしたと思うんですけど(うろ覚え)

とにかくその中に「Walk」ってアニメーションファイルを「Motion」にセットする。

同様にして「Marisa@Idle」も作る。

ちなみに↓のような画面(遷移状態は適当)。

 

f:id:takeg:20140810192712p:plain

左下に「Parameters」ってのがあるから「+」をクリックしてパラメーターを追加、「Bool」を選択する。名前を「isWalking」にする。これは歩かせたりするときの条件分岐に使ったりパラメータ。今回はBool値で管理します。他にもint型やfloat型があるので、お好みで。ちなみに「-」でパラメータを消せる。

ステイトは右クリックの「Set As Default」でデフォルトを変えられる。「Marisa@Idle」をデフォルトする。

「MakeTransform」で状態遷移を追加できる。アイドル状態から歩かせたり、歩いている状態からアイドルにさせるので、双方向に矢印を追加する。

  • ステイトの遷移条件の設定

矢印をクリックすると、InspectorビューのConditionsで状態遷移の遷移条件を設定できる。isWalkingがtrueになったら歩くモーションをして欲しいので、「Marisa@Idle→Marisa@Walk」の矢印をクリック、isWalkingをTrueにする。

だいたいこんな感じ。

 

Hierarchyに動かしたいキャラクターを追加した状態で(今回は魔理沙)、そのキャラにAnimatorコンポーネントを追加する。

Controllerに先ほど作ったAnimator Controllerを、Avatarに動かすキャラクターのアバターを張り付けます。

こんな感じになってます。

f:id:takeg:20140810193709p:plain

Apply Root Motionのチェックはここでは外して置いてください。理由は僕にもわかりません。

 

最小のスクリプトだけ載せる。

private Animator animator;

void Start(){

animator = GetComponent<Animator>();

}

void Update(){

if(Input.GetButton("Horizontal") || Input.GetButton("Vertical")){
animator.SetBool("isWalking",true);

}

else{

animator.SetBool("isWalking",false);

}

このような感じでアニメーションのパラメータ管理ができます。当然スクリプトはキャラクターに貼り付ける。

 

  • おわり

あとなにか細かいことをした気がするが、申し訳ないが忘れてしまった。

 

MMDAgent導入

1.公式サイトに行く。

http://www.mmdagent.jp/

 

2.Source CodeからMMDAgent version 1.4をダウンロード。

 

3.Windowsの場合はBinary Package (for 32-bit Windows)からもダウンロードする。

 

4.ついでにMMDAgent "Sample Script" version 1.4からもBinary Packageをダウンロードしておく。

 

5.解凍する。

 

6.MMDAgent_win32-1.4を開く。

 

7.README.txtを読む

 

8.MMDAgent.mdfをMMDAgent.exeにドラッグアンドドロップする。

 

9.なんか始まる。

 

10.動いているのを見て安心する。おわり。

 

言語はC++OpenCVとか使うかもしれないのでVisual C++ 2010をインストールしておく。おわり。

プラグイン作成するときは下記サイト様からひな形がインストールできる。

http://cube370.wiki.fc2.com/wiki/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90

これでほんとうにおわり。

 

Unityの実行ファイルのウィンドウサイズを可変にする方法

Unityの画面のタブから"File"→"Build Settings..."を選択。下のような画面が出てくる。

f:id:takeg:20140619104346p:plain

この画面の左下の"Player Settings..."を押すと、Unityの本体画面のInspectorがセッティング画面に切り替わっている(気づきにくい)。

f:id:takeg:20140619104744p:plain

"Resizable Window"項目にチェック。これでBuildすると、ウィンドウサイズを自由に変更できる実行ファイルのできあがり。