「技術メモ」カテゴリーアーカイブ

速習:ARアプリ1

瞬時にARアプリを作ります(更新中 2017年7月)

Unity ver. (5 or latest?) no info.

renew 05.Jul.2017

Vuforia is not Free > https://developer.vuforia.com/pricing

Vuforia Lib ver. 6-2-10(latest ver. on Jul 2017)

https://developer.vuforia.com/

へ行き,Regisiterをクリックし,必要事項を入力し登録します.

Vuforia Developer Portalへログインし,

Downloads>SDKの,

Download Unity Extensionをダウンロード(Win,Mac共通)

※UnitypackageはWin,Mac共用できることが多いですよ

Unityを開き,Assets>Import Package>Custom PackageダウンロードしたUnitypackageを選択し,全てImportします

vuforia2

Importします

古いスクリプトを最新版にコンパイルし直すか聞かれるので,I MADE a Backup,,,,,をクリックします

次へ

作業3:デザイン修正版スタート時期について

(1期)基本デザインの完成

先日の実行委員会で決まったことです.

ーロゴと配色の変更

ー内容は2015版に変更する

最終的な会場予約を近々おこない,内容の文書はこちらで作成します.デザインについては自由にすすめてください.

なお,「ロゴも自由に変えていいですよ」とのことでした.

U-18カテゴリーを設けるので,高校生や大学生に親しみやすいといいですが,,,

5月上旬(できればGW開けすぐに)に公開開始したいですね,

テーマついて

ワードプレスのテーマがたくさん置いてあるウェブサイトは以下です。

2015年 : 無料で使えるクオリティの高いWordPressテーマ 120

またタブレットやスマートフォンそれからパソコンのそれぞれに対応しているテーマがあります。

こうしたデザインのことをレスポンシブデザインと呼び、このレスポンシブデザインに対応しているテーマを採用スルすることで、デザインをいちど作るだけでさまざまなデバイスで表示させることができるようになりました。

少し前の話ですが、ガラケーでは、(.jp/i/)がURLに着いたように、アイモードiモードあいもーどのページといった、内容が同じであっても別のコンテンツとして作る必要がありました。

こうした作業はトテモとてもはんざつであり、やがてウェブサイトの更新が滞り、営業してるの していないのかよくわからないお店のページが増えた背景でもあります。

ポイントとしては、1度の更新で、さまざまなデバイスに向けてのウェブサイトが作れるということです.

 

サイト更新について

サイト更新について

NFMサイト更新について書き連ねます

NFMの主な業務にサイトの更新があります

SNSとサイトを連携させてください

ーーサイトデザインーー

WEBサイトデザインをお願いします

現在,NFMはWordpress(ワードプレス,以下WP)という無料にブログシステムを使用しています.

WPはCMS(Content Management System)の一種で,用はWEBでWEBを管理するというシステムです.

通常のWEB管理は,

  1. htmlなどのファイルを作成
  2. サーバにFTPソフトを使ってアップロードする

という流れでした.

これにはhtmlの知識が必要不可欠で,なおかつ様々なブラウザ(IEやFirefox,chrome,operaなど)と対応させる必要があるなどはっきり言うとすんごい面倒なシステムでした.

なおかつほんの少しUNIXの知識も必要だったりと,「デザイン」にたどり着くまでに必要な知識が多く,特殊な技能が必要でありました。(から音声入力で書いています)

そしてウェブサイトの内容を更新したいときに、いちいち専門の業者を呼ぶなど、時間や費用がかかりました。

このCMSができたことによりウェブブラウザから内容の更新ができ、比較的早く情報の更新ができるようになりました。

WordPressは、ブログシステムから発展して現在ではサマザマナ企業などのウェブサイトに使われています。

ウェブサイトのデザインは、wordPressのテーマ(テンプレート)を変更することにより、気軽に装いを変えることができるようになりました。

特定の日付までのカウントダウンを作る

とあるイベントまでのカウントダウンタイマーの例です.

C#ですとこんな書き方があります.

using UnityEngine;
using System.Collections;
using System;//.netフレームワークを使います一行上のものと一緒?
using UnityEngine.UI;   // UIを使います.UI使用時は必須

public class countTime : MonoBehaviour {
	System.DateTime mynow;//日付形式の入れ物作成(以下2つも)
	System.DateTime date2;
	System.DateTime date1 = new DateTime(2015, 4, 2, 18, 30, 0, DateTimeKind.Local);//カウントダウン終了時刻を時刻形式で設定
	string myString;//日付表示のための文字の入れ物
	string myString2;//ん?これ未使用?
	bool countdSW = false;//これも未使用?

	public Text countDownTime;//unity UIのTextコンポーネントをプロパティ画面でアサインできるように準備
	void Start () {

		// 現在時刻の取得
	mynow = DateTime.Now;//これ無意味ですが,気持ちの問題です

	
	
	}
	
	// Update is called once per frame
	void Update () {

			
						mynow = DateTime.Now;//最新時刻を取得
		if (mynow < date1) {//日付の入れ物同士は比較演算子が使えますので,カウントダウン終了時刻と現時間を比較

						TimeSpan span = date1 - mynow;//Timespanという時間の長さを入れる専用の入れ物を作ってspanに入れる.これ.NETらしい

						myString = string.Format ("{0:00}h{1:00}:{2:00}:{3:00}", span.Days, span.Hours, span.Minutes, span.Seconds); //これも未使用?
						countDownTime.text = string.Format ("{0:00}d{1:00}h{2:00}m{3:00}s", span.Days, span.Hours, span.Minutes, span.Seconds);//残時間spanから各時間要素を取り出す {0:00}はその表示形式の設定ルール

				} else {
						countDownTime.text = "00d00h00m00s";//カウントダウンを越えたら0を入れる.ここに別のテキストを入れてもいいかも
				}
		}



}

ポイントは

1.日付形式 System.DateTime で変数作成

2.時間の長さを入れる TimeSpan で変数作成

3.日付形式の変数同士で > や <が使える

4.stringのフォーマット形式{0:00}{1:00}など

です

iTweenのonCompleteがおかしい

iTweenの処理後の操作でoncompleteを使うけど,指定した関数に飛ばない.

DebugLogを見ると飛んでいるようだけど,やってくれない.

うまくいかなかった例

iTween.FadeTo(obj, iTween.Hash("alpha", 0, "time", 0.4f,"oncomplete","boolReset","oncompletetarget", obj));

function boolReset(){
//bool reset
}

 

iTween.FadeTo(obj, iTween.Hash("alpha", 0, "time", 0.4f,"oncomplete","boolReset"));

function boolReset(){
//boolreset
}

 

うまくいった例

iTween.FadeTo(obj, iTween.Hash("alpha", 0, "time", 0.4f,"oncomplete","boolReset","oncompletetarget", gameObject));

ほげぇ,,,

ネットワークタイムサーバから時刻もってくる

カウントダウンのアプリなのに,デバイス毎に時刻違うってダメじゃん.

ということで,NTP(ネットワークタイムサーバ)から時刻もってくるの.

NTPについては(ここ)みんなのスマホもこれ時間合ってるんだよ。

これ,コンソールに時刻差出します.(多分コンソールで出る数字はミリ秒)

<!DOCTYPE html>
<html>
<head>
<title>Time</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<!-- metaタグで スマホの挙動を制限している -->
</head>
<body>

<script type="text/javascript">


httpObj = new XMLHttpRequest();
httpObj.open("get", "https://ntp-a1.nict.go.jp/cgi-bin/json", true);
httpObj.onload = function(){

	var myData = JSON.parse(this.responseText);
	//var mySt = myData.st;
	var mySt = (myData.st * 1000) - Date.now();
	//var txt = "";
//	for (var i=0; i<myData.weather.length; i++){
//		txt = txt + myData.weather[i].description + "  " + myData.weather[i].main+"<br>" + "<img src=http://openweathermap.org/img/w/" + myData.weather[i].icon + ".png>";
//	}

	console.log(mySt);

}
httpObj.send(null);


</script>



</body>
</html>

で,現時刻との差分ですが

まず,コードの上の方の初期化あたりに

///ネットワーク時刻取得
var mySt;
httpObj = new XMLHttpRequest();
httpObj.open("get", "https://ntp-a1.nict.go.jp/cgi-bin/json", true);//NTPサーバに行って時間取得
httpObj.onload = function(){

	var myData = JSON.parse(this.responseText);//JSONで内容をmyDataに入れる
	mySt = (myData.st * 1000) - Date.now();//IDがstの数字をひっぱってくる.NTPの戻り値は小数点以下3桁まであるので,1000描けてUNIX時間に変更する.ほんでミリ秒の誤差を出す

}
httpObj.send(null);

いれておいて(2行目のvar myStがグルーバル変数になります)

そのあとの日付ほしいところで

var nowDate = new Date(Date.now() + mySt);//ネットワークタイムを利用して時差を埋める

で,日付入れてます.

カウントダウンなので毎回new Date();していますが,本当はこの時刻を100ミリ毎くらい引いていけばいいのですが,元のプログラムを大幅に変更するのがいやだったので,,

UnityでARアプリ

UniyにVuforiaを入れてARアプリ.
簡単に作成できますが問題が.

Prefabでオブジェクトを作成(instantiate使って)したときに,ARマーカー非認識時でも隠したい見えちゃう問題です.

解決法.staticなブールを置いて,状態をチェックする.

(1)原因のおそらく
Vuforiaのスクリプトは子オブジェクトまでを配列に読み込んでrenderをON/OFFさせるが,prefabの2個目以降が入ってこない.タイミングの問題か,同じ名前だから1つ目以外は無視されているか.

(2)解決方法
いろいろ試したが,強引にやることに.

DefaultTrackableEventHandlerに以下を追加

public static bool meshVisi = false;

コード(抜粋)黄色の部分を追加

public class DefaultTrackableEventHandler : MonoBehaviour,
                                            ITrackableEventHandler
{
    #region PRIVATE_MEMBER_VARIABLES
 
    private TrackableBehaviour mTrackableBehaviour;
    
    #endregion // PRIVATE_MEMBER_VARIABLES



    #region UNTIY_MONOBEHAVIOUR_METHODS
	//
	public static bool meshVisi = false;
	/// 


    
    void Start()
    {

次に,同じくDefaultTrackableEventHandlerに以下を追加.(70行目前後にあり)

マーカーを発見したとき用 黄色の部分だけを追加

  private void OnTrackingFound()
    {
		meshVisi = true;//bird mesh renderer-on

        Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
        Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);

 

マーカーを見失ったとき用(100行目くらい) 黄色の部分だけを追加

    private void OnTrackingLost()
    {
        Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
        Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);

		meshVisi = false;//bird mesh renderer-off

 

(3)プレファブのメッシュに追加するスクリプト

using UnityEngine;
using System.Collections;

public class renderVisi : MonoBehaviour {
	
	void Start () {
		renderer.enabled = false;

	}

	void Update () {
		if(DefaultTrackableEventHandler.meshVisi == true)
			renderer.enabled = true;
		if(DefaultTrackableEventHandler.meshVisi == false)
			renderer.enabled = false;

	}
}

これを renderVisiというc#で保存し,プレファブのメッシュにアサイン

 

(4)やってみる。

 

(5)

実行順とかでもクリアできそうな強引なスクリプトが目立ちますが,,ご容赦.

納期が近いので、、

UnityでARアプリ作成

(1)Unityをインストール
http://japan.unity3d.com/

(2)VuforiaのUnityPackageをダウンロード

https://developer.vuforia.com/
へ行き,Downloadをクリック

Unity Extensionを選択してDL

Unity側でImport PackageのCustom Packageで入れる

(細々とした使い方をここにかく予定)

・マーカーは
https://developer.vuforia.com/
へ行きアップロードし.サーバで作られたマーカー用のUnityPackageをDL

・ノートPCでもテスト可能(MacBookは単体でチェック可能)
そのままAndroidビルドおK

簡単でした.
マーカーをけっこう選びます