ue/book/city/07_teleport.md
2025-04-14 04:08:21 +09:00

3.2 KiB

惑星間の移動

惑星間の移動表現を銀河系の光で演出します。

  1. sketchfabのgalaxyをbrowserで表示する
  2. ボタンが押されたとき移動先へ移動する

sketchfab api

apiを使ってzoom-in, zoom-outします。

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>Sketchfab Viewer API example</title>
		<script type="text/javascript" src="https://static.sketchfab.com/api/sketchfab-viewer-1.12.1.js"></script>
	</head>
	<body>
		<iframe id="api-frame" class="w-full" width="100%" style="position:fixed; top:0; left:0; bottom:0; right:0; width:100%; height:100%;" allow="xr-spatial-tracking; autoplay; fullscreen; xr-spatial-tracking; accelerometer" xr-spatial-tracking web-share frameborder="no" scrolling="no" ></iframe>
		<script type="text/javascript">
				var iframe = document.getElementById( 'api-frame' );
				var uid = 'd6521362b37b48e3a82bce4911409303';
				var client = new Sketchfab( iframe );
				var api;
				client.init( uid, {
					success: function onSuccess( api ){
						api.start({ preload:1 });
						api.addEventListener( 'viewerready', function() {
							api.getCameraLookAt((err, camera) => {
								if (err) return console.error('カメラ取得失敗');
								const direction = [
									camera.position[0] - camera.target[0],
									camera.position[1] - camera.target[1],
									camera.position[2] - camera.target[2]
								];
								const zoomFactor = 0.01;
								const newPosition = [
									camera.target[0] + direction[0] * zoomFactor,
									camera.target[1] + direction[1] * zoomFactor,
									camera.target[2] + direction[2] * zoomFactor
								];
								api.setCameraLookAt(newPosition, camera.target, 10, (err) => {
									if (!err) console.log('ズームアウト成功');
								});
							});
						} );
					},
					error: function onError() {
						console.log( 'Viewer error' );
					},
					camera:1,
					autospin: 0,
					preload: 0,
					ui_controls: 0,
					ui_infos: 0,
					ui_inspector: 0,
					ui_stop: 0,
					ui_watermark: 0,
					ui_watermark_link: 0,
					ui_annotations: 0,
					ui_hint: 0,
					ui_ar:0,ui_help:0,
					ui_settings:0,
					ui_vr:0,
					ui_fullscreen:0,
					ui_loading: 0,
				} );
		</script>
	</body>
</html>

本来やりたかったこと

本来はキャラクターの動きと空間が連動するようにしたかったです。

これはniagaraで空間ごと表現する方法がありますが、スペック的に可能かはわかりません。

また、playerのcameraにniagaraをくっつけて表現する方法があります。これは低負担で実装できますが、実態と異なり、playerの移動と連動して光の中を飛んでいるように見せるだけです。

実際に光の中を飛べるようにするのが理想ですが、ueでは難しいかもしれません。