tag:blogger.com,1999:blog-39361955853547000062024-03-14T01:32:26.215+09:00あの技術の名前を僕たちはまだ知らないテクノスポーツHADOを開発するmeleap inc.のブログ。
テクノロジー×スポーツで生み出される新たなスポーツ、
テクノスポーツにより、膝がガクガク震えるほど世界を面白くする!
ウェアラブル、AR、VR、ジェスチャー認識、ゲーム、その他NUI関連の技術について書きます。Anonymoushttp://www.blogger.com/profile/13037278032560545273noreply@blogger.comBlogger31125tag:blogger.com,1999:blog-3936195585354700006.post-88793496810390378712015-10-02T13:32:00.002+09:002015-10-02T13:32:45.760+09:00[Android]AndroidHttpClientがNGになっていたので、HttpURLConnectionでアクセスしてみた<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; word-wrap: break-word;">
AndroidHttpClientを利用しようとすると利用してはいけないと怒られてしまうので、<br style="box-sizing: border-box;" />HttpURLConnectionを使ってHttp通信を行いました。<br style="box-sizing: border-box;" />今回はヘッダー領域はいらないのでページの内容だけを取得するクラスです。</div>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; margin-top: 1.6em; word-wrap: break-word;">
参考:<br style="box-sizing: border-box;" />Android’s HTTP Clients<br style="box-sizing: border-box;" /><a href="http://android-developers.blogspot.jp/2011/09/androids-http-clients.html" style="background-color: transparent; box-sizing: border-box; color: #337ab7; text-decoration: none; word-break: break-all; word-wrap: break-word;">http://android-developers.blogspot.jp/2011/09/androids-http-clients.html</a></div>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; margin-top: 1.6em; word-wrap: break-word;">
HttpURLConnectionを使用してHTTP通信を行う<br style="box-sizing: border-box;" /><a href="http://techbooster.jpn.org/andriod/application/6812/" style="background-color: transparent; box-sizing: border-box; color: #337ab7; text-decoration: none; word-break: break-all; word-wrap: break-word;">http://techbooster.jpn.org/andriod/application/6812/</a></div>
<div class="code-frame" data-lang="java" style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 0; margin: 1em 0px;">
<div class="code-lang" style="background-color: rgba(0, 0, 0, 0.0666667); box-sizing: border-box; color: #555555; display: inline-block; font-size: 12px; line-height: 1; margin: 0px; padding: 3px 6px;">
<span class="bold" style="box-sizing: border-box;">HttpClient.java</span></div>
<div class="highlight" style="background: rgb(255, 255, 255); box-sizing: border-box;">
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13px; line-height: 18px; overflow: auto; padding: 8px 15px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"><span class="kd" style="box-sizing: border-box; font-weight: bold;">public</span> <span class="kd" style="box-sizing: border-box; font-weight: bold;">class</span> <span class="nc" style="box-sizing: border-box; color: #445588; font-weight: bold;">HttpClient</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">{</span>
<span class="kd" style="box-sizing: border-box; font-weight: bold;">private</span> <span class="n" style="box-sizing: border-box;">HttpURLConnection</span> <span class="n" style="box-sizing: border-box;">connection</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="kc" style="box-sizing: border-box; font-weight: bold;">null</span><span class="o" style="box-sizing: border-box; font-weight: bold;">;</span>
<span class="kd" style="box-sizing: border-box; font-weight: bold;">public</span> <span class="n" style="box-sizing: border-box;">String</span> <span class="nf" style="box-sizing: border-box; color: #990000; font-weight: bold;">get</span><span class="o" style="box-sizing: border-box; font-weight: bold;">(</span><span class="n" style="box-sizing: border-box;">String</span> <span class="n" style="box-sizing: border-box;">url</span><span class="o" style="box-sizing: border-box; font-weight: bold;">){</span>
<span class="n" style="box-sizing: border-box;">String</span> <span class="n" style="box-sizing: border-box;">pageData</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="s" style="box-sizing: border-box; color: #dd1144;">""</span><span class="o" style="box-sizing: border-box; font-weight: bold;">;</span>
<span class="k" style="box-sizing: border-box; font-weight: bold;">try</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">{</span>
<span class="n" style="box-sizing: border-box;">URL</span> <span class="n" style="box-sizing: border-box;">u</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="k" style="box-sizing: border-box; font-weight: bold;">new</span> <span class="nf" style="box-sizing: border-box; color: #990000; font-weight: bold;">URL</span><span class="o" style="box-sizing: border-box; font-weight: bold;">(</span><span class="n" style="box-sizing: border-box;">url</span><span class="o" style="box-sizing: border-box; font-weight: bold;">);</span>
<span class="n" style="box-sizing: border-box;">connection</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">(</span><span class="n" style="box-sizing: border-box;">HttpURLConnection</span><span class="o" style="box-sizing: border-box; font-weight: bold;">)</span><span class="n" style="box-sizing: border-box;">u</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="na" style="box-sizing: border-box; color: teal;">openConnection</span><span class="o" style="box-sizing: border-box; font-weight: bold;">();</span>
<span class="n" style="box-sizing: border-box;">connection</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="na" style="box-sizing: border-box; color: teal;">setRequestMethod</span><span class="o" style="box-sizing: border-box; font-weight: bold;">(</span><span class="s" style="box-sizing: border-box; color: #dd1144;">"GET"</span><span class="o" style="box-sizing: border-box; font-weight: bold;">);</span>
<span class="n" style="box-sizing: border-box;">connection</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="na" style="box-sizing: border-box; color: teal;">setInstanceFollowRedirects</span><span class="o" style="box-sizing: border-box; font-weight: bold;">(</span><span class="kc" style="box-sizing: border-box; font-weight: bold;">false</span><span class="o" style="box-sizing: border-box; font-weight: bold;">);</span>
<span class="n" style="box-sizing: border-box;">connection</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="na" style="box-sizing: border-box; color: teal;">connect</span><span class="o" style="box-sizing: border-box; font-weight: bold;">();</span>
<span class="n" style="box-sizing: border-box;">InputStream</span> <span class="n" style="box-sizing: border-box;">is</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="n" style="box-sizing: border-box;">connection</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="na" style="box-sizing: border-box; color: teal;">getInputStream</span><span class="o" style="box-sizing: border-box; font-weight: bold;">();</span>
<span class="n" style="box-sizing: border-box;">pageData</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="c1" style="box-sizing: border-box; color: #999988; font-style: italic;">// ストリームの内容を転記;</span>
<span class="n" style="box-sizing: border-box;">is</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="na" style="box-sizing: border-box; color: teal;">close</span><span class="o" style="box-sizing: border-box; font-weight: bold;">();</span>
<span class="o" style="box-sizing: border-box; font-weight: bold;">}</span> <span class="k" style="box-sizing: border-box; font-weight: bold;">catch</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">(</span><span class="n" style="box-sizing: border-box;">MalformedURLException</span> <span class="n" style="box-sizing: border-box;">e</span><span class="o" style="box-sizing: border-box; font-weight: bold;">)</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">{</span>
<span class="n" style="box-sizing: border-box;">e</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="na" style="box-sizing: border-box; color: teal;">printStackTrace</span><span class="o" style="box-sizing: border-box; font-weight: bold;">();</span>
<span class="o" style="box-sizing: border-box; font-weight: bold;">}</span> <span class="k" style="box-sizing: border-box; font-weight: bold;">catch</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">(</span><span class="n" style="box-sizing: border-box;">IOException</span> <span class="n" style="box-sizing: border-box;">e</span><span class="o" style="box-sizing: border-box; font-weight: bold;">)</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">{</span>
<span class="n" style="box-sizing: border-box;">e</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="na" style="box-sizing: border-box; color: teal;">printStackTrace</span><span class="o" style="box-sizing: border-box; font-weight: bold;">();</span>
<span class="o" style="box-sizing: border-box; font-weight: bold;">}</span>
<span class="k" style="box-sizing: border-box; font-weight: bold;">return</span> <span class="n" style="box-sizing: border-box;">pageData</span><span class="o" style="box-sizing: border-box; font-weight: bold;">;</span>
<span class="o" style="box-sizing: border-box; font-weight: bold;">}</span>
<span class="o" style="box-sizing: border-box; font-weight: bold;">}</span>
</pre>
</div>
</div>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; margin-top: 1.6em; word-wrap: break-word;">
URLやHttpURLConnectionのインスタンスを再利用できないかあれこれ頑張ろうとしましたが、<br style="box-sizing: border-box;" />少なくともHttpURLConnectionはインスタンスの再利用はできないようです。<br style="box-sizing: border-box;" />それと非同期でないため注意してください。</div>
<div class="code-frame" data-lang="text" style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 0; margin: 1em 0px;">
<div class="highlight" style="background: rgb(255, 255, 255); box-sizing: border-box;">
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13px; line-height: 18px; overflow: auto; padding: 8px 15px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;">// 使い方
HttpClient client = new HttpClient();
String page = client.get("http://localhost:8080/index.html")</pre>
</div>
</div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-52271126963335783412015-09-03T14:40:00.001+09:002015-09-03T14:40:08.455+09:00[Android]ACRAを利用して好きなタイミングでクラッシュレポートを送信する<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; word-wrap: break-word;">
参考:<br style="box-sizing: border-box;" /><a href="https://github.com/ACRA/acra/wiki/AdvancedUsage" style="background-color: transparent; box-sizing: border-box; color: #337ab7; text-decoration: none; word-break: break-all; word-wrap: break-word;">https://github.com/ACRA/acra/wiki/AdvancedUsage</a></div>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; margin-top: 1.6em; word-wrap: break-word;">
ACRAライブラリを利用することでクラッシュレポートの通知ができます。<br style="box-sizing: border-box;" />ただ、ネットワーク環境がない状態でエラーが発生した場合の状況も入手したかったので、<br style="box-sizing: border-box;" />その方法をメモで残そうと思います。</div>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; margin-top: 1.6em; word-wrap: break-word;">
エラー発生時はエラー情報をファイルに保存するだけにし、<br style="box-sizing: border-box;" />ネットワーク環境につながっているときに後から送信するという方法で実装しました。</div>
<ol style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.7; margin-bottom: 1em; margin-top: 1em; padding-left: 1.5em;">
<li style="box-sizing: border-box; list-style-type: decimal;">クラッシュレポート用のクラス作成</li>
<li style="box-sizing: border-box; list-style-type: decimal;">ReportSenderの作成</li>
<li style="box-sizing: border-box; list-style-type: decimal;">ACRAの設定</li>
</ol>
<h2 style="background-color: white; border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 22px; font-weight: normal; line-height: 1.225; margin: 64px 0px 12px; padding-bottom: 8px; position: relative;">
<span class="fragment" id="クラッシュレポート用のクラス作成" style="box-sizing: border-box; display: block; position: relative; top: -10px;"></span><a href="http://qiita.com/manbo34/items/71fd08f666af84aeab64#%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E7%94%A8%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E4%BD%9C%E6%88%90" style="background-color: transparent; box-sizing: border-box; color: #337ab7; text-decoration: none; word-break: break-all; word-wrap: break-word;"></a>クラッシュレポート用のクラス作成</h2>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; word-wrap: break-word;">
クラッシュレポートの内容をファイルに保存、読み込みを行うクラス<br style="box-sizing: border-box;" />※Read,Write処理部分は省略</div>
<div class="code-frame" data-lang="lang" style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 0; margin: 1em 0px;">
<div class="code-lang" style="background-color: rgba(0, 0, 0, 0.0666667); box-sizing: border-box; color: #555555; display: inline-block; font-size: 12px; line-height: 1; margin: 0px; padding: 3px 6px;">
<span class="bold" style="box-sizing: border-box;">CrashReport.java</span></div>
<div class="highlight" style="background: rgb(255, 255, 255); box-sizing: border-box;">
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13px; line-height: 18px; overflow: auto; padding: 8px 15px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;">public class CrashReport {
private static final String CRASH_REPORT_FILE = "crash_report.txt";
private Context context;
private StringBuilder report = new StringBuilder();
public CrashReport(Context context) {
this.context = context;
// ロード処理
.
.
.
report.append(loadData);
}
public void add(CrashReportData errorContent) throws JSONReportBuilder.JSONReportException{
// レポートを追加
report.append("\n------------------------------------------------------------\n");
report.append(errorContent.toJSON().toString().replaceAll("\\\\n", "\n").replaceAll("\\\\t", "\t"));
}
public void save() throws IOException{
// レポートの保存
}
public void send(String email){
// メールでクラッシュレポートを送信
Intent intent = new Intent();
intent.setType("message/rfc822");
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:" + email));
intent.putExtra(Intent.EXTRA_SUBJECT, String.format("Crash report![%s]", context.getPackageName()));
intent.putExtra(Intent.EXTRA_TEXT, report.toString());
context.startActivity(intent);
}
public void clear(){
// クラッシュレポートのクリア
report = new StringBuilder();
try {
save();
}catch (Exception e){
e.printStackTrace();
}
}
}
</pre>
</div>
</div>
<h2 style="background-color: white; border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 22px; font-weight: normal; line-height: 1.225; margin: 64px 0px 12px; padding-bottom: 8px; position: relative;">
<span class="fragment" id="reportsenderの作成" style="box-sizing: border-box; display: block; position: relative; top: -10px;"></span><a href="http://qiita.com/manbo34/items/71fd08f666af84aeab64#reportsender%E3%81%AE%E4%BD%9C%E6%88%90" style="background-color: transparent; box-sizing: border-box; color: #337ab7; text-decoration: none; word-break: break-all; word-wrap: break-word;"></a>ReportSenderの作成</h2>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; word-wrap: break-word;">
クラッシュしたときに動作するSenderクラスを作成</div>
<div class="code-frame" data-lang="lang" style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 0; margin: 1em 0px;">
<div class="code-lang" style="background-color: rgba(0, 0, 0, 0.0666667); box-sizing: border-box; color: #555555; display: inline-block; font-size: 12px; line-height: 1; margin: 0px; padding: 3px 6px;">
<span class="bold" style="box-sizing: border-box;">CrashReportSender.java</span></div>
<div class="highlight" style="background: rgb(255, 255, 255); box-sizing: border-box;">
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13px; line-height: 18px; overflow: auto; padding: 8px 15px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;">public class CrashReportSender implements ReportSender {
@Override
public void send(Context context, CrashReportData errorContent) throws ReportSenderException {
CrashReport crashReport = new CrashReport(context);
try {
crashReport.add(errorContent);
crashReport.save();
}catch (Exception e){
Log.e("CrashReportSender", "CrashReport save is failed.");
e.printStackTrace();
}
}
}
</pre>
</div>
</div>
<h2 style="background-color: white; border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 22px; font-weight: normal; line-height: 1.225; margin: 64px 0px 12px; padding-bottom: 8px; position: relative;">
<span class="fragment" id="acraの設定" style="box-sizing: border-box; display: block; position: relative; top: -10px;"></span><a href="http://qiita.com/manbo34/items/71fd08f666af84aeab64#acra%E3%81%AE%E8%A8%AD%E5%AE%9A" style="background-color: transparent; box-sizing: border-box; color: #337ab7; text-decoration: none; word-break: break-all; word-wrap: break-word;"></a>ACRAの設定</h2>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; word-wrap: break-word;">
最後にACRAを設定して完了!</div>
<div class="code-frame" data-lang="lang" style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 0; margin: 1em 0px;">
<div class="code-lang" style="background-color: rgba(0, 0, 0, 0.0666667); box-sizing: border-box; color: #555555; display: inline-block; font-size: 12px; line-height: 1; margin: 0px; padding: 3px 6px;">
<span class="bold" style="box-sizing: border-box;">AcraCrashReportApplication.java</span></div>
<div class="highlight" style="background: rgb(255, 255, 255); box-sizing: border-box;">
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13px; line-height: 18px; overflow: auto; padding: 8px 15px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;">@ReportsCrashes(
mode= ReportingInteractionMode.TOAST,
resToastText = R.string.acra_dialog_text,
resDialogCommentPrompt= R.string.acra_dialog_comment_prompt // 発生状況を入力する欄のラベル
)
public class AcraCrashReportApplication extends Application {
@Override
public void onCreate() {
// The following line triggers the initialization of ACRA
super.onCreate();
// ACRAの設定
ACRA.init(this);
CrashReportSender sender = new CrashReportSender();
ACRA.getErrorReporter().setReportSender(sender);
}
}
</pre>
</div>
</div>
<div class="code-frame" data-lang="lang" style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 0; margin: 1em 0px;">
<div class="code-lang" style="background-color: rgba(0, 0, 0, 0.0666667); box-sizing: border-box; color: #555555; display: inline-block; font-size: 12px; line-height: 1; margin: 0px; padding: 3px 6px;">
<span class="bold" style="box-sizing: border-box;">AndroidManifest.xml</span></div>
<div class="highlight" style="background: rgb(255, 255, 255); box-sizing: border-box;">
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13px; line-height: 18px; overflow: auto; padding: 8px 15px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;">android:name=lang:AcraCrashReportApplication
</pre>
</div>
</div>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; margin-top: 1.6em; word-wrap: break-word;">
あとは、どこかの画面でCrashReportのsendを呼び出せばOKです。</div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-19665763903735745682015-08-12T12:50:00.001+09:002015-08-12T12:50:00.703+09:00[Unity][Android]Unity画面からfinishしてAndroidの画面に戻す方法<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; word-wrap: break-word;">
単純に<code style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14.3999996185303px; padding: 2px 4px;">finish()</code>するだけだとアプリが落ちてしまうようです。<br style="box-sizing: border-box;" />次のように実行したところ元画面に遷移しました。</div>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; margin-top: 1.6em; word-wrap: break-word;">
UnityPlayerNativeActivityを継承したActivityを作成する。<br style="box-sizing: border-box;" />次の内容のメソッドを実装する。</div>
<div class="code-frame" data-lang="text" style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 0; margin: 1em 0px;">
<div class="highlight" style="background: rgb(255, 255, 255); box-sizing: border-box;">
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13px; line-height: 18px; overflow: auto; padding: 8px 15px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;">public void end() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mUnityPlayer.quit();
finish();
}
});
}
</pre>
</div>
</div>
<div style="background-color: white; box-sizing: border-box; color: #4a4a4a; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, sans-serif; font-size: 16px; line-height: 1.875; margin-top: 1.6em; word-wrap: break-word;">
一応これで元画面に戻ったのですが、<br style="box-sizing: border-box;" />内部的には一回アプリを落として再起動しているようで、<br style="box-sizing: border-box;" />static変数ですら初期化されてしまいました。</div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-50905111840140873122015-07-08T12:14:00.002+09:002015-07-08T12:14:48.230+09:00Android と Unity の座標系ども、モーション認識部分を担当している太田です。<br />
<br />
meleap では Android + Unity で開発を進めています。端末の位置情報なりを入力として用いてますがこれが一筋縄では行きません。なぜなら、両者で空間座標系の定義が異なるんです。涙<br />
今回はそんな面倒くささをちょこっと紹介しておきます。<br />
<br />
【Unity の座標】<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" height="226" src="http://2.bp.blogspot.com/-z6cCjQ_Wx60/VZyMVpYuNKI/AAAAAAAAAA8/D_fpRLIS_qg/s320/TransformExample2.png" width="320" /><a href="http://docs.unity3d.com/ja/current/Manual/Transforms.html">http://docs.unity3d.com/ja/current/Manual/Transforms.html</a></div>
<br />
上の図は Unity マニュアルから引っ張ってきました。Unity を使ったことのある人からすると、見慣れた座標系ですよね?でもこの座標系、ちょっと違和感感じませんか?上向きに y 軸があるって、3次元座標系として見慣れない感じじゃありません?少なくとも僕は違和感ありまくりで、初見でとても気持ち悪かったです。<br />
<br />
この違和感、数学や物理での3次元空間座標の表現と『異なる』からです。<br />
数学や物理はいわゆる「右手系」で「右ねじの法則」からなる座標系を設定することが多いです。対して Untiy では上図のように「左手系」を採用しています。<br />
<br />
「だからどうした?それのどこが問題なんだ!」と思われるかもしれません。問題はここからです。<br />
同じく Unity マニュアルから引用しましょう。<br />
<blockquote class="tr_bq">
<span style="color: #455463; font-family: 'Open Sans', sans-serif; font-size: 14px; font-weight: 700; line-height: 21.600000381469727px;">モバイルデバイス:</span> </blockquote>
<blockquote class="tr_bq">
(中略) </blockquote>
<blockquote class="tr_bq">
<span style="color: #455463; font-family: 'Open Sans', sans-serif; font-size: 14px; line-height: 21.600000381469727px;">各軸に沿った加速が重力の値としてハードウェアにより直接報告されます。 値が 1.0 の場合、与えられた軸に対する +1 G の力を示し、-1.0 の値は -1 G を示します。 目の前にデバイスを垂直に持ち(ホームボタンが下)、X 軸は右向きが正の値を示し、 Y 軸は上向きが正の値を示し、Z 軸は自身に向かう向きが正の値を示します。</span></blockquote>
Unity からもデバイスの加速度センサの値を取得することができます。上記は Input のリファレンスから一部抜粋して引用しました。ここで出てくる3軸の定義は、なんと「右手系」です!つまり、Input.<span style="line-height: 21.600000381469727px;"><span style="font-family: inherit;">acceleration</span></span> で得られる値を直接 Unity 内の座標系に適応すると、期待通りには動いてくれません。<br />
<br />
これは何も加速度に限ったことではありません。ジャイロに関しても同様のことが言えます。回転方向の定義も「右ねじ」と「左ねじ」で異なるので注意が必要です。<br />
<br />
というわけでデバイスからの入力を Unity 内で使うには都合の良い座標変換を入れる必要が有ります。座標変換の一例として下記のサイトを参考にしてください。<br />
<a href="http://qiita.com/fuqunaga/items/b1a3e38af71f062f0781">http://qiita.com/fuqunaga/items/b1a3e38af71f062f0781</a><br />
座標変換は一意に決まるものではないので、仕様に合った選択をするようにしましょう。<br />
<br />
ではでは今日はこの辺で。。。<br />
<br />
<br />太田直樹http://www.blogger.com/profile/02389129189707698520noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-26384527503429708382015-06-30T12:40:00.000+09:002015-06-30T12:46:50.616+09:00[Node.js]ファイルDB「NeDB」を使ってみた先日「Node学園 16時限目 ES2015発行記念」に参加させていただきました。<br />
その発表の中でファイルDBである「NeDB」を知れたので試してみました。<br />
基本的には以下のパワポの内容を実行しているだけです。<br />
<br />
<a href="http://www.slideshare.net/isamusuzuki54/loop-backapiswift-46901252?next_slideshow=1">http://www.slideshare.net/isamusuzuki54/loop-backapiswift-46901252?next_slideshow=1</a><br />
<br />
<br />
準備:<br />
npm install nedb --save<br />
<br />
※これだけ!<br />
<br />
<br />
ソースコード:(今回は「nedb_test.js」というファイルで作成しています。)<br />
var NeDB = require('nedb');<br />
var db = {};<br />
db.users = new NeDB({<br />
filename: 'usersfile'<br />
});<br />
<br />
db.users.loadDatabase();<br />
<br />
// insert<br />
db.users.insert({name: 'hoge'});<br />
db.users.insert({name: 'fuga'});<br />
db.users.insert({name: 'uga'});<br />
<br />
db.users.insert([<br />
{name: 'foo'},<br />
{name: 'bar'}<br />
], function(err, newDoc){<br />
console.log("[INSERT]");<br />
console.log(newDoc);<br />
});<br />
<br />
// find<br />
db.users.find({name: 'fuga'},<br />
function(err, docs){<br />
console.log("[FIND]");<br />
console.log(docs);<br />
});<br />
db.users.find({name: /f*uga/},<br />
function(err, docs){<br />
console.log("[FIND F*]");<br />
console.log(docs);<br />
});<br />
<br />
// remove<br />
db.users.remove(<br />
{name: 'fuga'},<br />
{multi: true},<br />
function (err, numRemoved){<br />
console.log("[REMOVE]");<br />
console.log(numRemoved);<br />
});<br />
db.users.remove(<br />
{name: 'uga'},<br />
{multi: true},<br />
function (err, numRemoved){<br />
console.log("[REMOVE]");<br />
console.log(numRemoved);<br />
});<br />
<br />
<br />
実行結果:<br />
%]node nedb_test.js<br />
[INSERT]<br />
[ { name: 'foo', _id: 'ShGylbRFFiR4nZcR' },<br />
{ name: 'bar', _id: '7Kkhma6FdLUzQI7o' } ]<br />
[FIND]<br />
[ { name: 'fuga', _id: '8AKesKQfsnvVOdob' } ]<br />
[FIND F*]<br />
[ { name: 'fuga', _id: '8AKesKQfsnvVOdob' },<br />
{ name: 'uga', _id: 'vbDsvmXtaB5xHNYo' } ]<br />
[REMOVE]<br />
1<br />
[REMOVE]<br />
1<br />
<br />
実行後のファイル(usersfile)の内容:<br />
{"name":"hoge","_id":"WuA7LFB50CWMnSX2"}<br />
{"name":"fuga","_id":"8AKesKQfsnvVOdob"}<br />
{"name":"uga","_id":"vbDsvmXtaB5xHNYo"}<br />
{"name":"foo","_id":"ShGylbRFFiR4nZcR"}<br />
{"name":"bar","_id":"7Kkhma6FdLUzQI7o"}<br />
{"$$deleted":true,"_id":"8AKesKQfsnvVOdob"}<br />
{"$$deleted":true,"_id":"vbDsvmXtaB5xHNYo"}<br />
<div>
<br /></div>
<br />
いやぁこんな簡単にDBを利用できるようになるなんてすばらしいですね!<br />
利用できるAPIはMongoDBに準拠しているらしいので、<br />
しっかりとしたDBに移行する際にも楽に対応できるかもしれないのがまた素敵ですね。<br />
<br />
インストールするとついてくる次のマニュアルを見れば使い方も大体把握できると思います!<br />
<br />
マニュアル:<br />
node_modules/nedb/README.md<br />
<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-78614907840393302912015-06-30T11:52:00.001+09:002015-07-06T13:18:51.312+09:00DroidKaigiに参加してきました 後半前半を書いたのがひと月前で、<br />
DroidKaigi自体がもっと前で、<br />
いまさら感が強いですが、<br />
感想後半戦を始めます!<br />
<br />
[ROOM:A]開発を効率的に進められるまでの道程<br />
[ROOM:B]ゲームアプリケーションのアップデートサイクル<br />
[ROOM:B]初学者にうれしいAndroid開発環境<br />
[ROOM:B]Android学ぶ君へ。生き抜くためのナレッジ共有<br />
ここから下<br />
[ROOM:B]新言語KotlinでAndroidプログラミング<br />
[ROOM:B]Bitmapは怖くない。<br />
[ROOM:B]モバイルにおける電力最適化のための1プラクティス<br />
[ROOM:B]デザイナーがXMLを書くことでできる改善しやすいアプリ開発<br />
[ROOM:B]JellyBeanとKitKatで実現するマテリアルデザイン<br />
[ROOM:B]僕らのデータ同期プラクティス<br />
[ROOM:B]AndroidとSELinux<br />
<br />
■[ROOM:B]新言語KotlinでAndroidプログラミング<br />
<br />
KotlinかわいいよKotlin<br />
JVM上で動作するプログラミング言語です。<br />
開発はAndroidStudioの元のIntelliJ IDEAを開発している<br />
「JetBrains」だそうです。<br />
<br />
詳しくは次のURLをご参照ください!<br />
https://sites.google.com/site/tarokotlin/home<br />
<br />
Androidアプリの開発もすでにできるようになっているようで、<br />
Kotlinを利用すればラムダ式などが使えるようになるそうです。<br />
Javaのめんどくさい部分もKotlinを使えばかなり楽になりそうでよさげ。<br />
<br />
<br />
■[ROOM:B]Bitmapは怖くない。<br />
<br />
と言いつつもやっぱり怖いそうです(笑)<br />
<br />
Bitmapを扱えるPicasso,Glide,Frescoの3種を紹介していただきました。<br />
講師曰く、Bitmapを利用する際に多少面倒な指定が必要になるが、<br />
基本的にはGlideがいい感じだそうです。<br />
Picassoは利用したことはありますが、<br />
Glideはないので、次に利用するシーンがあればGlideを試そうと思います。<br />
<br />
「android:largeHeap="true"」は最終兵器<br />
<br />
<br />
■[ROOM:B]モバイルにおける電力最適化のための1プラクティス<br />
<br />
少しハードよりな話でした。<br />
アプリの動作上で何を行っているときに<br />
大量の電力が発生しているかを実験するための装置の説明でした。<br />
<br />
この装置なんと自作!すごい!!<br />
たしか計5000円くらい(もう数か月前なのでまったく覚えていない)だったと思います。<br />
<br />
WebViewはかなりの電力食いなので気を付けよう。<br />
2Dより3Dの方が電力食い。<br />
Unityも電力食い。<br />
<br />
はい。弊社の製品は全部該当ですね。。。<br />
いつか利用電力の問題をクリアして皆様に提供できるようがんばります!<br />
<br />
<br />
■[ROOM:B]デザイナーがXMLを書くことでできる改善しやすいアプリ開発<br />
<br />
デザイナーさん話でした。<br />
デザイナーさんとプログラマーでバトルしているところが多い中、<br />
そこをなんとか上手にできましたよって話。<br />
<br />
デザイナーでもAndroidのUI作成なら何とかできるので、<br />
それ以外(開発環境の準備など)をしっかり面倒見てくださいとのこと。<br />
<br />
プログラマーはとにかくよりよい製品を作るために、<br />
デザイナーさんにコードを触ってもらう努力をしましょう!<br />
<br />
<br />
■[ROOM:B]JellyBeanとKitKatで実現するマテリアルデザイン<br />
<br />
ごめんなさい。。。体力切れで休んでいた模様。。。<br />
AppCompatActivityを使っていこうとだけメモが書いてありました(笑<br />
<br />
<br />
■[ROOM:B]僕らのデータ同期プラクティス<br />
<br />
通信で過酷な状況での話をおっしゃってました。<br />
広い畑の中心部だと通信が届かないそうです。<br />
まずはそこに驚きましたね。<br />
<br />
バックグラウンド通信で動機で一応可能だけれども、<br />
とても大変かつバッテリー食いになってしまうので、<br />
過酷な環境の場合はNG。<br />
<br />
SyncAdapterというAndroid提供の機能を利用すれば解決できるかもとのこと。<br />
<br />
<br />
■[ROOM:B]AndroidとSELinux<br />
<br />
バージョンが上がるたびにセキュリティが厳しくなっていくため、<br />
よくわからないエラーが発生している場合は、<br />
SELinuxを疑ってみてくださいとのこと。<br />
<br />
セキュリティの外し方は講演資料に記載されているので、<br />
そこをご参照ください。<br />
<br />
マニフェストで指定できない部分もあるのですね。。。<br />
<br />
<br />
<br />
無料なのにとても意義のあるところに参加ができました!<br />
DroidKaigiのスタッフ様、講演していただいた皆様には感謝しかありません。<br />
<br />
<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-38470830974181754562015-06-22T15:46:00.003+09:002015-06-23T18:32:59.634+09:00HoloLensまとめMicrosoftが開発したARヘッドマウントディスプレイ(HMD)「HoloLens」についてまとめました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-__G5sbNu_sg/VYeuoXvz_LI/AAAAAAAAAfM/24JqTRDKRqc/s1600/microsoft-hololens-lg-1500x1000.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="http://1.bp.blogspot.com/-__G5sbNu_sg/VYeuoXvz_LI/AAAAAAAAAfM/24JqTRDKRqc/s320/microsoft-hololens-lg-1500x1000.jpg" width="320" /></a></div>
<br />
<h4>
<span style="color: #783f04;">
ARヘッドマウントディスプレイの特徴</span></h4>
ヘッドマウントディスプレイとは、頭にかぶり、眼前のディスプレイにCGによる表示映像をするデバイスですが、これはOculus RiftやsonyのProject MorpheusのようなVR用と異なり、現実世界も透けて見えます。<br />
<br />
また、Oculus RiftとMorpheusはディスプレイ機能がメインで、PCやゲーム機につなげて処理する必要がありますが、HoloLensは,それ自体にWindows 10を搭載しており、PCに接続する必要はありません。<br />
<br />
業界筋ではプロセッサして「Atom」SoC(System-on-a-Chip)の搭載が有力視されています。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/qym11JnFQBM/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/qym11JnFQBM?feature=player_embedded" width="320"></iframe></div>
<br />
<h4>
<span style="color: #783f04;"><br /></span></h4>
<h4>
<span style="color: #783f04;">距離センサーで空間にCGを貼り付ける</span></h4>
現実視界にCGをオーバーラップ表示できるシースルータイプのHMDとしては,すでにセイコーエプソンがAndroidベースのMOVERIOシリーズを出しています。<br />
<br />
ただ、MOVERIOとHoloLensは周辺環境の認識という点において大きく異なります。HoloLensには,「Kinect」と同じ投射型深度センサーが使用されています。これは赤外光を面照射して,その反射光が返ってくるまでの時間をCMOSベースの距離イメージセンサからToF(Time of Flight)方式で測定するものです。照射範囲は120度。<br />
<br />
ToFとは,照射された赤外光が反射されて照射側に戻ってくるまでの時間差から、シーンの深度分布を計測する技術です。これはMicrosoftが2009年に買収したイスラエルの3DV Systemsが持つ技術をベースとしています。Xbox One用KinectのToF測距精度は130億分の1秒だといわれ、HoloLensでもこれに準じた精度で深度値を取得しているものと思われます。<br />
<br />
このため、「現実視界にCGが完全に張り付いている」という感覚を得られるのです。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/xgakdcEzVwg/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/xgakdcEzVwg?feature=player_embedded" width="320"></iframe></div>
<div style="text-align: center;">
mine craftのデモ</div>
<br />
<br />
<h4>
<span style="color: #783f04;">
網膜投影型は焦点調整が不要だが、デメリットもある</span></h4>
Oculus RiftやMorpheusでは,直視型の液晶ディスプレイを眼前において見せているので、眼球を動かしても映像が見切れたり消失することはありません。一方で、HoloLensのような網膜投射型デバイスの場合、網膜に映像を直接投射する関係で、眼球が常に正面を向いていることが前提になっています。なので、眼球を動かすと途端に映像が消失したり,外周が消えてしまったりするとのことです。<br />
<br />
そもそも、網膜投影型とはどのようなものなのでしょうか。<br />
通常、物体を立体視する際、光は水晶体で収束し、網膜上で結像します。物体までの距離が変化すれば、水晶体の厚みを変え、光を屈折させます。それに対し、網膜投影型では、光を瞳孔の中心で収束させるため、水晶体の屈折率の影響はうけません。<br />
つまり、現実の視界で遠くのものを見ても、近くのものを見ても、ディスプレイのCGがぼやけないのです。近視、乱視、老眼なども関係ありません。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-6rVnjxKiGBU/VYevRI6v_nI/AAAAAAAAAfU/Z8RG463CxtA/s1600/e-glass_man-300x148.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-6rVnjxKiGBU/VYevRI6v_nI/AAAAAAAAAfU/Z8RG463CxtA/s1600/e-glass_man-300x148.gif" /></a></div>
<br />
また、ディスプレイには表示部が存在しないため、解像度・輝度・コントラスト・表示色とも従来のディスプレイを凌駕する性能が実現できます。<br />
<br />
<br />
<br />
<h4>
<span style="color: #783f04;">
ジェスチャー操作、音声入力が可能</span></h4>
HoloLensのデモでは、空中をタップする、つまむ、引き延ばす、などのジェスチャーでCGを実際のモノのように操作できる様子が公開されています。<br />
指の認識はHMDの前面に付いているセンサーで行っているようです。現状、可能な操作は限られており、あまり複雑な指の動きまでは対応していません。<br />
また、音声の入力も可能で、かなりの精度で認識してくれるそうです。(英語)家の中で使うのであれば、音声入力はかなり便利になりそうですね。<br />
<br />
<br />
<br />
<h4>
<span style="color: #783f04;">
画角が今後の課題</span></h4>
また、体験した方によると、映像画角はかなり狭いといいます。30°×17.5°というデータもあります。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-PZDdi4PpRns/VYewVkjW4zI/AAAAAAAAAfg/B7_YZ5L3-PY/s1600/HoloLensFOV.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="214" src="http://3.bp.blogspot.com/-PZDdi4PpRns/VYewVkjW4zI/AAAAAAAAAfg/B7_YZ5L3-PY/s320/HoloLensFOV.jpg" width="320" /></a></div>
少し頭の向きを変えるとCGが途切れてしまうため、仮想世界への没入感は少なくなってしまいます。<br />
平面の2D映像を見たり、サインを表示する分にはいいのですが、3Dのゲームなどをやろうとすると、物足りない感があると思います。<br />
おそらく、網膜投影の仕組み的に、この画角の問題はすぐに解決されるものではないと思われます。<br />
弊社のHADOのような没入感のあるゲームではある程度の画角が必須なので、初期のHoloLensに対応させるのは難しいかもしれませんね。<br />
今後に期待です。<br />
<div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/XLljp8CVpKg/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/XLljp8CVpKg?feature=player_embedded" width="320"></iframe></div>
<div style="text-align: center;">
その他のデモ動画</div>
</div>
Anonymoushttp://www.blogger.com/profile/13037278032560545273noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-69785685808560744482015-06-22T12:04:00.002+09:002015-06-22T12:17:37.909+09:00テクノスポーツ!超人スポーツ!<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">おはようございます。</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">meleapの福田です。</span><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">今月、『HADO』はNHKの報道番組で紹介された他、日テレ「</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">シューイチ」の「まじ★すか」、テレビ東京の「WBS」</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">にてとりあげて頂きました!</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-mJfiynjYPFo/VYd8KsFUpcI/AAAAAAAAAe8/6iYCT0HThGk/s1600/IMG_0325.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="http://1.bp.blogspot.com/-mJfiynjYPFo/VYd8KsFUpcI/AAAAAAAAAe8/6iYCT0HThGk/s320/IMG_0325.jpg" width="320" /></a></div>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">テレビは全てを伝えられないので、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">カットして繋ぎ合わされた結果、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">不思議なテンションになっていることもありますが、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">僕の周りでは大きな反響を頂き、ありがたい限りです。</span><br />
<br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">本日は、弊社の「テクノスポーツ五輪」と同様のビジョンを掲げる、「超人スポーツ協会」についてご紹介しようと思います。</span><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">「超人スポーツ協会」という協会をご存知でしょうか?</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">最近メディアでもとりあげられ、注目を集めているので、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">耳にしたことがある方も多くいらっしゃると思います。</span><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<h3>
<span style="color: #783f04;">
技術によって「人」は「超人」になれる</span></h3>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">「超人スポーツ協会」それは、</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">「人間の能力を補綴・補強・拡張可能なAugmented Human技術に基づき,皆が</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">個々人の身体的な能力の差など</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">目立たなくなるくらい超人的な力を身につけることで,同じ</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">超人 (Superhuman) 同士として一緒のフィールドで競い合う,人間と機械が</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">融合した「人機一体」の新たなスポーツを創造」</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">している協会なのです。</span><br />
<br />
<br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">え?</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">個々人の身体的な能力差をなくすってどういうこと!?</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">それでどうやって競うの!?</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">スポーツの意味あるの!?</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">と、感じてらっしゃる方もいらっしゃると思います。</span><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">そうです。</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">超人スポーツ協会を立ち上げた方達は大のスポーツ嫌いなんです。</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">嫌い、というと語弊がありますね。恐らく、苦手意識が強く、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">嫌いになってしまった類いだと思います。</span><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">ですが、どうでしょう、スポーツが得意な人たちは、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">自身の体一つで対決するスポーツを従来通り、いや、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">それ以上に盛り上げていただき、</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">自分自身の体力だけでは自信が持てない、という人たちが、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">こうしてまた「スポーツ」を楽しめるようになる、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">というのはとても素敵な話だと思います。</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"><br /></span>
<span style="color: #222222; font-family: arial, sans-serif;"><span style="background-color: white; font-size: 14px;">今後、ARやVR以外にも、ロボット技術、ドローン技術やIoT技術を組み合わせ、様々な競技が生まれてきます。</span><span style="font-size: 14px;">攻殻機動隊の世界がすぐそこまできているのです。</span></span><br />
<br />
<br />
<h3>
<span style="color: #783f04;">
東京オリンピックと同時開催で国際大会を!</span></h3>
<h3>
<span style="font-weight: normal;"><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">僕自身も、『HADO』の紹介の際、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">いたるところで2020年の東京オリンピック・</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">パラリンピックと同時開催で「テクノスポーツ五輪を開催する!」</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">と言い続けてきましたが、なんと、超人スポーツ協会も「</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">超人スポーツ競技の国際大会の開催」をビジョンに掲げ、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">活動をされています!!</span></span></h3>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">忍者のように水面を駆け抜ける人や、空中飛行、怪力…</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">そんな大会が開催されたら……と考えるだけでワクワクしますね!</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">!</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">ちなみに、僕たちmeleapも超人スポーツ協会に参加しています。</span><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">『HADO』も老若男女、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">全ての方たちに楽しんでもらえるようなスポーツを目指して日々、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">開発を進めていますので、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">今後ともどうぞ注目して頂けたらと思います!</span><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">余談ですが、「WBS」でHADOを体験してくださっていた方、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">どなたかわかりましたか??</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">名刺の受け渡しの際に映っている男性に注目です。</span><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">WBSオンデマンド</span><br />
<a href="http://txbiz.tv-tokyo.co.jp/" rel="noreferrer" style="background-color: white; color: #1155cc; font-family: arial, sans-serif; font-size: 14px;" target="_blank">http://txbiz.tv-tokyo.co.jp</a><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">シューイチ「まじ★すか」</span><br />
<a href="http://www.ntv.co.jp/shu-ichi/majisuka/2015/06/15344.html" rel="noreferrer" style="background-color: white; color: #1155cc; font-family: arial, sans-serif; font-size: 14px;" target="_blank">http://www.ntv.co.jp/shu-ichi/<wbr></wbr>majisuka/2015/06/15344.html</a><br />
<br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;" />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">超人スポーツ協会</span><br />
<a href="http://superhuman-sports.org/" rel="noreferrer" style="background-color: white; color: #1155cc; font-family: arial, sans-serif; font-size: 14px;" target="_blank">http://superhuman-sports.org</a>Anonymoushttp://www.blogger.com/profile/13037278032560545273noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-91502237820545398002015-05-27T16:20:00.000+09:002015-05-27T16:20:01.575+09:00[Android]Error:Unable to make the module が出た場合の対処方法について参考URL:<br />
http://stackoverflow.com/questions/28193980/unable-to-make-the-module-related-gradle-configuration-was-not-found-please-r<br />
<br />
Android Studioを更新したときに次のエラーが出てしまいました。<br />
そのときに行った対処方法を記載します。<br />
<br />
エラー内容:<br />
Error:Unable to make the module: プロジェクト名, related gradle configuration was not found.<br />
Please, re-import the Gradle project and try again.<br />
<br />
対応方法を要約するとGradleプロジェクトをリフレッシュするという方法です。<br />
<br />
1. Gradleビューを開く<br />
<br />
ツールバーで [View] > [Tool Windows] > [Gradle] をクリックしてください。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-sm0mE2laH4o/VWVv_PfyJGI/AAAAAAAAAA4/ilwHz1K67-w/s1600/blog1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="278" src="http://4.bp.blogspot.com/-sm0mE2laH4o/VWVv_PfyJGI/AAAAAAAAAA4/ilwHz1K67-w/s320/blog1.jpg" width="320" /></a></div>
<br />
<br />
<br />
<br />
2. リフレッシュする<br />
<br />
Gradle projectsウィンドウでプロジェクトをリフレッシュしてください。<br />
下記図の赤い丸に囲まれたアイコンをクリックすればOKです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-Q4E22A7WqA0/VWVwCr1MdvI/AAAAAAAAABA/aPe9RFOXZOY/s1600/blog2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-Q4E22A7WqA0/VWVwCr1MdvI/AAAAAAAAABA/aPe9RFOXZOY/s320/blog2.jpg" width="319" /></a></div>
<br />
<br />
<br />
この手順で私は対応できました。<br />
困っている方は試してみてください。<br />
<br />
<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-42238828580400606182015-05-24T13:48:00.000+09:002015-05-24T13:51:28.553+09:00【機械学習 序説】<div>
ジェスチャ周りをリサーチしている太田です。
</div>
<div>
<br /></div>
<div>
ここ1ヶ月ほど、Myo で取得した筋電位(詳しくは<a href="http://meleap124.blogspot.jp/2015/05/myoandroid.html">こちら</a>)からハンド・ジェスチャを特定する為に機械学習の導入を試みてます。
</div>
<div>
<br /></div>
<div>
実装のためにいろいろなブログやサイトを閲覧してきましたが、どうも偏っているものが多い様に感じました。もちろん、大半は「こうしたら使えるよ」系のモノ。あるいは少数ですが、数式をゴリゴリ示す理論系のモノ。残念ながら、両者をつなぐ様なサイトがあまり見受けられませんでした。
</div>
<div>
<br /></div>
<div>
そこで今回は、機械学習の前座として、「こんな知識が無いと理論を理解するのは辛いよ」的な前提知識を紹介していきます。なので、「機械学習がどのようにして事例判断を行うか」をザックリと説明できる方には当たり前、「原理なんて興味ないわ」って方にはどうでも良い話です。ごめんなさい。m(_ _)m
</div>
<div>
<br /></div>
<div>
1)線型代数学
</div>
<div>
理系大学生ならばおそらく1・2年で必ずや履修しているであろう単元ですね。
</div>
<div>
機械学習においては、「多次元」問題を扱うために必須です。いきなり「多次元」ときましたが何も恐れることはありません。プログラムに学習してほしい「要素の数」のことです。例えば、人の肥満度を測るために、「身長」「体重」「体脂肪率」「性別」を学習して欲しい要素とすれば4次元になります。こうした、全く性質の異なる要素を「同時」に扱うために線形代数が必要になります。細かいところは理解しなくても、行列の表現・逆行列・転置行列・固有値・固有ベクトル・規格化などがあればいいでしょう。
</div>
<div>
<br /></div>
<div>
2)統計学
</div>
<div>
こちらは、文理問わず必要とされる機会が多い分野ですね。
</div>
<div>
学習における正誤の判定を、命題の真偽として考えるならば、統計学に基づく「検定」が必要になるでしょう。専門用語が多いのでとっつきにくいですが、普段持ち合わせている「感覚」を「数学的に表現する」ことを目指しているだけです。数学的な手順に目が行きがちですが、むしろ「感覚」をもとにした概念や考え方を捉えておくと、機械学習の理解が深まるように思います。
</div>
<div>
<br /></div>
<div>
3)数値解析学
</div>
<div>
おそらく、機械学習において最も核となる部分です。
</div>
<div>
コンピュータは四則演算(加減乗除)によって離散的にしか数値を扱うことができません。(僕の知る範囲では・・・ですが。汗)つまり、コンピュータには無理数(整数同士の割り算で表せない数)が理解できないのです。ということは、コンピュータのは2次方程式を解く事が出来ないのです。我々人間であれば、係数がどんなものであれ、解の公式を用いれば平方根によって簡単に解が求まるのに。(いや、面倒な場合があるかもしれないけど、「公式を用いればいい」という単純さにおいて「簡単」と表現しました。)
</div>
<div>
2次方程式を解くという問いに対して「誤差」を許容する事にしましょう。小さい事に目を瞑る事にして、「だいたい」の値を求める事は出来ないか。計算可能な「ある値」から出発して、少しずつ「答え」に近ずく事は出来ないか。これこそが「学習」の肝です。つまり、間違ってもいいから一旦やってみて、間違っていたら少し修正して再チャレンジ!このプロセスを繰り返す事によって、少なからず間違っているんだけども「答えに近い」状態にする事、が「学習」です。
</div>
<div>
残念ながら人間にはこんな事できません。いや、少なくとも僕は、何度やってもやり直しを命じられるなんて耐えられません。が、コンピュータは人間のよう(僕のように)に「飽きる」ことがありません。電気さえ供給してやれば、おそらく何万回でも何億回でも同じ操作をしてくれます。
</div>
<div>
こうした考えのもと、「ある手順にのっとって何度も繰り返す事によって2次方程式を解きましょう」というのが、<a href="http://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E6%B3%95">ニュートン法</a>です。解の公式が数値の計算手順であるのに対して、ニュートン法は解を求める操作手順を示しています。
</div>
<div>
<br /></div>
<div>
さてさて話が長くなりましたが、肝となるエッセンセスはここに挙げた3要素だと思います。あとはどの様にミックスされるか。あるいは操作手順の中でどんな順番に処理を行うかです。少なくともニュートン法さえ知っていれば、機械学習の勉強の際に迷子になる事はないでしょう。
</div>
<div>
<br /></div>
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
<br />
<div>
以上、サムズアップするシュワちゃんを理解するために必要な最低限の知識でした!(ターミネータ2より) </div>
太田直樹http://www.blogger.com/profile/02389129189707698520noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-41362162371196842842015-05-18T16:09:00.000+09:002015-05-18T17:06:49.452+09:00Unity5でのアニメーションUnity5にアップデートされてAnimatorが新しくなりました<br />
今回はAnimatorをさわってみようと思います<br />
<br />
<br />
やりたいこと<br />
・Stayを起点としてFireAttack , TailAttackをランダムに実行させる<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-9Thaknz1s-s/VVmIFvCXDPI/AAAAAAAAAD8/nZ4kxWe3XbE/s1600/0518000.png" imageanchor="1"><img border="0" height="222" src="http://4.bp.blogspot.com/-9Thaknz1s-s/VVmIFvCXDPI/AAAAAAAAAD8/nZ4kxWe3XbE/s640/0518000.png" width="640" /></a></div>
<br />
<br />
①3種類のアニメーションを用意<br />
<br />
②ParametersにisFireAttackとisTailAttackをTrigger型で追加<br />
<div>
<br /></div>
<div>
③StayからFireAttackへ伸びる矢印を選択しInspectorのConditionsにisFireballAttackを追加</div>
※FireAttackからStayへ伸びる矢印には追加しません<br />
<br />
<div>
④StayからTailAttackへ伸びる矢印を選択しInspectorのConditionsにisTailAttackを追加</div>
※TailAttackからStayへ伸びる矢印には追加しません<br />
<br />
⑤csファイルを作り下記スクリプトをコピペ<br />
<br />
using UnityEngine;<br />
using System.Collections;<br />
<br />
public class DragonMotionManagement : StateMachineBehaviour<br />
{<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>//新しいステートに移り変わった時に実行<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>int MotionNumber = 0;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>MotionNumber = Random.Range (0, 2);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (MotionNumber == 0) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>animator.SetTrigger ("isFireAttack");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (MotionNumber == 1) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>animator.SetTrigger ("isTailAttack");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
}<br />
<br />
⑥矢印周辺の何もないところをクリックしてInspectorに⑤で作ったcsファイルを追加<br />
<br />
⑦実行確認<br />
<br />
<br />
これでStayを起点としてFireAttack , TrailAttackがランダムに実行されます<br />
Unity4のときはモーションの終わりを取るのが面倒でしたがとても簡単になりました<br />
他にも実行するタイミングを設定できるので下記参考サイトを見てやってみて下さい<br />
<br />
<br />
参考サイト<br />
http://japan.unity3d.com/blog/?p=1672<br />
http://riberunn50.blog.fc2.com/blog-entry-25.html<br />
http://qiita.com/toRisouP/items/b6540b7f514d18b9a426<br />
<br />
<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-19759768458338104412015-05-12T18:55:00.002+09:002015-05-12T18:55:42.766+09:00DroidKaigiに参加してきました その1今更ですがDroidKaigiに参加した報告です。<br />
記憶があいまいになってるので内容には気を付けてください(笑<br />
しかし、DroidKaigiに参加できて本当に幸運でした。<br />
また開催されることがあれば例え有料だろうが参加したいです。<br />
<br />
資料<br />
https://twitter.com/DroidKaigi<br />
<br />
当日の資料はDroidKaigi(Official)様が公開先を書いてくれてますので、<br />
そこをご参照ください。<br />
<br />
私が参加したセッションは次の通りです。<br />
<br />
[ROOM:A]開発を効率的に進められるまでの道程<br />
[ROOM:B]ゲームアプリケーションのアップデートサイクル<br />
[ROOM:B]初学者にうれしいAndroid開発環境<br />
[ROOM:B]Android学ぶ君へ。生き抜くためのナレッジ共有<br />
[ROOM:B]新言語KotlinでAndroidプログラミング<br />
[ROOM:B]Bitmapは怖くない。<br />
[ROOM:B]モバイルにおける電力最適化のための1プラクティス<br />
[ROOM:B]デザイナーがXMLを書くことでできる改善しやすいアプリ開発<br />
[ROOM:B]JellyBeanとKitKatで実現するマテリアルデザイン<br />
[ROOM:B]僕らのデータ同期プラクティス<br />
[ROOM:B]AndroidとSELinux<br />
<br />
ほぼ B ですね(笑<br />
本音を言うと実は A の方が興味のあるタイトルが多かったのですが、<br />
興味のある内容は後から自分で調べるだろう!ということで、<br />
逆を選んでいった結果ほぼ B になりました。<br />
そのおかげか、今まで知らなかったことばかり学べたのでいい選択だったと思います。<br />
<br />
<br />
■[ROOM:A]開発を効率的に進められるまでの道程<br />
http://www.slideshare.net/TakaoSumitomo/ss-47393000<br />
<br />
要約:テストを書け!とにかくテストを書け!!<br />
<br />
テストがあるだけでどれだけ幸せなことかっていう体験をしないとテストの重要性はわからないだろうなぁ。<br />
テスト大事ですよ!<br />
自分のために書くのですよ!!<br />
<br />
<br />
■[ROOM:B]ゲームアプリケーションのアップデートサイクル<br />
http://www.slideshare.net/kentaroiizuka/droidkaigi<br />
<br />
私たちmeleapでも将来必要になる技術であったため、<br />
この話を聞くことができてよかったです。<br />
Unity+Androidという組み合わせですが、<br />
2つのプロジェクトを組み合わせるときに考慮が必要になりそうですね。<br />
<br />
セッションで紹介していた「ゲーム・映像制作パイプライン構築マニュアル」を読んでから、<br />
再度このセッションの内容を学びなおそうと思います。<br />
meleapで環境構築したら、そのときは紹介しますね。<br />
<br />
<br />
■[ROOM:B]初学者にうれしいAndroid開発環境<br />
http://www.slideshare.net/hiroyukikusu/droidkaigi2015androidmvc<br />
<br />
便利ツール・ライブラリの紹介でした。<br />
メモには次の内容が。<br />
<br />
・Butter Knife<br />
・Genymotion<br />
・Gson<br />
<br />
うん。どれも便利ですね。<br />
知ってると知らないのでは、<br />
それだけで大きな差が生まれそうです。<br />
※私は当日まで知らなかったです。。。<br />
知らないというのは罪ですね。<br />
<br />
<br />
■[ROOM:B]Android学ぶ君へ。生き抜くためのナレッジ共有<br />
https://github.com/operando/DroidKaigi<br />
<br />
要約:鍛えたいならば、<br />
Androidソースコード検索サービスを利用して、<br />
たくさんのソースコードに触れよう!<br />
<br />
発表者の方は今後IOSの勉強を進めるそうです(笑<br />
Androidだけで生きていくのも大変だということ。<br />
<br />
<br />
以下、また次回...<br />
■[ROOM:B]新言語KotlinでAndroidプログラミング<br />
■[ROOM:B]Bitmapは怖くない。<br />
■[ROOM:B]モバイルにおける電力最適化のための1プラクティス<br />
■[ROOM:B]デザイナーがXMLを書くことでできる改善しやすいアプリ開発<br />
■[ROOM:B]JellyBeanとKitKatで実現するマテリアルデザイン<br />
■[ROOM:B]僕らのデータ同期プラクティス<br />
■[ROOM:B]AndroidとSELinux<br />
<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-34658133318633244092015-05-02T17:13:00.001+09:002015-05-02T17:32:33.554+09:00MyoをハックしてAndroidで筋電位データを取得し、ポーズ検出できるようにしてみた。<div class="separator" style="clear: both; text-align: left;">
Myoってこんなのです。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/oWu9TFJjHaM" width="480"></iframe></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
この動画の中でいろんな手のポーズが認識されているようにみえますが、</div>
<div class="separator" style="clear: both; text-align: left;">
現時点で実際にMyoで認識できるポーズは、</div>
<div class="separator" style="clear: both; text-align: left;">
Fist、Spread、Rest、Wave In、Wave Outの5パターンだけです。</div>
<div class="separator" style="clear: both; text-align: left;">
(グー、パー、力抜いてる、手を内側に折り曲げる・外側に折り曲げる)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
自分だけの自由なポーズの登録や認識はできません。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
今回僕らがやったことにより、</div>
<div class="separator" style="clear: both; text-align: left;">
MyoをつけていればAndroidアプリで忍術の印を結んで技を発動させる!</div>
<div class="separator" style="clear: both; text-align: left;">
なんてことも実現できます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ナルトごっこが捗りますね!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
チャクラ溜めて~~~印をいくつか結んで~~~</div>
<div class="separator" style="clear: both; text-align: left;">
火遁豪火球の術!!!ゴオオオオオ!!!!!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
なんてね!にんにん!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
さて、ここからはおもいっきりエンジニアさん向けです。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
モーション認識デバイスMyoに興味ある!</div>
<div class="separator" style="clear: both; text-align: left;">
それをAndroidで使いたい!</div>
<div class="separator" style="clear: both; text-align: left;">
加えてMyoのデフォルト5パターンのポーズじゃ満足できない!</div>
<div class="separator" style="clear: both; text-align: left;">
という方のためのアプリの紹介です。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
めっちゃニッチ!笑</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Myoを触っている人は知っていると思いますが、</div>
<div class="separator" style="clear: both; text-align: left;">
このデバイスは筋電位データを取得できます。</div>
<div class="separator" style="clear: both; text-align: left;">
そして、現時点ではWindows、Mac、そして最近 iOSでも</div>
<div class="separator" style="clear: both; text-align: left;">
販売元であるThalmic Labの公式SDKで</div>
<div class="separator" style="clear: both; text-align: left;">
筋電位データへアクセスできるようになりましたね。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ただ、AndroidではThalmic Labの公式SDKだと筋電位データにアクセスできません。</div>
<div class="separator" style="clear: both; text-align: left;">
開発フォーラムで質問しましたが、Thalmic Labのアップデートプランの中に、</div>
<div class="separator" style="clear: both; text-align: left;">
Android端末で筋電位データへアクセスできるようにする、という項目はないようです。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
その主な理由は、AndroidのBluetooth仕様が貧弱で、授受できるデータ量が少ないため、</div>
<div class="separator" style="clear: both; text-align: left;">
他デバイスに比べて筋電位データの更新頻度が低くなり、</div>
<div class="separator" style="clear: both; text-align: left;">
ポーズ認識などでやれることが限られてしまうこと、にあるそうです。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
おそらくThalmic Labの開発メンバーも困っているみたいです。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
公式SDKのアップデートを待っていてはいつやれるようになるかわかりません。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
そこで、僕らはMyoのBluetooth送受信データをハックし、</div>
<div class="separator" style="clear: both; text-align: left;">
Android端末で筋電位データへアクセスできるようにしました。</div>
<div class="separator" style="clear: both; text-align: left;">
そして、3パターンのポーズを自由に登録し、ポーズ認識できるようになってます。</div>
<div class="separator" style="clear: both; text-align: left;">
機械学習を組み込んでいないが故に、誰でも自分のポーズをお手軽に登録し、</div>
<div class="separator" style="clear: both; text-align: left;">
登録したポーズを認識することができます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
コードはgithubで公開してます。</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://github.com/meleap/myo_AndoridEMG">https://github.com/meleap/myo_AndoridEMG</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Android Studioのプロジェクトデータ形式で公開しているので、</div>
<div class="separator" style="clear: both; text-align: left;">
ここまで読んでくださっている人ならば、すぐにAndroid端末にインストールできるはずです。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
公開しているアプリの使い方は、この動画の通りです。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/-J1rr7_ADag" width="480"></iframe></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ぜひ使ってみて下さい。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
公開しているコードにはまだ課題もあります。</div>
<div class="separator" style="clear: both; text-align: left;">
一番大きな課題としては、ポーズ検出を何回かやっていると、筋電位データ授受が停止します。</div>
<div class="separator" style="clear: both; text-align: left;">
挙動を見る限りでは筋電位データが溢れかえっているような感じです。(外れかも)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
解決策をご存知の方はコメントやgithubにプッシュ頂けるとめっちゃありがたいです!</div>
<div class="separator" style="clear: both; text-align: left;">
それだけでなく、どんなフィードバックでも頂けたらすっごくありがたいです。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
また、少しだけ近況を。</div>
<div class="separator" style="clear: both; text-align: left;">
4月から新メンバーが加入してくれたおかげで、弊社のHADO開発もガンガン進んでます。</div>
<div class="separator" style="clear: both; text-align: left;">
HADOの詳細は<a href="http://meleap.com/hado/" target="_blank"><b>こちら</b></a>。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
テストがめっちゃ楽しい!</div>
<div class="separator" style="clear: both; text-align: left;">
そして技を毎日出しまくるため、腕が太くなってきてます。</div>
<div class="separator" style="clear: both; text-align: left;">
また、スウェーや反復横跳びの動きで攻撃をよけたりするので汗だくになってるw</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
アプリのテストで体が鍛えられるなんて斬新!</div>
<div class="separator" style="clear: both; text-align: left;">
うちの開発メンバーはテストすればするほど健康になっちゃうね。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
それではまた!</div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-91710300057451544952015-04-29T19:49:00.001+09:002015-04-29T19:49:16.938+09:00【KPI分析(第3回)】DAUに代わるKPI編ソーシャルゲーム(に限らずアプリ全般)のKPI分析講座、第3回目は「DAUに代わるKPI編」です。<br />
1回目、2回目は下記をご覧ください。<br />
<br />
<a href="http://meleap124.blogspot.jp/2015/01/kpi.html">【KPI分析(第1回)】用語解説編</a><br />
<a href="http://meleap124.blogspot.jp/2015/02/kpi2dau.html">【KPI分析(第2回)】DAUを狂わすノイズ編</a><br />
<br />
前回の「DAUを狂わすノイズ編」では、ホワイトノイズやスパイクノイズによってDAU(daily active users)が増減してしまうということを書きました。<br />
ゲームが面白いかどうか以外の部分でDAUは大きく変動してしまうので、DAUを指標にしていては、本当楽しんでいるユーザーがどれだけいて、どのような推移をしているのかはわかりません。<br />
<br />
そこで、<span style="color: red;">ホワイトノイズやスパイクノイズを取り除いた新たなKPI</span>が必要です。<br />
ただ、実際のところコレといった業界共通の指標というのは存在していません。<br />
各社が自社のタイトルにマッチしたノイズの取り除き方を行い、それを指標としているといった感じです。<br />
<br />
ここでは、その指標を公開している3社(現在はもっと洗練された取り方をしているかも)の例を取り上げます。<br />
<br />
<b><span style="font-size: large;"><コロプラ></span></b><br />
まずは、「白猫プロジェクト」や「黒猫のウィズ」などの超ビッグタイトル連発のコロプラさん。<br />
コロプラさんは<span style="color: red;">QAU(Quarterly Active Users)</span>という指標を採用しています。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-UWwksB8c63s/VUC2ErNAA8I/AAAAAAAAAD0/R7rznDpDm4s/s1600/colopl.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-UWwksB8c63s/VUC2ErNAA8I/AAAAAAAAAD0/R7rznDpDm4s/s1600/colopl.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
QAUとは、アプリをダウンロードしてから<span style="color: red;">7日以上経ったユーザー</span>を対象としたアクティブユーザーの値です。<br />
アプリの継続率は、ダウンロード後7日間で急激に低下し、その後はある程度安定していきます。<br />
なので、ダウンロード後7日間のユーザーを取り除くことで、定着したユーザーのみを抽出しています。<br />
これにより、広告出稿などによる急激なダウンロード数の増加があり、DAUが跳ね上がっている場合も、QAUは7日後も遊んでくれているユーザーのみを抽出した値のため、ある程度安定した値になります。<br />
ただ、この方法ではユーザーの気まぐれが起因しているホワイトノイズは取り除けません。<br />
例えば、プッシュ通知などを行うと、休眠ユーザーが一時的にアプリを起動したりするので、QAUも一時的に跳ね上がってしまいます。<br />
<br />
<b><span style="font-size: large;"><gloops></span></b><br />
続いてブラウザソシャゲで一時代を築いたgloopsさん。ソシャゲのデータマイニングにおいては最初期から力を入れていらっしゃいます。<br />
基本的にはコロプラさんと同じ考え方ですが、<a href="http://gamebiz.jp/?p=131227" target="_blank">こちらの記事</a>によると、gloopsさんの場合は<span style="color: red;">ゲーム開始後30日間</span>というのを指標の区切りにしています。<br />
過去30日間のログイン日数でユーザーを数段階に分類し、セグメント別にユーザー推移を見たり施策を検討したりしています。<br />
さらに、<span style="color: red;">ゲーム内のパラメータ(強さ)とクロスさせてセグメント化</span>することで、「昔はハマっていたけど最近はあまりプレイしていない」といったユーザー層も可視化でき、より具体的な施策を行いその結果をウォッチすることができます。<br />
ただ、このやり方はデータマイニングの非常に高度なノウハウや仕組み、人員が必要です。また、タイトルによって指標が異なるため、タイトルをまたいでの指標としては使えないので、簡単には導入できない(使いこなせない)方法だと思います。<br />
<br />
<b><span style="font-size: large;"><ドリコム></span></b><br />
最後はドリコムさんです。<br />
ドリコムさんは、コロプラさんやgloopsさんの事例を参考に、さらにホワイトノイズを除去するために<span style="color: red;">5日間連続でログインしたユーザー</span>のみを抽出しています。<br />
これにより、広告出稿により急激にDAUが上昇しても(スパイクノイズ)対応でき、気まぐれでログインしたユーザー(ホワイトノイズ)も除去された、純粋に毎日楽しんでいるユーザーのみを対象とした推移を見ることができます。<br />
さらに、この指標でとれたユーザーの課金額が全体の売上の80%以上を占めているということで、売上に影響を与えるユーザーを常にウォッチできる非常に優れた指標だと言えます。<br />
ただ、メンテナンスなどでログインできない時間帯があると、大きく下がってしまうので、5日間中4日間ログインしたユーザーを対象にするなど、さらなる試行錯誤をされているようです。<br />
<br />
このように各社様々な<span style="color: red;">「ゲームの面白さ」を測るKPI</span>を検討しています。<br />
ゲームのジャンルによってもそのKPIは異なるし、会社の規模(人員やお金)によっても使いこなせるKPIは変わってきます。<br />
ただ、大事なのは数値を見ることではなく、その先にあるユーザーを見ることなので、そのあたりを忘れず自社にあったKPIを追求していくのが大切ですね。Anonymoushttp://www.blogger.com/profile/07578915598369674936noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-61309588578457095492015-04-22T10:55:00.000+09:002015-04-22T10:55:11.822+09:00Intellij IDEAでクリップボードを有効にする方法Intellij IDEAは独自のCopy&Pasteの機能を実装しているようで、<br />
デフォルトのままだとクリップボード(Clipboard)を利用できないようです。<br />
※ほかのアプリでコピーした内容をペーストできない。<br />
<br />
このような状態になってしまった方は次の内容を試してみてください。<br />
<div>
私はこの方法で利用できるようになりました。</div>
<div>
<br /></div>
修正ファイル<br />
<br />
Windows:<br />
<br />
「<IntelliJ IDEA>/bin/idea.properties」次の内容を追加する。<br />
※Macでも同様のファイルがあると思います。<br />
<br />
idea.use.alt.clipboard.sync=true<br />
<br />
<br />
Mac:<br />
<br />
ide.mac.useNativeClipboard=True<br />
<div>
<br /></div>
<div>
<br /></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-78102457484966492462015-04-13T18:11:00.002+09:002015-04-13T18:11:50.040+09:00Android StudioとUnityで一緒に開発する方法今日はAndroid StudioとUnity両方で開発する方法を伝えます。<br />
<br />
私の環境は次の内容です。<br />
Unity 4.6.2f1<br />
Android Studio 1.1.0<br />
<br />
まずはUnityで次の作業を実施してください。<br />
<br />
1. Build Settings (Ctrl + Shift + B)を開く<br />
2. PlatformでAndroidを選んでSwitch Platformをクリック<br />
3. Google Android Projectのチェックボックスにチェックを入れる<br />
4. Exportをクリックしてフォルダを選択する。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-Oh7N2vnMh_4/VSuIAtdAzZI/AAAAAAAAAAg/99s3Gd9l1aU/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-Oh7N2vnMh_4/VSuIAtdAzZI/AAAAAAAAAAg/99s3Gd9l1aU/s1600/1.jpg" height="320" width="293" /></a></div>
<br />
<br />
上記を行うことで次の内容のフォルダが出力されます。<br />
<br />
出力フォルダ<br />
│ AndroidManifest.xml<br />
│ project.properties<br />
│ <br />
├─assets<br />
│ └─bin<br />
├─libs<br />
│ │ QCARUnityPlayer.jar<br />
│ │ unity-classes.jar<br />
│ │ Vuforia.jar<br />
│ │ <br />
│ └─armeabi-v7a<br />
│ <br />
├─res<br />
│ ├─drawable<br />
│ │ app_icon.png<br />
│ │ <br />
│ └─values<br />
│ strings.xml<br />
│ <br />
└─src<br />
└─Javaパッケージ<br />
<br />
※ 「libs/armeabi-v7a」は環境によって異なると思います。<br />
<br />
ここからAndroid Studioに反映していきます。<br />
Android Studioのプロジェクトが次のようになっていると思います。<br />
存在しないフォルダがある場合は手動で作成してください。<br />
※ assets,jniLibsあたりが無いかもしれません。<br />
<br />
Android Studio<br />
├─.gradle<br />
├─.idea<br />
├─app<br />
│ ├─libs<br />
│ └─src<br />
│ ├─androidTest<br />
│ └─main<br />
│ ├─assets<br />
│ ├─java<br />
│ ├─jniLibs<br />
│ └─res<br />
├─build<br />
└─gradle<br />
<br />
<br />
1. Unity側の「assets」をAndroid Studioの「app/src/main/assets」にコピーする。<br />
2. Unity側の「libs/*.jar」をAndroid Studioの「app/libs」にコピーする<br />
3. Unity側の「libs/armeabi-v7a」をAndroid Studioの「app/src/main/jniLibs」にコピーする。<br />
※「armeabi-v7a」以外にもフォルダがあった場合はそのフォルダもコピーしてください。<br />
4. Unity側の「res」配下の内容をAndroid Studioの内容とマージする。<br />
5. Unity側のAndroidManifest.xmlとAndroid Studioの内容とマージする。<br />
6. Unity側の「Javaパッケージ」を「app/src/main/java」にコピーする。<br />
<br />
<br />
あとは「UnityPlayerNativeActivity」を継承した独自のActivityを作成したり、<br />
直接「UnityPlayerNativeActivity」を修正したりしてActivityを開発してください。<br />
一度ここまで行ってしまえば、<br />
Unity側を更新した際は、<br />
「assets/bin」を置き換えるだけでUnity側の内容が更新されます。<br />
※ 念のため、Android Studionの「assets/bin」を削除した後、コピーしてください。<br />
<br />
それでは楽しいAndroid, UnityライフをAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-62238580814112862092015-04-08T16:23:00.001+09:002015-04-08T16:29:41.540+09:00Android で Myo のデータを取得しようどうも、モーション認識部分を担当している太田です。m(_ _)m
<br />
<br />
みなさん、Myo ご存知ですか?<br />
知らない方のために、リンク貼っておきます。(for Developer)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/UL_pDatlLOg/0.jpg" frameborder="0" height="266" src="http://www.youtube.com/embed/UL_pDatlLOg?feature=player_embedded" width="320"></iframe></div>
<br />
・・・どうです?楽しそうでしょ?<br />
<br />
Developer 向けに様々な SDK が公開されています。<br />
が、残念なことに一番面白そうな筋電位データ (EMG) が Android で見れない!<br />
<br />
なので、Bluetooth 通信からゴリゴリと取得してみました。<br />
参考にしたのは、制作元が公開している Bluetooth の仕様(C++ のヘッダファイル)と Android のサンプルページ。<br />
<a href="https://github.com/thalmiclabs/myo-bluetooth">https://github.com/thalmiclabs/myo-bluetooth</a>
<a href="https://developer.android.com/guide/topics/connectivity/bluetooth-le.html">https://developer.android.com/guide/topics/connectivity/bluetooth-le.html</a><br />
<br />
サンプルページの固有値に関して、Myo の仕様に合わせていけば万事 O.K. です。<br />
ただし注意としては、characteristic から取得できるバイト値が<b>リトルエンディアン</b>であること。また、Myo が送信するデータの種類をユーザ側から設定しないといけないので、<b>Myo のコマンド</b>をデータ取得より先に設定してあげることが必要になります。<br />
Myo の仕様を見るとデータ類は全て <b>notification</b> によって取得されるので、この辺りの実装も当然必要です。
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-SsDp6kinIzw/VSTSPF-UWBI/AAAAAAAAAAU/uEWsdZckYwk/s1600/Screenshot_2015-04-08-15-44-47.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-SsDp6kinIzw/VSTSPF-UWBI/AAAAAAAAAAU/uEWsdZckYwk/s1600/Screenshot_2015-04-08-15-44-47.png" height="207" width="320" /></a></div>
<br />
まぁ、こんな感じに取得できます。カッコ内の値は秒間のデータ数です。<br />
<br />
<br />
値を取得するのは出来たのですが、characteristic の notification の設定を有効にすると characteristic の read が使えません。その逆もまた然りです。(T^T)<br />
今のところ、設定の早いもん勝ち状態です。<br />
<br />
Android の仕様なのか掴みきれてませんが、同じようなことを言ってる人がチラホラ・・・。<br />
<a href="http://stackoverflow.com/questions/17910322/android-ble-api-gatt-notification-not-received">http://stackoverflow.com/questions/17910322/android-ble-api-gatt-notification-not-received</a><br />
<a href="http://stackoverflow.com/questions/22817005/why-does-setcharactersticnotification-not-actually-enable-notifications">http://stackoverflow.com/questions/22817005/why-does-setcharactersticnotification-not-actually-enable-notifications</a><br />
そもそも、notification の設定をする descriptor を BluetoothGatt に書き込むのが解せません。。。<br />
<br />
どなたか良いアイデアあれば教えて下さい。m(_ _)m<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
太田直樹http://www.blogger.com/profile/02389129189707698520noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-50283754114510760212015-04-03T12:29:00.002+09:002015-04-03T12:30:19.143+09:00Node.js+Socket.ioを利用してサーバ<->サーバ間通信クライアント<->サーバ間でリアルタイム通信をしたい場合にsocket.ioを利用すると思いますが、<br />
今回はこれを利用してサーバ<->サーバ間通信を実現してみます。<br />
<br />
※ socket.ioのバージョンは「1.3.5」を利用しています。<br />
<br />
<br />
受信側:<br />
server.js<br />
<br />
var socketio = require("socket.io");<br />
var io = socketio.listen(3000);<br />
console.log("start socket.io server.");<br />
io.sockets.on("connection", function (socket) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>console.log("user connect!")<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>socket.on("message", function (data) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>console.log(data);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>});<br />
});<br />
<br />
受信側は特に特殊な実装はなし。<br />
クラサバ通信の時と同じ実装で問題ありません。<br />
<br />
<br />
では、次に送信側の実装内容です。<br />
<br />
送信側:<br />
client.js<br />
<br />
var io = require('socket.io-client');<br />
var socket = io('http://localhost:3000');<br />
socket.on('connect', function () {<br />
socket.emit("message", 'send message.');<br />
});<br />
<br />
<br />
socket.io-clientパッケージを利用すれば簡単に実装できてしまいました。<br />
<br />
<br />
最後に起動方法を記載して終了とさせていただきます。<br />
<br />
受信側:<br />
]$ sudo npm install socket.io<br />
]$ node server.js<br />
start socket.io server.<br />
<br />
送信側:<br />
]$ sudo npm install socket.io-client<br />
]$ node client.js<br />
<div>
<br /></div>
<div>
※ 受信側を実行した後、送信側を実行すると受信側に次のメッセージが表示されます。</div>
<div>
<br /></div>
<div>
<div>
user connect!</div>
<div>
send message.</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-65948555121964855892015-03-28T16:03:00.003+09:002015-03-31T15:04:37.253+09:00SXSWで見たウェアラブル、IoTの今後SXSW(サウスバイサウスウエスト)とは、毎年3月にアメリカテキサス州オースティン市で行われる、音楽と映画、ITの祭典です。<br />
<br />
もともと音楽のイベントとして始まったということもあり、この時期になるとオースティンは音楽に包まれ、夜になると路上はパーティ状態です。ちなみにtwitterが有名になったのもこのイベントです。毎年その時々の旬なプロダクトが世界中から集まってきます。そんな楽しいイベントに参加し、ITを中心にいろいろ見てきました。<br />
<br />
今年のSXSWで注目されていたテーマは、IoT、ウェアラブル、デジタルヘルス、AI、ロボット、ビッグデータ、VRあたりです。これらのテーマを中心に数千のセッションが組まれ、街中の至る所で議論がされています。その中で私はVR/AR/ウェアラブル/IoTなどの展示、セッション中心に見てきました。<br />
<br />
ちなみにVRとARの違いはこんな感じです。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-7jNut-BDhlA/VRZPUZv-P6I/AAAAAAAAAZA/QGUkMAF2cTQ/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%2B2015-03-28%2B15.49.43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-7jNut-BDhlA/VRZPUZv-P6I/AAAAAAAAAZA/QGUkMAF2cTQ/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%2B2015-03-28%2B15.49.43.png" height="244" width="320" /></a></div>
VRはユーザーがゲームの世界、宇宙空間などの異世界に入ること、ARは現実世界にバーチャルの要素を取り込むということです。分かりやすく言うとこんな感じです。<br />
<br />
<br />
<br />
<b>VRの様々な可能性が追求されている</b><br />
VRはoculus riftの登場、そしてfacebookによる買収により圧倒的な注目を集めています。もともとはFPSゲームに使うデバイスとして考えられていたデバイスですが、現在VRはゲームを超えて様々な用途で注目されています。<br />
例えば、乗り物やインテリアのシミュレーション、教育、旅行、医療などです。<br />
それだけヘッドマウントディスプレイ(HMD)の解像度や、ヘッドトラッキングの精度が良くなり、「本当にその世界に没入した感覚」が得られと考えているのです。<br />
そのVRの可能性を感じ、多くのメーカーがVR用の端末を発表し始めており、その数は数えきれないほどになってきています。代表的なのはoculusとSonyのMorpheusですが、それ以外にも日本の「Fove」やオープンソースVRHMD「OSVR」などもあります。<br />
今回SXSWではその中のいつくかを体験してきました。<br />
Foveは視線でコントロールするVRHMDです。デバイスの内側に視線を認識するセンサーが組み込まれており、ゲームプレイ時に視線で照準を合わせることができます。ゲームの他にも、体に障害のある子どもがピアノを視線で弾けるようにするなどのプロジェクトも行われています。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-u_XpKpc4bMc/VRZQxqzL7AI/AAAAAAAAAZM/7VT2EtdBtfU/s1600/DSC_0024.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-u_XpKpc4bMc/VRZQxqzL7AI/AAAAAAAAAZM/7VT2EtdBtfU/s1600/DSC_0024.JPG" height="180" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/VHXx7XTPULE/0.jpg" frameborder="0" height="266" src="http://www.youtube.com/embed/VHXx7XTPULE?feature=player_embedded" width="320"></iframe></div>
<br />
こちらはOSVRのHMD<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-0fApI4MwPm8/VRZRywhPvsI/AAAAAAAAAZU/aLWg9VI51Rs/s1600/DSC_0147.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-0fApI4MwPm8/VRZRywhPvsI/AAAAAAAAAZU/aLWg9VI51Rs/s1600/DSC_0147.JPG" height="320" width="180" /></a></div>
<br />
VRはこれからますます盛り上がりを見せていくと思います。<br />
CG映像だけでなく、360°映像を撮影する環境も整ってきました。リコーのシータやGoproを使って撮影する会社も多いです。さらにfacebookが360°映像をアップロード可能にしたので、これから360°映像のコンテンツは増えてくるのではないでしょうか。<br />
<br />
<br />
<br />
<b>ARデバイスはステルスで開発中、アプリもまだ出てきていない</b><br />
今回SXSWでは、ARの将来性を語るセッションはあったものの、ARの展示は全くありませんでした。Microsoftの「HoloLens」やベンチャーのmagic leapなどが注目されていますが、デバイスはまだ露出されていません。イメージムービーのみが出てきている段階です。<br />
これはmagic leapのイメージムービー。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/kPMHcanq0xM/0.jpg" frameborder="0" height="266" src="http://www.youtube.com/embed/kPMHcanq0xM?feature=player_embedded" width="320"></iframe></div>
<br />
<div>
そしてこれがHoloLensのムービーです。</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/aThCr0PsyuA/0.jpg" frameborder="0" height="266" src="http://www.youtube.com/embed/aThCr0PsyuA?feature=player_embedded" width="320"></iframe></div>
<div>
<br /></div>
<div>
ARはまだ開発者向けとしても出ているものは非常に少なく、まだまだこれから立ち上がってくる市場だと思います。ちなみにガートナーが出しているハイプサイクルを見てもARはこれからの技術であることはわかります。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-xzNek-uIxQg/VRZYnnnTIPI/AAAAAAAAAZk/XOEwUmcI0is/s1600/l_bit140903gartner01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-xzNek-uIxQg/VRZYnnnTIPI/AAAAAAAAAZk/XOEwUmcI0is/s1600/l_bit140903gartner01.jpg" height="220" width="320" /></a></div>
<div>
<br /></div>
oculusのCEOであるPalmer Luckey氏はSXSWのセッションにて、「ARには興味があるがまだこれからの市場であり、今はARのキラーアプリはない。VRであればイケてる体験を作れる」と言ってました。<br />
弊社meleapはこのARを全力で切り開いていこうとしています。非常にチャレンジングでワクワクするテーマです。0から1をつくる瞬間ですね。<br />
<br />
<br />
<b>混沌としているIoT</b><br />
IoTというテーマも最近非常に注目されていますが、定義も曖昧でカオスな印象があります。<br />
IoTが盛り上がっている背景にはスマホが普及し、通信環境が整い、センサーを安く作れるようになったという動きがあると思います。<br />
SXSWの展示では「身の回りの様々なモノにセンサーを設置し、スマホで情報をみる」というものが数多くありました。例えば、ベッドにセンサーを付けて睡眠を分析する、歯ブラシにセンサーをつけてどのくらい磨いたか分析するなどです。こういうのを見ると何でもありだな!とびっくりします。<br />
また、スマートウォッチもIoTに含まれると思いますが、Apple Watchが出るということもあり、今後の展開に注目が集まっています。最近ではpebbleがkickstarterで史上最高額を集めました。<br />
スマートウォッチやスマートグラスのように常にディスプレイを身につけることで、そのとき必要な情報を素早く取得できるようになりますし、街中で起きた出来事がいち早くネットにアップされます。こうやって世界中を飛び交う情報の速度がどんどん加速していくでしょう。Anonymoushttp://www.blogger.com/profile/13037278032560545273noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-7559876405397813142015-02-27T19:52:00.000+09:002015-02-27T19:52:13.171+09:00MyoのAndroidサンプルを動かしてみる15分もあればできると思います<br />
<br />
<br />
①https://developer.thalmic.com/downloadsにアクセスしてAndroid SDK 0.10.0 (Dec 19, 2014)をダウンロード<br />
<div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-OeqpZzVS4Z0/VN8j6XH60sI/AAAAAAAAAB4/Uck7-Qe2094/s1600/myo000.png" imageanchor="1" style="display: inline !important; margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" src="http://1.bp.blogspot.com/-OeqpZzVS4Z0/VN8j6XH60sI/AAAAAAAAAB4/Uck7-Qe2094/s1600/myo000.png" height="200" width="320" /></a></div>
</div>
</div>
<br />
②AndroidStudioを起動してFile→Import Projectをクリックしてsamplesを選択しOKを押す<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-mxwHzVSS0CE/VN8j8JCnxII/AAAAAAAAACA/cu3l01HQwiM/s1600/myo001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-mxwHzVSS0CE/VN8j8JCnxII/AAAAAAAAACA/cu3l01HQwiM/s1600/myo001.png" height="320" width="271" /></a></div>
<div>
<br /></div>
<div>
③インストールしたいアプリを選択してRunボタンを押す</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-xTCebrvHSNI/VN8mJvbR4iI/AAAAAAAAACM/re1JISb-8eU/s1600/myo002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-xTCebrvHSNI/VN8mJvbR4iI/AAAAAAAAACM/re1JISb-8eU/s1600/myo002.png" height="225" width="400" /></a></div>
<div>
<br /></div>
<div>
④インストールするスマホを選択してOKをおして少し待つとインストール完了</div>
<div>
<br /></div>
<div>
⑤Myoを腕につけてキャリブレーションを行う</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-fj_uQVDOUao/VN8n9-h0wNI/AAAAAAAAACY/dixUR2_EWhs/s1600/myo003.png" imageanchor="1" style="display: inline !important; margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" src="http://1.bp.blogspot.com/-fj_uQVDOUao/VN8n9-h0wNI/AAAAAAAAACY/dixUR2_EWhs/s1600/myo003.png" height="237" width="320" /></a></div>
</div>
<div>
<br /></div>
<div>
⑥Hello Worldアプリを起動してScanボタンを押す</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-6Y4OELKGMlQ/VN8qhFSVSvI/AAAAAAAAACk/ckOTmH6Rjwg/s1600/Screenshot_2015-02-14-19-52-16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" src="http://2.bp.blogspot.com/-6Y4OELKGMlQ/VN8qhFSVSvI/AAAAAAAAACk/ckOTmH6Rjwg/s1600/Screenshot_2015-02-14-19-52-16.png" height="320" width="180" /></a></div>
<div>
<br />
<br />
⑦接続できるMyoが表示される<br />
<span style="color: red;">※このときパソコンにドングルを接続したままだと一覧に表示されません</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-j37Ysi0enU4/VN8qiRCw-8I/AAAAAAAAACs/T_p1d6UQHto/s1600/Screenshot_2015-02-14-19-57-54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-j37Ysi0enU4/VN8qiRCw-8I/AAAAAAAAACs/T_p1d6UQHto/s1600/Screenshot_2015-02-14-19-57-54.png" height="320" width="180" /></a></div>
<br />
⑧戻るボタンを押してダブルタップすると認識が始まります</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-kOPx4WPfCPI/VPBJ9yt55bI/AAAAAAAAADA/mIw3WixXVj8/s1600/Screenshot_2015-02-27-19-38-24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-kOPx4WPfCPI/VPBJ9yt55bI/AAAAAAAAADA/mIw3WixXVj8/s1600/Screenshot_2015-02-27-19-38-24.png" height="320" width="180" /></a></div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-27578893512557816672015-02-26T17:25:00.000+09:002015-02-26T17:28:37.049+09:00【KPI分析(第2回)】DAUを狂わすノイズ編ソーシャルゲーム(に限らずアプリ全般)のKPI分析講座、第2回目は「DAUを狂わすノイズ編」と題してお送りします。<br />
第1回目の用語解説編は下記をご覧ください。<br />
<br />
<a href="http://meleap124.blogspot.jp/2015/01/kpi.html">【KPI分析(第1回)】用語解説編</a><br />
<br />
さて、前回の用語解説の中で、DAU(daily active users)という1日にそのアプリを使用した人数という値があったかと思います。<br />
DAUという値は、売上を算出するのにも使用しますし(売上=DAU×ARPPU)、ごく一般的で各社共通の指標なので、用いられることは多いです。また、偉い人とかがこの値で一喜一憂したりする極めて重要なKPIです。<br />
<br />
ですが、DAUという値は、広告などのブースト施策などを行うと急激に増えるし、翌日には急激に減ってしまうなど、あまりにも変動が大きい値です。<br />
純粋にゲームを楽しんでくれているユーザーが何人いるのか、ゲームバランスやバグなどで離脱してしまっているユーザーはいないか、などの分析をするにはノイズが多すぎて信頼性に欠けてしまいます。<br />
<br />
そこで、DAUに代わる<span style="color: red;">アプリの使われ具合がわかる別の指標</span>が必要になってくるのです。<br />
<br />
まずは、そもそもDAUに含まれるノイズって何?ってとこですが、下記のようなものが考えられるかと思います(<a href="http://www.slideshare.net/TokorotenNakayama/dau-21559783">ドリコムさんのslideshare</a>を参考にさせていただいています)。<br />
<br />
<b><ホワイトノイズ></b><br />
<ul>
<li>遊んでないけどアップデートされてたから起動してみた</li>
<li>通知のバッジを消したくて起動だけした</li>
<li>ログインボーナスや補填の課金アイテム目当てで起動してみた</li>
<li>休日で暇すぎるから起動してみた</li>
<li>メンテナンスやサバ落ちなどで起動できなかった</li>
</ul>
<div>
<b><スパイクノイズ></b></div>
<div>
<ul>
<li>広告出稿してインストール数急増</li>
<li>テレビCM開始してインストール急増</li>
<li>他タイトルとのコラボキャンペーンでインストール急増</li>
</ul>
<div>
<br />
ホワイトノイズは<span style="color: red;">ユーザの気まぐれ</span>が起因します。このノイズによるDAUの増減にはまったくといっていいほど意味はありません。このようなノイズを取り除いたきれいなデータが必要です。</div>
</div>
<div>
また、スパイクノイズは<span style="color: red;">広告出稿などにより一時的にDAUが急増</span>する事を意味します。それにより、<span style="color: red;">ARPU(ユーザ一人あたりの平均課金額)は激減します(インストールしたばかりのユーザは基本的には課金しないため)。</span>これでは、純粋にゲーム内の施策が成功しているのか判断がつきません。なので、このようなスパイクノイズも取り除く必要があります。</div>
<div>
<br /></div>
<div>
今回は簡単ですがここまで。</div>
<div>
次回は実際に各社がどのような数値をアプリの使われ具合の指標にしているかを書いていきます。</div>
Anonymoushttp://www.blogger.com/profile/07578915598369674936noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-70859434114306359962015-01-22T20:05:00.000+09:002015-01-23T19:57:07.167+09:00TangoでARを出してみた。<br />
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/kP6sLIYholo" width="480"></iframe>
<br />
<br />
これまでXperia Z3で開発してましたが、<br />
TangoでARを出してみました。<br />
<br />
一番の違いはぬるぬる滑らかに動くこと!<br />
ARで表示されるドラゴンや背景のカメラ映像が全くカクつくことなく表示される。<br />
リアルタイムで認識した特徴点を追加しまくるので、3Dモデルを余裕で回り込る。<br />
<br />
ただしサイズが大きい!<br />
そしてアタッチメントにつけるとタブレットサイズなので頭がすっごく重くなります。<br />
これがXperia Z3のサイズになったら走り回るのは全く苦にならないだろうな。<br />
<br />
すべてのスマートフォンがTangoの鬼スペックを最低限積んでくれたらいいのに!<br />
<br />
---Tango Tablet スペック----------------------<br />
<div>
CPU:NVIDIA Tegra K1<br />
RAM:4GB<br />
内部ストレージ:128GB<br />
OS:Android 4.4 KitKat<br />
カメラ周り:4MPカメラ、モーショントラッキングカメラ<br />
センサー:赤外線センサー、深度センサー<br />
サイズ:7インチ<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/MTL1IXTDH30" width="480"></iframe></div>
<br />
<br />
今は現実的に厳しいと思うので、一部の<br />
ゲーマー向けにゲーミングスマートフォンを発売しないかなぁ。<br />
ゲーミングPCのように需要あると思います。<br />
チャレンジングなメーカーさん、ぜひぜひ作ってくださいませ。<br />
<br />
机や床の上を飛び跳ねたり壁をブチ破ってくるモンスターを倒すリアルモンハンとか、<br />
カメラ映像の中を自然にどこまでも走り回る初音ミクとか、<br />
画像処理による数センチ単位でのユーザ位置追跡とか、<br />
ケーブルなしのデバイスで実現できる世界がここまで来てる。<br />
<br />
Tangoをいじってみたいエンジニアさんはぜひご連絡ください。<br />
好きなアプリを作るのでもいいですし、試しに既存のアプリを動かしてみるのでも構いません。<br />
tangoを触りながら可能性を一緒に模索しましょ!<br />
<div>
<br /></div>
<iframe frameborder="0" height="305px" name="wantedly_project_widget_14273" scrolling="no" src="https://www.wantedly.com/projects/14273/widget" style="border-style: none; max-width: 100%; min-width: 240px; width: 540px;"></iframe><br />
<br />
<br />
Tangoって何?って方向け → <a href="https://www.google.com/atap/projecttango/#project">ProjectTangoとは?</a><br />
<div>
<br />
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/Qe10ExwzCqk" width="480"></iframe>
</div>
<div>
<br /></div>
<div>
--以下エンジニアさん向け--------------------------------</div>
<div>
<br />
<div style="background-color: white; color: #616161; font-family: 'Open Sans'; line-height: 23.3333339691162px;">
2015年1月11日時点で4つのデモアプリが用意されています。 </div>
<div style="background-color: white; color: #616161; font-family: 'Open Sans'; line-height: 23.3333339691162px;">
<a href="https://developers.google.com/project-tango/demos">Project Tango Selected Demos</a></div>
<div style="background-color: white;">
<ol style="border: 0px; color: #222222; font-family: Roboto, sans-serif; line-height: 17.9200000762939px; list-style-type: none; margin: 0px 1.5em 1.5em 0px; padding: 0px 0px 0px 2em; vertical-align: baseline;">
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><ol style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; list-style-type: none; margin: 0px; padding: 0px 0px 0px 2em; vertical-align: baseline;">
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><a href="https://developers.google.com/project-tango/demos#project_tango_cube_mover" style="border: 0px; color: #4285f4; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Project Tango Cube Mover</a></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><a href="https://developers.google.com/project-tango/demos#project_tango_wizard_demo" style="border: 0px; color: #4285f4; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Project Tango Wizard Demo</a></li>
</ol>
</li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"></li>
<ol style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; list-style-type: none; margin: 0px; padding: 0px 0px 0px 2em; vertical-align: baseline;">
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><a href="https://developers.google.com/project-tango/demos#project_tango_explorer" style="border: 0px; color: #4285f4; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Project Tango Explorer</a></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><a href="https://developers.google.com/project-tango/demos#project_tango_explorer" style="border: 0px; color: #4285f4; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;"></a><a href="https://play.google.com/store/apps/details?id=com.projecttango.debugoverlay" style="border: 0px; color: #4285f4; line-height: 22.3999996185303px; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Project Tango Debug Overlay Viewer</a></li>
</ol>
</ol>
<div>
<a href="https://developers.google.com/project-tango/downloads">開発者向けSDK</a>としてJavaだけでなくUnityも提供してくれてるのがすごくありがたいですね。</div>
</div>
<br />
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-41141394092673326982015-01-15T19:27:00.004+09:002015-01-15T19:44:03.828+09:00ウェアラブルexpoまとめウェアラブルexpoに行ってきましたのでざっくりと注目展示をご紹介します!<br />
<div>
<br /></div>
<div>
<br /></div>
<div>
YAMAHA</div>
<div>
指、腕の動きを認識するデバイス</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Dld28JLv6RU/VLeUz2tdP-I/AAAAAAAAAT8/6c0mGG1T_pk/s1600/DSC_0700.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-Dld28JLv6RU/VLeUz2tdP-I/AAAAAAAAAT8/6c0mGG1T_pk/s1600/DSC_0700.JPG" height="320" width="180" /></a></div>
<br />
<br />
グローブの伸び縮みで指の動きを認識させる。<br />
元々医療用に作ったものらしい。<br />
グローブ以外にも胸や足など全身に装着するパーツがある。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-sEYbnV6BqAY/VLeUz9gWS1I/AAAAAAAAAUA/nDlbnrvs8FQ/s1600/DSC_0701.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-sEYbnV6BqAY/VLeUz9gWS1I/AAAAAAAAAUA/nDlbnrvs8FQ/s1600/DSC_0701.JPG" height="180" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
<br /></div>
<div>
<br /></div>
<div>
Flexible Battery - Jenax</div>
<div>
シート状の折り曲がるバッテリー</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-dvDKZNCG_d4/VLeRIysW2WI/AAAAAAAAATY/JSgolZ4FcLU/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%2B2015-01-15%2B19.06.06.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-dvDKZNCG_d4/VLeRIysW2WI/AAAAAAAAATY/JSgolZ4FcLU/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%2B2015-01-15%2B19.06.06.png" height="200" width="320" /></a></div>
<div>
<br /></div>
<div>
<a href="http://jenaxinc.com/">http://jenaxinc.com/</a></div>
<div>
これがあればウェアラブルデバイスをコンパクト化できますね。</div>
<div>
衣類系なんかに埋め込むのも便利です。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
castAR</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-s6iVnO29UmA/VLeR7eF1CWI/AAAAAAAAATg/i-TjiRt-VUc/s1600/DSC_0695.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-s6iVnO29UmA/VLeR7eF1CWI/AAAAAAAAATg/i-TjiRt-VUc/s1600/DSC_0695.JPG" height="180" width="320" /></a></div>
<div>
kickstarterに出てたやつですね。仕組みは特徴的で、HMDのプロジェクターから前方に映像を投影し、反射した光を偏光メガネで見るというものです。ヘッドトラッキングの精度はいまいちでしたが、画角はかなり広く、環境を選ばなければmoverioよりもリッチな体験ができそうです。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
杉原SSEI</div>
<div>
位置情報計測システム</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-bC6uePfArW0/VLeVjH8XFWI/AAAAAAAAAUM/iqO5FQruLik/s1600/DSC_0698.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-bC6uePfArW0/VLeVjH8XFWI/AAAAAAAAAUM/iqO5FQruLik/s1600/DSC_0698.JPG" height="180" width="320" /></a></div>
<div>
加速度・地磁気(一部wifiも)などのセンサーなどを使い、ユーザーの位置を計測するシステム。デモ動画は精度かなりよかった。</div>
<div>
複数のセンサーを使っているのがポイント。センサーの種類はスマホと変わらないとのこと。</div>
<div>
<a href="http://www.ssei.co.jp/">http://www.ssei.co.jp/</a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
welcat</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-HZIbLWPCpSo/VLeURfJSkEI/AAAAAAAAAT0/Qmt4Wxfk2z0/s1600/DSC_0697.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-HZIbLWPCpSo/VLeURfJSkEI/AAAAAAAAAT0/Qmt4Wxfk2z0/s1600/DSC_0697.JPG" height="320" width="180" /></a></div>
<div>
<br /></div>
<div>
腕に装着するバーコードリーダー</div>
<div>
作業中に使うウェアラブル。</div>
<div>
写真のデバイスを腕に装着する。</div>
<div>
<a href="http://www.welcat.co.jp/">http://www.welcat.co.jp/</a></div>
<div>
物流倉庫などで使えるのでは?</div>
<div>
レーザーがかっこいい。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
<br />
<br />
<br /></div>
<div>
brother工業<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-ReORd09zX7I/VLeZSXCeJbI/AAAAAAAAAUY/y7aCqlVcMz8/s1600/img02.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-ReORd09zX7I/VLeZSXCeJbI/AAAAAAAAAUY/y7aCqlVcMz8/s1600/img02.jpg" /></a></div>
<br />
以前から片眼HMDを出しているが、今回出していたのは頭に装着するタイプのもの。<br />
位置を自由に調整できます。透過型と非透過を選べる方式。非透過はやはり映像が綺麗に映し出されますね。見るのにコツがいりますが。<br />
<a href="http://www.brother.co.jp/news/2015/150107_airscouter/">http://www.brother.co.jp/news/2015/150107_airscouter/</a></div>
Anonymoushttp://www.blogger.com/profile/13037278032560545273noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-6060998678736984532015-01-05T12:54:00.000+09:002015-02-26T17:26:12.075+09:00【KPI分析(第1回)】用語解説編あけましておめでとうございます。<br />
meleapの2015年も本日からスタートしました!<br />
<b>今年はmeleapの名前が世界中に轟くような1年にします。必ず!</b><br />
<br />
さて、ブログネタですが、meleapにはソーシャルゲーム業界あがりの人間が自分以外いないので、半分社内向けにソーシャルゲーム(に限らずアプリ全般)界隈でよく出てくるKPI(Key Performance Indicators:重要業績評価指標)について何回かにわけて書いていきたいと思います。<br />
<br />
まずは第1回目なので、超基本的な用語解説から。<br />
<br />
<h4>
◆ダウンロード数</h4>
これはそのままですね。アプリがダウンロードされた数です。<br />
でも、この数字はほとんど意味をなさない数字です。なぜならその大半はもう遊ばれていないか、端末から削除されてるから。<br />
でも大きな会社の偉い人は気にする数字です。「◯◯万ダウンロード突破!」とかいいたいですからね。<br />
あと、広告のゴールとして設定されがちですが、広告の役割は良質なユーザーを効率よく獲得することなので、ダウンロード数だけ見て一喜一憂するのはなんの意味もありません。<br />
<br />
<h4>
◆DAU</h4>
これは、daily active usersの事で1日のアクティブユーザー数です。ちなみにMAUは月のアクティブユーザー数。<br />
この数字、一昔前(ブラウザマンセーの頃)は超重要な数字とされていて日々上がった下がったを注視してましたが、現在においては非常に不確かな数値でDAUをウォッチしててもあまり意味がないと言われています。<br />
<span style="color: red;">DAUはブースト施策などで簡単に上がるし、次の日にはガクッと下がります</span>。なので、純粋にユーザーが楽しく遊んでくれているか、なにかゲーム内に問題が起きていないかをチェックするのには、信頼性に欠ける数値なのです。<br />
このあたりは今後もっと深堀りしていきます。<br />
<br />
<h4>
◆PU</h4>
payed usersの略で、課金をしたユーザー数の事。<br />
この数値は今も昔も非常に重要なKPIの一つです。基本無料モデルが定着し、一人がいくつものアプリを試しては削除してを繰り返している中、1円でもお金を支払ってくれたユーザーというのはそのアプリにとって非常に価値のあるユーザーです。<br />
課金率や課金額は広告や施策により大きく上下しますが、このPUはそこまで大きく変動しません。なによりアプリ自体の面白さが影響してくる数値です。<span style="color: red;">この数値が減少しているということは面白いと思ってくれていたユーザーの期待を裏切り離れていってしまった事を意味します</span>。<br />
<br />
<h4>
◆課金率</h4>
アクティブユーザーのうち、課金者がどのくらいいるかの割合です。基本的には、Dailyで見ることが多いので、DailyのPU/DAUで算出します。<br />
先にも説明したとおり、DAU自体がブースト施策などで大きく変動する値なので、課金率もおのずと大きく変動します。<br />
ですので、売上を予測する上で重要な数字ではありますが、あまり信頼性はない数字です。<br />
<br />
<h4>
◆ARPPU</h4>
ARPPU(average revenue per payed users)は課金者一人あたりの平均課金額で、売上/PUで算出します。<br />
この数値を上げることは売上にダイレクトに影響するので、重要な数値ですが、サービスを長続きさせたいのであれば、しっかりとバランスをとり、時にはARPPUの上昇を抑えるなどの処置も必要な場合があります。ガチャモデルのゲームなどはARPPUが高くなる傾向にあり、<span style="color: red;">ARPPUの上昇がコンテンツの消費スピードを加速させたり、無課金ユーザーと重課金ユーザーとの差を広げるなどして、ユーザーを離脱させる原因にもなりかねません</span>。<br />
とはいえ、売上を上げることを義務付けられている苦しいサービスの場合は(ほとんどそうだけど)、ガチャ施策などでARPPUを手っ取り早く上げ、その場しのぎの売上向上を行う事が多いのが現状かと。<br />
<br />
<h4>
◆ARPU</h4>
ARPU(average revenue per users)は、ユーザー一人あたりの平均課金額で、売上/DAUで算出します。<br />
こちらもDAUを計算に使用しているので、あまり信頼性の高い数値ではないです。<br />
広告の効果検証として、新規ユーザーが課金者(PU)になったかを評価する指標として用いる場合もあるけれど、個人的にはあまり注視しなかったです。<br />
<br />
<h4>
◆継続率</h4>
その名の通り、アプリをダウンロードしてくれた人のうち何人が継続して遊んでくれているかを示す指標です。<br />
一般的には、ダウンロードしてから1〜7日、14日、30日、くらいを目安にそれぞれの継続率を見ていきます。<br />
ブラウザゲーム全盛の頃は、アプリをリリースしたらmobageやGREEの新着枠に掲載され、そこから数万というユーザーが自然流入してきたので、翌日継続率、3日後継続率、7日後継続率あたりをいかに高めるかに躍起になっていました。その初動でアプリの生死が決まるといっても過言でなかったからです。<br />
もちろん、現在のネイティブアプリでも継続率の重要性は変わりません。ただ、傾向として<span style="color: red;">無理やり施策で継続率を上げるという流れから、ゲーム自体の面白さで上げていくという本質的な流れに変わってきている</span>と思います。<br />
<br />
<h4>
◆LTV</h4>
life time valueの略で、ユーザー一人あたりがゲームを辞めるまでの生涯課金額の事。主に広告効果を評価する際に使用する。<br />
広告によって1ユーザー獲得するのに使った金額より、そのユーザーが辞めるまでにこのゲームに課金した金額が高くないと、広告を打つ意味がなく、広告を打てば打つほど赤字になってしまいます。<br />
なので、<span style="color: red;">アプリのLTVよりいかに低い金額でユーザーを獲得できるか。そして、獲得後にLTVを下げないような優良なユーザーを獲得できるか</span>が、広告担当者の腕の見せどころになるのかと思います。<br />
このあたりも今後もう少し深堀りしていきたいです。<br />
<br />
<h4>
◆売上</h4>
特に説明も必要ないですが、アプリの課金額の合計です。<br />
単純な課金額の合計をグロス売上、プラットフォームの手数料を差し引いた売上をネット売上とか言ったりします。<br />
売上を予測する上で、DAU✕課金率✕ARPPUという式を使ったりします。<br />
ただずっと言っているようにブースト施策によって各種KPIは大きく変動するので、正確に予測するにはもっと根底にあるKPIを元に算出する必要があります。<br />
売上アップはゴールではありますが、<span style="color: red;">上辺の数値だけ見てては適切な施策どころか一過性で寿命を縮める施策を打つことになってしまいます</span>。現場にはあまり売上アップを強要しないほうが健全な運営ができると思います。<br />
<br />
<br />
とりあえずはここまで(なんか気づいたら大ボリュームになってた^^;)。<br />
とはいえ、上に挙げた用語は基本中の基本のものです。<br />
見るべき指標はアプリによって異なるし、施策によっても異なります。<br />
また、ブラウザゲーム全盛の頃とネイティブが主戦場の今とでも大きく異なります。<br />
<br />
KPI分析の手法も日進月歩です。<br />
アプリの異変にいち早く気づくために、施策や広告を効率よく打つために、より「正確」なKPIはなにかを各社日々追求しています。<br />
次は、より「正確」なKPIとはなにか、というあたりを書こうかと思います。では。Anonymoushttp://www.blogger.com/profile/07578915598369674936noreply@blogger.comtag:blogger.com,1999:blog-3936195585354700006.post-78389087153588851362014-12-26T00:18:00.000+09:002015-08-04T18:24:28.724+09:00【unity C#】Prefab生成時に名前の後ろにつく(clone)を消す方法<div>
UnityでPrefabをInstantiateすると自動的に名前の後ろに(Clone)がつきます。</div>
<div>
今回こまったのが他のスクリプトからオブジェクト名を使って指定しているため(Clone)がついていると名前が違うため指定できません。</div>
<div>
<br /></div>
<div>
それではC#での(Clone)を消す方法を紹介します。</div>
<div>
<br /></div>
<div>
<div>
using UnityEngine;</div>
<div>
using System.Collections;</div>
<div>
<br /></div>
<div>
public class nametest : MonoBehaviour {</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>public GameObject target1;</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>void Start()</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>{<span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>GameObject newTarget1 = (GameObject)Instantiate(target1);</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>newTarget1.name = target1.name;<span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>}</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>void Update () {</div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>}</div>
<div>
}</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
あとはInspectorでtarget1にPrefabをセットしたらOKです。</div>
<div>
javascriptでの書き方はググればすぐ出てくるのでそちらをどうぞ。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
参考サイト</div>
<div>
http://answers.unity3d.com/questions/28114/remove-clone-from-instantiated-gameobjects-name.html</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Anonymousnoreply@blogger.com