たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

PhotonAnimatorViewの全て

とは

PhotonAnimatorViewとは、Unity Animation を同期させるためのx。
Exit Games社のPhoton Unity Networkingライブラリに含まれている。

デモ動画

何ができて何が出来ない

使い方

AnimatorViewコンポーネントをアタッチ。
PhotonViewで設定をいくつかする。fin.

known issues

PhotonAnimatorView and Triggers

Componentの順番を間違えると同期失敗の可能性がある。
Unity Triggerの性質として、Triggerは1サイクルのUpdateでリセットされる。
そしてUnity Componentはアタッチ順通りUpdate内で評価される。
ゆえに、PhotonViewより下でTrigger ONになると、次のUpdateでPhotonViewが評価されるときにはTriggerがリセットされてる
結果、Trigger取りこぼしが起きうる。

最も安全な対策は、PhotonAnimatorViewコンポーネントを最下段に置くこと。
Known Issues | Photon Engine

日本語の他の記事

ほぼない。哀しかった。

references

doc.photonengine.com

doc.photonengine.com

GitHub for UnityでUnityプロジェクトをバージョン管理

何カ月もかけて作ったUnityプロジェクト。
バックアップを取ってたら、v1、v1.1、v1.1b、v2…とバージョン違いだらけになっていませんか?
あるいは3日かけて変更したが気に入らず、なおかつ元シーンは保存してなくて元に戻せない!なんてことありませんか?
バージョン管理のないプロジェクトは地獄です。
でも大丈夫、GitHub for Unityならね。
github.com

GitHub for Unityとは

Git, GitHubによるバージョン管理を実現する、Unityの拡張。Unity社がつくってる。

できること

GUI (Unity Window内) でGitを使える。GitHubをremoteにできる。
コマンドラインもある。
git lfsおよび適切なgitignoreの自動処理による、レポジトリ容量圧迫の軽減

導入

Unitypackageをimportするだけ。超簡単。
GitHub - github-for-unity/Unity: GitHub for Unity

使い方

GUIでポチポチ。おわり。

結論

やたら簡単。即導入するべし。

AWS web APIをそのまま叩こうとしたら

  1. signature4での署名

エンドポイントは公開されており、シンプル。

サービス利用、サービス設定ともにAPIで行う形 (SHH(CLI?)かコンソール使わないと必然的にそうなる)

SDKの意味と有り難さがよくわかりそうだな

docs.aws.amazon.com

偉大な先人たち。 qiita.com

SDKリポジトリを漁っても実装がさっぱりわからなかった(必要サービスの実装が見つからない)のは、こういうメタプログラミングしてるからなのね、スーパー クールだ
blog.serverworks.co.jp

AWS-Amplifyの中身、とくにAuth

amazon-cognito-identity-jsに強く依存.

signIn()内でcreateCognitoUserしてる。createCognitoUserはCognitoUser()のラッパー。

    public signIn(username: string, password: string): Promise<any> {
        ...  
        const user = this.createCognitoUser(username);
        const authDetails = new AuthenticationDetails({
            Username: username,
            Password: password
        });

        const that = this;
        return new Promise((resolve, reject) => {
            user.authenticateUser(authDetails, {

createCognitoUserメソッドの元クラス (AuthClass) がuserPool属性を持っていて、この中にclientオブジェクトがしまってある。 Auth.configureでCognitoUserPool (amazon-cognito-identity-js由来) を使ってusePoolを設定してるので、おそらくここで一意に決まってくる。
Auth.configure(config)のconfigに入っているものがまんま使われており、この中にendpointがある模様。Amplifyチェック!

    private createCognitoUser(username: string): Cognito.CognitoUser {
        const userData: ICognitoUserData = {
            Username: username,
            Pool: this.userPool,
        };
        ...
        return new CognitoUser(userData);
    }

CognitoUserコンストラクタでdataを引数にとり、そこでthis.client (Clientクラス) にdata.Pool.clientを設定。

export default class CognitoUser {
  constructor(data) {
    ...
    this.username = data.Username || '';
    this.pool = data.Pool;
    this.Session = null;

    this.client = data.Pool.client;

Clientのコンストラクタでendpointを受け取って、以降は一切いじらない。nullの場合はcognito-idp...のドメインになる。
client.requestのリクエスト先ドメインはここで決まる。

// Facet.ts
import * as Cognito from 'amazon-cognito-identity-js';
// /src/Common/index.ts
export * from './Facet';
// /src/Auth/Auth.ts
import {
    AWS,
    Cognito,
    ...,
} from '../Common';

リクエスト実体
// @param {CognitoUserPool} data.Pool

this.client = data.Pool.client;

import Client from './Client';
CognitoUserPoolコンストラクタ内
this.client = new Client(region, endpoint);

client.requestはシンプルなfetch()
aws-amplify/Client.js at master · aws/aws-amplify · GitHub

パスワードでのダイレクト認証はメインとも限らない
authenticateUserDefaultAuthが色々やってて面白い
InitiateAuthリクエストをして、
RespondToAuthChallengeリクエストして、

ドキュメントにもそうある。

最新の認証フローはユーザーのアイデンティティを検証するため、パスワードの他に新しいチャレンジタイプを組み込んでいます。当社では 2 つの一般的なステップで認証を定型化し、InitiateAuth と RespondToAuthChallenge という 2 つの API を使用して実装します

Secure Remote Password (SRP) プロトコル
パスワードから生成した何かで認証するプロトコル
パスワードが通信路に流れないのでセキュア

SRP 計算を回避する場合にセキュアなバックエンドサーバーで使用できるように設計された管理 API の代替セットもあります。

SRPうんぬんはまさに認証なので、OIDCがスコープ外にしてる認証部分なんだろう
つまりUserPools-IdPの認証部分。
でもこれ、クライアントの仕事…?
あ、わかった。
組み込みUIってこの部分が担当だろ
つまりホントのホントの認証部分にも当然、認証クライアントが必要なのでそこの話だ
2FAを組み込んだり色々有り得るから、一般化された内容になってると。おー。

UserPool-IdPでUserPools認証する場合、OIDC AuthNリクエストは走るのかな?
resにクライアントがパスワードぶち込んですぐ認証的な

マッハ書籍に関する叡智のまとめ