トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

Makey Makey+AR

Makey Makey

電気が通るものならなんでもキーボードにしてしまうやつです。

www.makeymakey.com

本体はこれ↓

f:id:bibinbaleo:20170716150141p:plain

パソコンに本体をつないで、ミノムシクリップを自分の体と、バナナなどの電気が通るものに通して、話ができたらキーボードが押したことになる。

f:id:bibinbaleo:20170716150630p:plain

昔展示で使った時はこんな感じになりました。

f:id:bibinbaleo:20170716150314p:plain

小麦粘土も電気が通るのでこれをボタンにしたりできます。

f:id:bibinbaleo:20170716150307p:plain

Makey Makey - An Invention Kit for Everyone - 電子工学 実験 発明キット

Makey Makey - An Invention Kit for Everyone - 電子工学 実験 発明キット

 

AR

2年前ぐらいに買って、展示で使って以来全く使ってませんでしたが、久しぶりに遊びたくなりました。

以前使った時はProcessingでやりましたが、今回はUnityで何かしたいな〜

shiropen.com

この記事みたいな感じで、ARマーカーにタッチしたら色とかライティングが変わるとか面白そう。って言うか記事のやつって深度センサーで物体の形をとっているらしいからTango使ったらできるのかな?kinectでやってるみたいですが。

Unity

ARちかmakeymakeyを使うので複雑に見えますが、やることは単純にキー入力でマテリアルの色を変えるだけです。

docs.unity3d.com

docs.unity3d.com

ここら辺を組み合わせて、スペースを押したら色がランダムで変わるやつができました。

f:id:bibinbaleo:20170716160848p:plain

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class material_change : MonoBehaviour {

    public Color colorStart = Color.red;
    public Color colorEnd = Color.green;
    public float duration = 1.0F;
    public Renderer rend;
    void Start() {
        rend = GetComponent<Renderer>();
    }
    void Update() {
        if (Input.GetKeyDown (KeyCode.Space)) {
            
            float lerp = Mathf.PingPong (Time.time, duration) / duration;
            rend.material.color = Color.Lerp (colorStart, colorEnd, lerp);
        }
    }
}

 

makey+ARマーカー

電気が通ってマーカーにもなりそうなものがなかったので、マーカーとボタンは別々にしました。

makey makeyのスペースのところにさして、

f:id:bibinbaleo:20170716164727j:plain

完成がこちら

Animated GIF  - Find & Share on GIPHYwww.giphy.com

f:id:bibinbaleo:20170716165030p:plain

最後に

makeymakey自体は単純ですが、組み合わせを考えたら色々面白いことができそうです。何も思いつきませんが。

 

追記:MMDモデルのマテリアルを変えるっていうのをしようと思ったのですが、指定したマテリアルを変えることができませんでした。

ここからの話は意味不明だと思います。未来の自分への備忘録です。

f:id:bibinbaleo:20170716194135p:plain

 一つのオブジェクトに複数のマテリアルがついていて、スクリプトをつけたらそのうちの一つしか色変更されない。

インスペクタでマテリアルを指定して、そのマテリアルの色を変更するのってどうやるんでしょうね。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ginkitune : MonoBehaviour {
    //public Material material;
    public Color color1 = Color.red;
    public Color color2 = Color.green;
    public float duration = 1.0F;
    public Renderer[] rend;
    void Start() {
        //rend[0] = GetComponent<Renderer>();
        //rend[1] = GetComponent<Renderer>();
    }
    void Update() {
        //color1 = GetComponent<Color>();
        if (Input.GetKeyDown (KeyCode.Space)) {

            //float lerp = Mathf.PingPong (Time.time, duration) / duration;
            rend[0].material.color=color1;
            rend[1].material.color=color2;
            //rend.material.color = (colorkami);
        }
    }
}

Rend(gameobject?)を指定することで別々のオブジェクトなら一つのスクリプトで色を変えることができるのですが

f:id:bibinbaleo:20170716194807p:plain

MMDmecanimで変換されたFBXの構造の問題ですかね?

「rend.material.color=color1」のmaterialって指定するものではなく普遍的?な存在???だからここに指定したやつをつけても意味がなかった。

キタキツネをぎんぎつねに変えたかっただけなのに

モデルはヘナ羊様のキタキツネアニメ版です。かわいい

3d.nicovideo.jp