Skip to content

Commit 8ff0ba3

Browse files
authored
Merge pull request #136 from De-Panther/camerafollower
CameraFollower
2 parents 737812c + 38eb70c commit 8ff0ba3

File tree

8 files changed

+144
-44
lines changed

8 files changed

+144
-44
lines changed

Build/Build/Build.data.unityweb

213 Bytes
Binary file not shown.

Build/Build/Build.wasm

-164 Bytes
Binary file not shown.

Build/Build/Build.wasm.framework.unityweb

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

Packages/webxr-interactions/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
### Changed
9+
- AudioListener in the WebXRCameraSet prefabs is now attached to CameraFollower.
810

911
## [0.8.0] - 2020-02-26
1012
### Fixed

Packages/webxr-interactions/Runtime/Prefabs/WebXRCameraSet.prefab

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ GameObject:
158158
m_Component:
159159
- component: {fileID: 4414771795277364}
160160
- component: {fileID: 114243127810226890}
161-
- component: {fileID: 81178167226133646}
162161
m_Layer: 0
163162
m_Name: Cameras
164163
m_TagString: Untagged
@@ -182,6 +181,7 @@ Transform:
182181
- {fileID: 4172172842306312}
183182
- {fileID: 849935389208116915}
184183
- {fileID: 1484378268851619093}
184+
- {fileID: 4098080034801200690}
185185
m_Father: {fileID: 4545079059221816}
186186
m_RootOrder: 2
187187
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -202,14 +202,7 @@ MonoBehaviour:
202202
cameraR: {fileID: 20572450475250664}
203203
cameraARL: {fileID: 8992034749185188121}
204204
cameraARR: {fileID: 3431978019681743018}
205-
--- !u!81 &81178167226133646
206-
AudioListener:
207-
m_ObjectHideFlags: 0
208-
m_CorrespondingSourceObject: {fileID: 0}
209-
m_PrefabInstance: {fileID: 0}
210-
m_PrefabAsset: {fileID: 0}
211-
m_GameObject: {fileID: 1363028859183752}
212-
m_Enabled: 1
205+
cameraFollower: {fileID: 4098080034801200690}
213206
--- !u!1 &1611361787474004
214207
GameObject:
215208
m_ObjectHideFlags: 0
@@ -937,6 +930,45 @@ BoxCollider:
937930
serializedVersion: 2
938931
m_Size: {x: 1, y: 1, z: 1}
939932
m_Center: {x: 0, y: 0, z: 0}
933+
--- !u!1 &5198446956910366709
934+
GameObject:
935+
m_ObjectHideFlags: 0
936+
m_CorrespondingSourceObject: {fileID: 0}
937+
m_PrefabInstance: {fileID: 0}
938+
m_PrefabAsset: {fileID: 0}
939+
serializedVersion: 6
940+
m_Component:
941+
- component: {fileID: 4098080034801200690}
942+
- component: {fileID: 5982351567310310783}
943+
m_Layer: 0
944+
m_Name: CameraFollower
945+
m_TagString: Untagged
946+
m_Icon: {fileID: 0}
947+
m_NavMeshLayer: 0
948+
m_StaticEditorFlags: 0
949+
m_IsActive: 1
950+
--- !u!4 &4098080034801200690
951+
Transform:
952+
m_ObjectHideFlags: 0
953+
m_CorrespondingSourceObject: {fileID: 0}
954+
m_PrefabInstance: {fileID: 0}
955+
m_PrefabAsset: {fileID: 0}
956+
m_GameObject: {fileID: 5198446956910366709}
957+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
958+
m_LocalPosition: {x: 0, y: 0, z: 0}
959+
m_LocalScale: {x: 1, y: 1, z: 1}
960+
m_Children: []
961+
m_Father: {fileID: 4414771795277364}
962+
m_RootOrder: 5
963+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
964+
--- !u!81 &5982351567310310783
965+
AudioListener:
966+
m_ObjectHideFlags: 0
967+
m_CorrespondingSourceObject: {fileID: 0}
968+
m_PrefabInstance: {fileID: 0}
969+
m_PrefabAsset: {fileID: 0}
970+
m_GameObject: {fileID: 5198446956910366709}
971+
m_Enabled: 1
940972
--- !u!1 &6032564905858711458
941973
GameObject:
942974
m_ObjectHideFlags: 0

Packages/webxr-interactions/Samples~/Desert/Prefabs/WebXRCameraSet.prefab

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,6 @@ GameObject:
709709
m_Component:
710710
- component: {fileID: 4414771795277364}
711711
- component: {fileID: 114243127810226890}
712-
- component: {fileID: 81178167226133646}
713712
m_Layer: 0
714713
m_Name: Cameras
715714
m_TagString: Untagged
@@ -733,6 +732,7 @@ Transform:
733732
- {fileID: 4172172842306312}
734733
- {fileID: 849935389208116915}
735734
- {fileID: 1484378268851619093}
735+
- {fileID: 7928341879765250305}
736736
m_Father: {fileID: 4545079059221816}
737737
m_RootOrder: 2
738738
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -753,14 +753,7 @@ MonoBehaviour:
753753
cameraR: {fileID: 20572450475250664}
754754
cameraARL: {fileID: 8992034749185188121}
755755
cameraARR: {fileID: 3431978019681743018}
756-
--- !u!81 &81178167226133646
757-
AudioListener:
758-
m_ObjectHideFlags: 0
759-
m_CorrespondingSourceObject: {fileID: 0}
760-
m_PrefabInstance: {fileID: 0}
761-
m_PrefabAsset: {fileID: 0}
762-
m_GameObject: {fileID: 1363028859183752}
763-
m_Enabled: 1
756+
cameraFollower: {fileID: 7928341879765250305}
764757
--- !u!1 &1375127060900384
765758
GameObject:
766759
m_ObjectHideFlags: 0
@@ -2071,6 +2064,45 @@ Camera:
20712064
m_OcclusionCulling: 1
20722065
m_StereoConvergence: 10
20732066
m_StereoSeparation: 0.022
2067+
--- !u!1 &3612796559000632551
2068+
GameObject:
2069+
m_ObjectHideFlags: 0
2070+
m_CorrespondingSourceObject: {fileID: 0}
2071+
m_PrefabInstance: {fileID: 0}
2072+
m_PrefabAsset: {fileID: 0}
2073+
serializedVersion: 6
2074+
m_Component:
2075+
- component: {fileID: 7928341879765250305}
2076+
- component: {fileID: 5913451601264154887}
2077+
m_Layer: 0
2078+
m_Name: CameraFollower
2079+
m_TagString: Untagged
2080+
m_Icon: {fileID: 0}
2081+
m_NavMeshLayer: 0
2082+
m_StaticEditorFlags: 0
2083+
m_IsActive: 1
2084+
--- !u!4 &7928341879765250305
2085+
Transform:
2086+
m_ObjectHideFlags: 0
2087+
m_CorrespondingSourceObject: {fileID: 0}
2088+
m_PrefabInstance: {fileID: 0}
2089+
m_PrefabAsset: {fileID: 0}
2090+
m_GameObject: {fileID: 3612796559000632551}
2091+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
2092+
m_LocalPosition: {x: 0, y: 0, z: 0}
2093+
m_LocalScale: {x: 1, y: 1, z: 1}
2094+
m_Children: []
2095+
m_Father: {fileID: 4414771795277364}
2096+
m_RootOrder: 5
2097+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
2098+
--- !u!81 &5913451601264154887
2099+
AudioListener:
2100+
m_ObjectHideFlags: 0
2101+
m_CorrespondingSourceObject: {fileID: 0}
2102+
m_PrefabInstance: {fileID: 0}
2103+
m_PrefabAsset: {fileID: 0}
2104+
m_GameObject: {fileID: 3612796559000632551}
2105+
m_Enabled: 1
20742106
--- !u!1 &6032564905858711458
20752107
GameObject:
20762108
m_ObjectHideFlags: 0

Packages/webxr/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
### Added
9+
- CameraFollower to WebXRCamera, for AudioListener to follow active cameras poses.
10+
811
### Changed
912
- Optimization for JavaScript to C# communication.
1013

Packages/webxr/Runtime/Scripts/WebXRCamera.cs

Lines changed: 56 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public enum CameraID
1515

1616
[SerializeField]
1717
private Camera cameraMain = null, cameraL = null, cameraR = null, cameraARL = null, cameraARR = null;
18+
[SerializeField]
19+
private Transform cameraFollower = null;
1820

1921
private WebXRState xrState = WebXRState.NORMAL;
2022
private Rect leftRect, rightRect;
@@ -23,10 +25,13 @@ public enum CameraID
2325

2426
private bool switched = false;
2527

28+
private bool hasFollower = false;
29+
2630
void OnEnable()
2731
{
2832
WebXRManager.OnXRChange += OnXRChange;
2933
WebXRManager.OnHeadsetUpdate += OnHeadsetUpdate;
34+
hasFollower = cameraFollower != null;
3035
}
3136

3237
void OnDisable()
@@ -37,39 +42,65 @@ void OnDisable()
3742

3843
void Update()
3944
{
40-
if (switched)
45+
if (!switched)
46+
{
47+
switched = true;
48+
switch (xrState)
49+
{
50+
case WebXRState.AR:
51+
cameraMain.enabled = false;
52+
cameraL.enabled = false;
53+
cameraR.enabled = false;
54+
cameraARL.enabled = viewsCount > 0;
55+
cameraARL.rect = leftRect;
56+
cameraARR.enabled = viewsCount > 1;
57+
cameraARR.rect = rightRect;
58+
break;
59+
case WebXRState.VR:
60+
cameraMain.enabled = false;
61+
cameraL.enabled = viewsCount > 0;
62+
cameraL.rect = leftRect;
63+
cameraR.enabled = viewsCount > 1;
64+
cameraR.rect = rightRect;
65+
cameraARL.enabled = false;
66+
cameraARR.enabled = false;
67+
break;
68+
case WebXRState.NORMAL:
69+
cameraMain.enabled = true;
70+
cameraL.enabled = false;
71+
cameraR.enabled = false;
72+
cameraARL.enabled = false;
73+
cameraARR.enabled = false;
74+
break;
75+
}
76+
}
77+
UpdateFollower();
78+
}
79+
80+
private void UpdateFollower()
81+
{
82+
if (!hasFollower)
4183
{
4284
return;
4385
}
44-
switched = true;
4586
switch (xrState)
4687
{
4788
case WebXRState.AR:
48-
cameraMain.enabled = false;
49-
cameraL.enabled = false;
50-
cameraR.enabled = false;
51-
cameraARL.enabled = viewsCount > 0;
52-
cameraARL.rect = leftRect;
53-
cameraARR.enabled = viewsCount > 1;
54-
cameraARR.rect = rightRect;
55-
break;
89+
cameraFollower.localRotation = cameraARL.transform.localRotation;
90+
if (viewsCount > 1)
91+
{
92+
cameraFollower.localPosition = (cameraARL.transform.localPosition + cameraARR.transform.localPosition) * 0.5f;
93+
return;
94+
}
95+
cameraFollower.localPosition = cameraARL.transform.localPosition;
96+
return;
5697
case WebXRState.VR:
57-
cameraMain.enabled = false;
58-
cameraL.enabled = viewsCount > 0;
59-
cameraL.rect = leftRect;
60-
cameraR.enabled = viewsCount > 1;
61-
cameraR.rect = rightRect;
62-
cameraARL.enabled = false;
63-
cameraARR.enabled = false;
64-
break;
65-
case WebXRState.NORMAL:
66-
cameraMain.enabled = true;
67-
cameraL.enabled = false;
68-
cameraR.enabled = false;
69-
cameraARL.enabled = false;
70-
cameraARR.enabled = false;
71-
break;
98+
cameraFollower.localRotation = cameraL.transform.localRotation;
99+
cameraFollower.localPosition = (cameraL.transform.localPosition + cameraR.transform.localPosition) * 0.5f;
100+
return;
72101
}
102+
cameraFollower.localRotation = cameraMain.transform.localRotation;
103+
cameraFollower.localPosition = cameraMain.transform.localPosition;
73104
}
74105

75106
public Quaternion GetLocalRotation()

0 commit comments

Comments
 (0)