//tips
Spaceって何かと思ったらtwitterの音声会話サービスだった。
https://tokusengai.com/_ct/17463719
https://www.watch.impress.co.jp/docs/news/1322472.html
//基本情報理解
RFIは、情報提供を依頼する書類で、業務委託や入札、調達情報、ベンダーが保有している製品やサービスの概要などの情報を収集するための依頼書のことを指す。
ベンダーの選定が目的ではなく、製品やサービスの情報の幅広い収集が目的で、製品カタログ、パンフレット、事例集などが回答に当たる。
RFP(Request For Proposal)とは、ベンダーに対して具体的な提案作成を依頼するための書類のことで、企業が求めている情報について明確に書かれており、回答としては、個別具体的な提案、正確な見積もり金額などが明記されているものとなる。
RFIDとはRadio Frequency Identification」の略で、近距離無線通信を利用した自動認識技術のことを指す。
主に商品や食品に、電子情報を登録したRFタグを貼り、専用のリーダーで内容を読み込んで使う。情報を読み書きできる記録媒体で、接触することなく使えるのが特徴。
従来のバーコードやICタグの場合、リーダーで1つずつかざして情報を読み取る必要があったが、RFIDであれば一度に複数のタグ情報を読み取れ、通信距離は数メートルから数十メートルまでにも及ぶため、脚立などを使わずに読み取ることも可能。さらにRFタグが箱の中にあっても情報を読み取れる。
RFIDは電波の周波数帯によって以下の4種類に分けられる。
LF帯(Low Frequency)
自動車のキーレスエントリーなどに利用。通信範囲が狭く、小型化が困難。
HF帯(High Frequency)
基本的な仕組みはLF帯と同じ。小型化が容易で、交通系ICカードなどに使われる。
UHF帯(Ultra High Frequency)
通信範囲が広いため、在庫管理など多くのRFタグを一括読み取りする場面で活用。
マイクロ波帯
電波干渉を受けやすく、通信範囲も狭いため、使われない。
アカウントアグリゲーションとは、複数の金融機関の口座情報を一つに集約、閲覧できるようにすること。利用者の同意のもと、インターネットバンキングのIDとパスワード(閲覧専用)を借りて、定期的に各金融サービスのサイトにログインし明細情報などのデータを取得する。
https://getmoneytree.com/link-blog-article-jp/what-is-account-aggregation
BCP(Business Continuity Plan)とは事業継続計画のことを指し、自然災害・事故・システムエラーなどの緊急事態が発生した際に、事業の復旧・継続が行えるような計画を策定すること。
防災は自然災害時の計画を指すが、BCPは自然災害だけでなく他の要因も含む。材料供給の停止やシステム障害、通信障害もBCPの対象になる。
//unity
Getinfoの中で自身のカメラを特定する必要がある。
[SerializeField]Camera mycam;を変更し、自身で生成したアバターから取得していく。
Camera mycam;
private void Start()
{
if (photonView.IsMine)
{
mycam = GetComponentInChildren<Camera>();
}
}
GetinfoスクリプトにphotonView.IsMineにより自分のカメラの判別を組み込むも変化なし。他方のカメラを取得してしまう。
一旦prefabでのcameraを非表示にし、photonView.IsMineの場合に自身のオブジェクトの子にあたるカメラを表示、その上でコンポーネントを取得するようにする。
private void Start()
{
if (photonView.IsMine)
{
//自身の子オブジェクトから名前検索で取得
GameObject child = transform.Find("Camera").gameObject;
child.SetActive(true);
mycam = child.GetComponent<Camera>();
}
}
これで無事にそれぞれの生成したオブジェクトのカメラ視点を保持できるようになった。
ただ、下記のエラーが別途発生。
NullReferenceException: Object reference not set to an instance of an object
GetInfo.Update () (at Assets/GetInfo.cs:36)
該当箇所は ray = mycam.ScreenPointToRay(Input.mousePosition);の部分でこのエラーが何を意味しているのかを考える。
同期のためオブジェクト自体は2つ生成されることになるのでカメラを取得しない同期したオブジェクトに対してはmycam.ScreenPointToRay(Input.mousePosition);の処理をさせないように下記を追加。
if (mycam != null)
{
ray = mycam.ScreenPointToRay(Input.mousePosition);
}
これによりエラーの発生も消すことができた。
スポーンオブジェクトの生成場所の重複も避けたい。ロビーからの入室順で対応するのが手っ取り早いが、photonView.OwnerActorNrなどで場所を指定できないか試す。photonView.OwnerActorNr自体はオブジェクトを生成しないと見れず、スポーン時にオブジェクトの位置を指定しなければならないので使えない。
ただ、同期していれば既に同期先のプレイヤーは存在しているのでそちらの数を数えることができれば自ずと自身の番号もわかるので、そちらを利用していく。
生成するアバターにはplayerタグをつけて、players.Lengthで数えることにした。
public override void OnJoinedRoom()
{
// ランダムな座標に自身のアバター(ネットワークオブジェクト)を生成する
GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
//position = new Vector3(Random.Range(-3f, 3f), Random.Range(1f, 3f));
if (players.Length > 0)
{
position = new Vector3(-1,0,2);
}
else
{
position = new Vector3(0, 0, 0);
}
PhotonNetwork.Instantiate("Avatar", position, Quaternion.identity);
}
実行してみたらどちらともposition = new Vector3(0, 0, 0);で生成されてしまう。Debug.logで確認。
for (int i = 0; i < players.Length; i++){
Debug.Log(players[i]);
}
でも確認できず、Debug.Log(players[0]);もIndexOutOfRangeException: Index was outside the bounds of the array.となって添え字が範囲を超えているとのエラーが出た。
入室に成功するとOnJoinedRoomがコールバックで呼ばれるがここではシーンの情報を取得できないのか。やはりロビーから入る順番で付与するのがシンプル。
そもそもスポーン位置が被って嫌なのはプレイヤー同士が接触して弾け飛ぶからなので、そちらの方をいじる。
Edit」→Project Settings→Physicsの「Layer Collision Matrix」で衝突可能な組み合わせを設定しなおす。
ここでPlayerレイヤーを設定し、それらの衝突判定をなくす。
これで吹っ飛び問題も無くなった。
ここからは実際にshopifyアカウントを作って連動させてみることにする。