次のコード、修正前は false を返していましたが、true を返すように書き換えました
// EXPERIMENTAL inline bool MToon_IsPbrCorrectOn() { return true; }
修正前の課題感(日陰で暗くならない?)
修正後の改善案(日陰になじんでくれるようになりました)
まだ有効化前の機能の様子?
でも、いい感じです
次のコード、修正前は false を返していましたが、true を返すように書き換えました
// EXPERIMENTAL inline bool MToon_IsPbrCorrectOn() { return true; }
修正前の課題感(日陰で暗くならない?)
修正後の改善案(日陰になじんでくれるようになりました)
まだ有効化前の機能の様子?
でも、いい感じです
基本的にはドキュメント通り
https://doc.photonengine.com/ja-jp/fusion/current/tutorials/shared-mode-basics/1-getting-started
Prototype Network Start にて、Start Mode を User Interface から Automatic に変更する
Auto Start As を Shared に指定していることを確認
Fusion Bootstrap Debug GUI は非アクティブ化しておく
また Prototype Runner には Network Scene Manager Default と Network Object Provider Default のコンポーネントを追加しておくと
ランタイム時の警告ログを消すことが出来る
ついでに Player Count もデフォルトは 10 なので、ここはアプリ設定の最大と合わせておこう
最後に、Tools > Fusion > Network Project Config を開き Client Tick Rate を 32 に設定する
以上でランタイム時の警告ログを消すことが出来る
Prototype Runner の Network Events に、次のような関数を登録
public class NetworkEvents : MonoBehaviour { public void PlayerJoined(NetworkRunner runner, PlayerRef playerRef) { if (playerRef == runner.LocalPlayer) { Debug.Log("Player Joined: " + playerRef.PlayerId); }
ゲームを起動して、上記のログだけ流れたら成功
情報ログが多くて邪魔な場合があったので
FusionUnityLogger ファイルを見つけ出し
switch (logType) { case LogType.Error: Debug.LogError(fullMessage, IsInMainThread ? obj : null); break; case LogType.Warn: Debug.LogWarning(fullMessage, IsInMainThread ? obj : null); break; default: // Debug.Log(fullMessage, IsInMainThread ? obj : null); break; }
default のログ出力をコメントアウトしておくと、黙らせることができた(Info ログスキップ設定ないのか? 調べてみてもわからなかった)
unrecognized identifier 'sampler2DArray' で悩んだのだけど
次の書き方で一応 Texture2DArray は機能したので、メモします
Shader "Unlit/NewUnlitShader" { Properties { _MainTex ("Texture", 2D) = "white" {} _BaseColor("Base Color", 2DArray) = "" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; Texture2DArray _BaseColor; SamplerState sampler_BaseColor; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 baseColorTex = _BaseColor.Sample(sampler_BaseColor, float3(i.uv, 0)); return baseColorTex; } ENDCG } } }
解像度を与えておき、uv 値の 0~1 の値を使って
ピクセルにおけるカメラ位置から発せられる視線ベクトル viewDir を求めます
あとはキューブマップのサンプル処理につなげるだけです
fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); half2 uvBase = i.uv - 0.5h; // Edge Screen Position float2 esp = float2(uvBase.x * _ScreenEdge.x, uvBase.y * _ScreenEdge.y); // ピクセルの視線ベクトル float3 viewDir = normalize(_CameraRight * esp.x + _CameraUp * esp.y + _CameraForward); // キューブマップ色 half4 color = UNITY_SAMPLE_TEXCUBE(_CubeMap1, viewDir); // ブレンドした背景色に溶けるようにFogをかける return color; }
ゲームで使わなくなったので消すファイルなのですが
あとで使いたくなることもあるかもしれないので、記録しておきますね
しばらく動いてたので、ご参考にどうぞ
https://assetstore.unity.com/packages/tools/input-management/joystick-pack-107631?locale=ja-JP
そう、すばらしいアセットと多くの方が賞賛してる
ただし、二つ配置すると、とたんにドラッグ操作が行えなくなり
使い物にならない
今回マルチタップ化できたので、改造方法を記録しておきます
編集するファイルは Base の
Assets\Joystick Pack\Scripts\Base\Joystick.cs
ファイルのみ
まず IDragHandler インタフェース継承をやめさせます
OnDrag イベントハンドラの引数の OnDrag(PointerEventData eventData) は OnDrag(Vector2 touchPosition) に書き換え
eventData.position を touchPosition に差し替えておきます
既存の利用箇所 OnPointerDown での呼び出しをつぎのようにし
OnDrag(eventData.position);
まずはビルドを通します。
次に OnPointerDown にて
this.pointerId = eventData.pointerId;
こんな感じで pointerId (Touch の fingerId) を記録しておき
void Update() { foreach (var touch in Input.touches) { if (touch.fingerId == this.pointerId) { OnDrag(touch.position); break; } } }
Update にて fingerId が一致する touch の position を OnDrag に流します
OnPointerUp で this.pointerId を -1 などに初期化することで
既存の OnDrag の機能を残しつつ、複数の fingerId を識別し、マルチタップに対応した Joystick が完成します
実機で確認して動作を確認できたため
これにて完成と思います
エディタ実行では touches は得られないですが
何かエミュレートする案を適用して置くのも良いかもしれませんね
VCC→詳細 【コラム】VCCにこれは入れておけ! アバター改変の便利ツール紹介 | メタカル最前線
をお手元に準備したら
テンプレートは Avatars 2022 を選択
Manage Packages から
を選択します
ここまでセットしたらプロジェクトを開きます
VRChat > Show Control Panel メニューから VRChat のログイン画面を開いて
ログインしておきます。
まずはアバターをインポートします。
今回例で使用するのはライムです。(例の半額セールだったので…)
komado.booth.pm
シーンに Lime Prefab を配置したら、メニューの Tools > Gesture Manager Emulator を選択
次の通りシーン内に Gesture Manager を追加します
これまたセール中のクリスマス服
rihyaco.booth.pm
を導入します(衣装Prefabをアバタールートオブジェクト直下に配置)
衣装 Prefab のコンテキストメニューの Modular Avatar > SetupOutfit を選択して衣装合わせをします。
ハイヒール用の衣装のため Body_Base の Blend Shapes から Foot_HighHeel の値を 100 に設定します。
備え付けの衣装が重なるものは取り払うか、着せ替え用の Prefab に差し替えておきます。
ひとまずこれだけで、衣装変えアバターで VRChat を楽しむことができます。
写真
続いて、シンプル眼鏡ギミックを導入します。
まずは無料の丸眼鏡アセット
0123.booth.pm
をインポートします
続いてシンプル眼鏡ギミック
simplestar-game.booth.pm
を購入してインポートします
眼鏡を装着しました
導入手順は以上です
実際に動かしてみた結果www.youtube.com
はじめて Unity 2022.3 で VRChat アバターアップロードしてみましたが
手順はこんな感じで良いでしょうか?
慣れないもので、覚えやすいように記録してみました。
もし VRChat まだやってない人いましたら、こうやってアバターアップロードしているのかと
参考になれば良いなと思います。
なんでも掴んでワールドに配置できるよ(特にすごいのが、フレンドもツリーを掴めちゃう!)
前回の記事で紹介した
他人に渡せるギフトコンテナ「SimpleGiftContainer」【VRChat アバターギミック】booth.pm
こちらを VRChat アバターに組み込む手順を解説します
この記事を書いている今日、セール中でして、大人気アバターが半額という
ほんとにすごい時期なので、買ってみました
【11/24-26限定SALE】『カリン』-Karin-【オリジナル3Dモデル】komado.booth.pm
手順は以前紹介したこちらの記事の通りで、アバター作成部分を、インポートした prefab のシーン配置に置き換えれば完成です。
simplestar-tech.hatenablog.com
まずはカリンちゃんのアバターでワールドを周遊できるようになりました
(Gesture Manger で簡易動作チェックしている様子)
他人に渡せるギフトコンテナ「SimpleGiftContainer」【VRChat アバターギミック】booth.pm
を入手して、パッケージ内の SimpleGiftContainer.unitypackage をプロジェクトにインポート
次の画像のように Prefab をアバター内直下に配置します
以上です。
Gesture Manager を使ってメニュー操作をすると Gift という項目が選べるようになります
その下の Item00, Item01, Item02 のトグルを有効にすると、プレゼントボックスがプレイヤー正面に現れます
フレンドが掴んで移動できるオブジェクトとなっています
あとはプレゼントボックスモデルをツリーに置き換えてみたりすると、冒頭の画像のようなことができます。