sui-game-sdk 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +163 -0
  2. package/dist/bin/cli.d.ts +2 -0
  3. package/dist/bin/cli.js +79 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.js +19 -0
  6. package/dist/session.d.ts +23 -0
  7. package/dist/session.js +47 -0
  8. package/dist/spawner.d.ts +19 -0
  9. package/dist/spawner.js +37 -0
  10. package/dist/sync.d.ts +20 -0
  11. package/dist/sync.js +55 -0
  12. package/package.json +46 -0
  13. package/starter/README.md +57 -0
  14. package/starter/client/index.ts +79 -0
  15. package/starter/move/Move.toml +9 -0
  16. package/starter/move/sources/hero.move +109 -0
  17. package/starter/scripts/deploy.ts +37 -0
  18. package/starters/godot/README.md +71 -0
  19. package/starters/godot/deploy.js +39 -0
  20. package/starters/godot/move/Move.toml +9 -0
  21. package/starters/godot/move/sources/hero.move +109 -0
  22. package/starters/godot/project.godot +29 -0
  23. package/starters/godot/scenes/main.tscn +22 -0
  24. package/starters/godot/scripts/game_manager.gd +14 -0
  25. package/starters/godot/scripts/player.gd +10 -0
  26. package/starters/godot/scripts/sui/hero_controller.gd +56 -0
  27. package/starters/godot/scripts/sui/sui_service.gd +62 -0
  28. package/starters/nextjs/.env.local.example +2 -0
  29. package/starters/nextjs/README.md +110 -0
  30. package/starters/nextjs/app/globals.css +3 -0
  31. package/starters/nextjs/app/layout.tsx +22 -0
  32. package/starters/nextjs/app/page.tsx +5 -0
  33. package/starters/nextjs/components/HeroGame.tsx +161 -0
  34. package/starters/nextjs/lib/sui-client.ts +22 -0
  35. package/starters/nextjs/move/Move.toml +9 -0
  36. package/starters/nextjs/move/sources/hero.move +109 -0
  37. package/starters/nextjs/next.config.js +4 -0
  38. package/starters/nextjs/package.json +30 -0
  39. package/starters/nextjs/postcss.config.js +6 -0
  40. package/starters/nextjs/scripts/deploy.ts +42 -0
  41. package/starters/nextjs/tailwind.config.js +12 -0
  42. package/starters/nextjs/tsconfig.json +39 -0
  43. package/starters/unity/Assets/Scenes/Main.unity +197 -0
  44. package/starters/unity/Assets/Scripts/Core/GameManager.cs +38 -0
  45. package/starters/unity/Assets/Scripts/Core/PlayerController.cs +37 -0
  46. package/starters/unity/Assets/Scripts/Sui/HeroManager.cs +99 -0
  47. package/starters/unity/Assets/Scripts/Sui/SuiManager.cs +94 -0
  48. package/starters/unity/README.md +72 -0
  49. package/starters/unity/deploy.js +39 -0
  50. package/starters/unity/move/Move.toml +9 -0
  51. package/starters/unity/move/sources/hero.move +109 -0
@@ -0,0 +1,22 @@
1
+ import type { Metadata } from 'next'
2
+ import { Inter } from 'next/font/google'
3
+ import './globals.css'
4
+
5
+ const inter = Inter({ subsets: ['latin'] })
6
+
7
+ export const metadata: Metadata = {
8
+ title: 'Sui Quest - Next.js Game',
9
+ description: 'A blockchain RPG powered by sui-game-sdk',
10
+ }
11
+
12
+ export default function RootLayout({
13
+ children,
14
+ }: {
15
+ children: React.ReactNode
16
+ }) {
17
+ return (
18
+ <html lang="en">
19
+ <body className={inter.className}>{children}</body>
20
+ </html>
21
+ )
22
+ }
@@ -0,0 +1,5 @@
1
+ import HeroGame from '@/components/HeroGame'
2
+
3
+ export default function Home() {
4
+ return <HeroGame />
5
+ }
@@ -0,0 +1,161 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useState } from 'react';
4
+ import { Transaction } from '@mysten/sui/transactions';
5
+ import { sessionManager, gameStateSync, PACKAGE_ID, MODULE, suiClient } from '@/lib/sui-client';
6
+
7
+ export default function HeroGame() {
8
+ const [sessionAddress, setSessionAddress] = useState<string>('');
9
+ const [heroId, setHeroId] = useState<string | null>(null);
10
+ const [events, setEvents] = useState<string[]>([]);
11
+ const [loading, setLoading] = useState(false);
12
+
13
+ useEffect(() => {
14
+ // Initialize session
15
+ const address = sessionManager.sessionAddress;
16
+ setSessionAddress(address);
17
+
18
+ // Subscribe to game events using GameStateSync
19
+ gameStateSync.subscribe(`${PACKAGE_ID}::${MODULE}::AttackEvent`, (event) => {
20
+ const data = event.parsedJson as any;
21
+ setEvents(prev => [...prev, `⚔️ Hero dealt ${data.damage_dealt} damage!`]);
22
+ });
23
+
24
+ gameStateSync.subscribe(`${PACKAGE_ID}::${MODULE}::LevelUpEvent`, (event) => {
25
+ const data = event.parsedJson as any;
26
+ setEvents(prev => [...prev, `🎉 LEVEL UP! New Level: ${data.new_level}`]);
27
+ });
28
+
29
+ // Start polling for events
30
+ gameStateSync.startPolling(PACKAGE_ID);
31
+
32
+ // Check for existing hero
33
+ checkForHero(address);
34
+
35
+ return () => {
36
+ // Cleanup if needed
37
+ };
38
+ }, []);
39
+
40
+ const checkForHero = async (address: string) => {
41
+ try {
42
+ const heroes = await suiClient.getOwnedObjects({
43
+ owner: address,
44
+ options: { showType: true, showContent: true }
45
+ });
46
+
47
+ const heroObj = heroes.data.find(d => d.data?.type === `${PACKAGE_ID}::${MODULE}::Hero`);
48
+ if (heroObj) {
49
+ setHeroId(heroObj.data?.objectId || null);
50
+ setEvents(prev => [...prev, `✅ Hero found: ${heroObj.data?.objectId}`]);
51
+ } else {
52
+ setEvents(prev => [...prev, '❌ No hero found. Mint one to start!']);
53
+ }
54
+ } catch (error) {
55
+ console.error('Error checking for hero:', error);
56
+ }
57
+ };
58
+
59
+ const mintHero = async () => {
60
+ setLoading(true);
61
+ try {
62
+ // Note: In a real app, you'd need admin cap or open minting
63
+ setEvents(prev => [...prev, '🔨 Minting hero... (requires admin cap)']);
64
+ // This is a placeholder - actual minting requires proper setup
65
+ } catch (error) {
66
+ setEvents(prev => [...prev, `❌ Error: ${error}`]);
67
+ } finally {
68
+ setLoading(false);
69
+ }
70
+ };
71
+
72
+ const slayBoar = async () => {
73
+ if (!heroId) {
74
+ setEvents(prev => [...prev, '❌ No hero to fight with!']);
75
+ return;
76
+ }
77
+
78
+ setLoading(true);
79
+ try {
80
+ const tx = new Transaction();
81
+ tx.moveCall({
82
+ target: `${PACKAGE_ID}::${MODULE}::slay_boar`,
83
+ arguments: [tx.object(heroId)]
84
+ });
85
+
86
+ const result = await sessionManager.executeSessionTx(tx);
87
+ setEvents(prev => [...prev, `✅ Boar slain! Tx: ${result.digest}`]);
88
+ } catch (error) {
89
+ setEvents(prev => [...prev, `❌ Error: ${error}`]);
90
+ } finally {
91
+ setLoading(false);
92
+ }
93
+ };
94
+
95
+ return (
96
+ <div className="min-h-screen bg-gradient-to-br from-purple-900 via-blue-900 to-black text-white p-8">
97
+ <div className="max-w-4xl mx-auto">
98
+ <h1 className="text-5xl font-bold mb-8 text-center bg-clip-text text-transparent bg-gradient-to-r from-purple-400 to-pink-600">
99
+ ⚔️ Sui Quest
100
+ </h1>
101
+
102
+ <div className="bg-white/10 backdrop-blur-lg rounded-2xl p-6 mb-6 border border-white/20">
103
+ <h2 className="text-2xl font-semibold mb-4">Session Info</h2>
104
+ <p className="text-sm text-gray-300 mb-2">Session Address:</p>
105
+ <code className="block bg-black/30 p-3 rounded text-xs break-all">
106
+ {sessionAddress}
107
+ </code>
108
+ <p className="text-xs text-yellow-400 mt-2">
109
+ 💡 Fund this address with Testnet SUI to play!
110
+ </p>
111
+ </div>
112
+
113
+ <div className="bg-white/10 backdrop-blur-lg rounded-2xl p-6 mb-6 border border-white/20">
114
+ <h2 className="text-2xl font-semibold mb-4">Hero Status</h2>
115
+ {heroId ? (
116
+ <div>
117
+ <p className="text-green-400 mb-2">✅ Hero Ready!</p>
118
+ <code className="block bg-black/30 p-3 rounded text-xs break-all">
119
+ {heroId}
120
+ </code>
121
+ </div>
122
+ ) : (
123
+ <p className="text-gray-400">No hero found</p>
124
+ )}
125
+ </div>
126
+
127
+ <div className="flex gap-4 mb-6">
128
+ <button
129
+ onClick={mintHero}
130
+ disabled={loading}
131
+ className="flex-1 bg-gradient-to-r from-purple-600 to-pink-600 hover:from-purple-700 hover:to-pink-700 disabled:opacity-50 disabled:cursor-not-allowed px-6 py-4 rounded-xl font-semibold text-lg transition-all transform hover:scale-105"
132
+ >
133
+ 🔨 Mint Hero
134
+ </button>
135
+ <button
136
+ onClick={slayBoar}
137
+ disabled={loading || !heroId}
138
+ className="flex-1 bg-gradient-to-r from-red-600 to-orange-600 hover:from-red-700 hover:to-orange-700 disabled:opacity-50 disabled:cursor-not-allowed px-6 py-4 rounded-xl font-semibold text-lg transition-all transform hover:scale-105"
139
+ >
140
+ ⚔️ Slay Boar
141
+ </button>
142
+ </div>
143
+
144
+ <div className="bg-white/10 backdrop-blur-lg rounded-2xl p-6 border border-white/20">
145
+ <h2 className="text-2xl font-semibold mb-4">Event Log</h2>
146
+ <div className="space-y-2 max-h-64 overflow-y-auto">
147
+ {events.length === 0 ? (
148
+ <p className="text-gray-400 text-sm">No events yet...</p>
149
+ ) : (
150
+ events.map((event, i) => (
151
+ <div key={i} className="bg-black/30 p-3 rounded text-sm">
152
+ {event}
153
+ </div>
154
+ ))
155
+ )}
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ );
161
+ }
@@ -0,0 +1,22 @@
1
+ import { SuiClient } from '@mysten/sui/client';
2
+ import { SessionManager, AssetSpawner, GameStateSync } from 'sui-game-sdk';
3
+
4
+ // Configuration
5
+ export const PACKAGE_ID = process.env.NEXT_PUBLIC_PACKAGE_ID || '0x_REPLACE_WITH_PACKAGE_ID';
6
+ export const MODULE = 'hero';
7
+ export const RPC_URL = 'https://fullnode.testnet.sui.io';
8
+
9
+ // Initialize Sui Client
10
+ export const suiClient = new SuiClient({ url: RPC_URL });
11
+
12
+ // Initialize SDK Components
13
+ export const sessionManager = new SessionManager(suiClient);
14
+
15
+ export const assetSpawner = new AssetSpawner(suiClient, {
16
+ packageId: PACKAGE_ID,
17
+ module: MODULE,
18
+ function: 'mint_hero',
19
+ adminCapId: process.env.NEXT_PUBLIC_ADMIN_CAP || '0x_ADMIN_CAP'
20
+ });
21
+
22
+ export const gameStateSync = new GameStateSync(suiClient);
@@ -0,0 +1,9 @@
1
+ [package]
2
+ name = "SuiQuest"
3
+ version = "0.0.1"
4
+
5
+ [dependencies]
6
+ Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }
7
+
8
+ [addresses]
9
+ sui_quest = "0x0"
@@ -0,0 +1,109 @@
1
+ module sui_quest::hero {
2
+ use sui::object::{Self, UID};
3
+ use sui::tx_context::{Self, TxContext};
4
+ use sui::transfer;
5
+ use sui::event;
6
+
7
+ // --- Structs ---
8
+
9
+ struct Hero has key, store {
10
+ id: UID,
11
+ name: vector<u8>,
12
+ level: u64,
13
+ experience: u64,
14
+ hp: u64,
15
+ strength: u64,
16
+ }
17
+
18
+ struct GameAdmin has key {
19
+ id: UID,
20
+ }
21
+
22
+ // --- Events ---
23
+
24
+ struct HeroMinted has copy, drop {
25
+ id: address,
26
+ name: vector<u8>,
27
+ owner: address,
28
+ }
29
+
30
+ struct AttackEvent has copy, drop {
31
+ hero_id: address,
32
+ damage_dealt: u64,
33
+ enemy_hp_remaining: u64, // simplified
34
+ }
35
+
36
+ struct LevelUpEvent has copy, drop {
37
+ hero_id: address,
38
+ new_level: u64,
39
+ }
40
+
41
+ // --- Initializer ---
42
+
43
+ fun init(ctx: &mut TxContext) {
44
+ let admin = GameAdmin { id: object::new(ctx) };
45
+ transfer::transfer(admin, tx_context::sender(ctx));
46
+ }
47
+
48
+ // --- Entry Functions ---
49
+
50
+ public entry fun mint_hero(
51
+ _admin: &GameAdmin, // Require admin to mint (simulate controlled spawning)
52
+ name: vector<u8>,
53
+ recipient: address,
54
+ ctx: &mut TxContext
55
+ ) {
56
+ let id = object::new(ctx);
57
+ let hero_id = object::uid_to_address(&id);
58
+
59
+ let hero = Hero {
60
+ id,
61
+ name,
62
+ level: 1,
63
+ experience: 0,
64
+ hp: 100,
65
+ strength: 10,
66
+ };
67
+
68
+ event::emit(HeroMinted {
69
+ id: hero_id,
70
+ name,
71
+ owner: recipient
72
+ });
73
+
74
+ transfer::public_transfer(hero, recipient);
75
+ }
76
+
77
+ public entry fun slay_boar(hero: &mut Hero, ctx: &mut TxContext) {
78
+ // Simulate combat logic
79
+ // In reality, you'd use on-chain randomness or a specific Monster object
80
+
81
+ // 1. Calculate Damage (Strength +/- random noise simulated)
82
+ let damage = hero.strength + 2;
83
+
84
+ // 2. Grant XP
85
+ hero.experience = hero.experience + 10;
86
+
87
+ // 3. Check Level Up
88
+ if (hero.experience >= 100) {
89
+ hero.level = hero.level + 1;
90
+ hero.experience = 0;
91
+ hero.strength = hero.strength + 5;
92
+ event::emit(LevelUpEvent {
93
+ hero_id: object::uid_to_address(&hero.id),
94
+ new_level: hero.level
95
+ });
96
+ };
97
+
98
+ event::emit(AttackEvent {
99
+ hero_id: object::uid_to_address(&hero.id),
100
+ damage_dealt: damage,
101
+ enemy_hp_remaining: 0
102
+ });
103
+ }
104
+
105
+ // --- Accessors (View Functions) ---
106
+ public fun get_level(hero: &Hero): u64 {
107
+ hero.level
108
+ }
109
+ }
@@ -0,0 +1,4 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {}
3
+
4
+ module.exports = nextConfig
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "sui-quest-nextjs",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "next dev",
8
+ "build": "next build",
9
+ "start": "next start",
10
+ "lint": "next lint",
11
+ "deploy": "ts-node --esm scripts/deploy.ts"
12
+ },
13
+ "dependencies": {
14
+ "@mysten/sui": "^1.21.1",
15
+ "react": "^18",
16
+ "react-dom": "^18",
17
+ "next": "14.2.0"
18
+ },
19
+ "devDependencies": {
20
+ "typescript": "^5",
21
+ "@types/node": "^20",
22
+ "@types/react": "^18",
23
+ "@types/react-dom": "^18",
24
+ "autoprefixer": "^10.0.1",
25
+ "postcss": "^8",
26
+ "tailwindcss": "^3.4.1",
27
+ "ts-node": "^10.9.2",
28
+ "sui-game-sdk": "^0.0.1"
29
+ }
30
+ }
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ }
@@ -0,0 +1,42 @@
1
+ import { execSync } from 'child_process';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+
8
+ async function main() {
9
+ const moveDir = path.resolve(__dirname, '../move');
10
+ console.log(`Deploying from ${moveDir}...`);
11
+
12
+ console.log('Building Move Package...');
13
+ try {
14
+ const output = execSync('sui client publish --gas-budget 100000000 --json', {
15
+ cwd: moveDir,
16
+ encoding: 'utf-8'
17
+ });
18
+
19
+ const result = JSON.parse(output);
20
+ const packageId = result.objectChanges.find((c: any) => c.type === 'published')?.packageId;
21
+ const adminCap = result.objectChanges.find((c: any) => c.objectType?.includes('GameAdmin'))?.objectId;
22
+
23
+ if (!packageId) {
24
+ console.error('Could not find package ID in publish output.');
25
+ console.log(output);
26
+ return;
27
+ }
28
+
29
+ console.log('\nSUCCESS! Package Published.');
30
+ console.log('Package ID:', packageId);
31
+ if (adminCap) console.log('Admin Cap:', adminCap);
32
+
33
+ console.log('\nUpdate your .env.local file:');
34
+ console.log(`NEXT_PUBLIC_PACKAGE_ID=${packageId}`);
35
+ if (adminCap) console.log(`NEXT_PUBLIC_ADMIN_CAP=${adminCap}`);
36
+ } catch (e: any) {
37
+ console.error('Deployment failed:', e.message);
38
+ console.log('Ensure you have sufficient gas and the SUI CLI configured.');
39
+ }
40
+ }
41
+
42
+ main();
@@ -0,0 +1,12 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ content: [
4
+ './pages/**/*.{js,ts,jsx,tsx,mdx}',
5
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
6
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
7
+ ],
8
+ theme: {
9
+ extend: {},
10
+ },
11
+ plugins: [],
12
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "compilerOptions": {
3
+ "lib": [
4
+ "dom",
5
+ "dom.iterable",
6
+ "esnext"
7
+ ],
8
+ "allowJs": true,
9
+ "skipLibCheck": true,
10
+ "strict": true,
11
+ "noEmit": true,
12
+ "esModuleInterop": true,
13
+ "module": "esnext",
14
+ "moduleResolution": "bundler",
15
+ "resolveJsonModule": true,
16
+ "isolatedModules": true,
17
+ "jsx": "preserve",
18
+ "incremental": true,
19
+ "plugins": [
20
+ {
21
+ "name": "next"
22
+ }
23
+ ],
24
+ "paths": {
25
+ "@/*": [
26
+ "./*"
27
+ ]
28
+ }
29
+ },
30
+ "include": [
31
+ "next-env.d.ts",
32
+ "**/*.ts",
33
+ "**/*.tsx",
34
+ ".next/types/**/*.ts"
35
+ ],
36
+ "exclude": [
37
+ "node_modules"
38
+ ]
39
+ }
@@ -0,0 +1,197 @@
1
+ %YAML 1.1
2
+ %TAG !u! tag:unity3d.com,2011:
3
+ --- !u!29 &1
4
+ OcclusionCullingSettings:
5
+ m_ObjectHideFlags: 0
6
+ serializedVersion: 2
7
+ m_OcclusionBakeSettings:
8
+ smallestOccluder: 5
9
+ smallestHole: 0.25
10
+ backfaceThreshold: 100
11
+ m_SceneGUID: 00000000000000000000000000000000
12
+ m_OcclusionCullingData: {fileID: 0}
13
+ --- !u!104 &2
14
+ RenderSettings:
15
+ m_ObjectHideFlags: 0
16
+ serializedVersion: 9
17
+ m_Fog: 0
18
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
19
+ m_FogMode: 3
20
+ m_FogDensity: 0.01
21
+ m_LinearFogStart: 0
22
+ m_LinearFogEnd: 300
23
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
24
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
25
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
26
+ m_AmbientIntensity: 1
27
+ m_AmbientMode: 0
28
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
29
+ m_SkyboxMaterial: {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
30
+ m_HaloStrength: 0.5
31
+ m_FlareStrength: 1
32
+ m_FlareFadeSpeed: 3
33
+ m_HaloTexture: {fileID: 0}
34
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
35
+ m_DefaultReflectionMode: 0
36
+ m_DefaultReflectionResolution: 128
37
+ m_ReflectionBounces: 1
38
+ m_ReflectionIntensity: 1
39
+ m_CustomReflection: {fileID: 0}
40
+ m_Sun: {fileID: 0}
41
+ m_IndirectSpecularColor: {r: 0.44657898, g: 0.49641335, b: 0.5748178, a: 1}
42
+ m_UseRadianceAmbientProbe: 0
43
+ --- !u!157 &3
44
+ LightmapSettings:
45
+ m_ObjectHideFlags: 0
46
+ serializedVersion: 12
47
+ m_GIWorkflowMode: 1
48
+ m_GISettings:
49
+ serializedVersion: 2
50
+ m_BounceScale: 1
51
+ m_IndirectOutputScale: 1
52
+ m_AlbedoBoost: 1
53
+ m_EnvironmentLightingMode: 0
54
+ m_EnableBakedLightmaps: 1
55
+ m_EnableRealtimeLightmaps: 0
56
+ m_LightmapEditorSettings:
57
+ serializedVersion: 12
58
+ m_Resolution: 2
59
+ m_BakeResolution: 40
60
+ m_AtlasSize: 1024
61
+ m_AO: 0
62
+ m_AOMaxDistance: 1
63
+ m_CompAOExponent: 1
64
+ m_CompAOExponentDirect: 0
65
+ m_ExtractAmbientOcclusion: 0
66
+ m_Padding: 2
67
+ m_LightmapParameters: {fileID: 0}
68
+ m_LightmapsBakeMode: 1
69
+ m_TextureCompression: 1
70
+ m_FinalGather: 0
71
+ m_FinalGatherRayCount: 256
72
+ m_ReflectionCompression: 2
73
+ m_MixedBakeMode: 2
74
+ m_BakeBackend: 1
75
+ m_PVRSampling: 1
76
+ m_PVRDirectSampleCount: 32
77
+ m_PVRSampleCount: 500
78
+ m_PVRBounces: 2
79
+ m_PVREnvironmentSampleCount: 500
80
+ m_PVREnvironmentReferencePointCount: 2048
81
+ m_PVRFilteringMode: 2
82
+ m_PVRDenoiserTypeDirect: 0
83
+ m_PVRDenoiserTypeIndirect: 0
84
+ m_PVRDenoiserTypeAO: 0
85
+ m_PVRFilterTypeDirect: 0
86
+ m_PVRFilterTypeIndirect: 0
87
+ m_PVRFilterTypeAO: 0
88
+ m_PVREnvironmentMIS: 0
89
+ m_PVRCulling: 1
90
+ m_PVRFilteringGaussRadiusDirect: 1
91
+ m_PVRFilteringGaussRadiusIndirect: 5
92
+ m_PVRFilteringGaussRadiusAO: 2
93
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
94
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
95
+ m_PVRFilteringAtrousPositionSigmaAO: 1
96
+ m_ExportTrainingData: 0
97
+ m_TrainingDataDestination: TrainingData
98
+ m_LightProbeSampleCountMultiplier: 4
99
+ m_LightingDataAsset: {fileID: 0}
100
+ m_UseShadowmask: 1
101
+ --- !u!196 &4
102
+ NavMeshSettings:
103
+ serializedVersion: 2
104
+ m_ObjectHideFlags: 0
105
+ m_BuildSettings:
106
+ serializedVersion: 2
107
+ agentTypeID: 0
108
+ agentRadius: 0.5
109
+ agentHeight: 2
110
+ agentSlope: 45
111
+ agentClimb: 0.4
112
+ ledgeDropHeight: 0
113
+ maxJumpAcrossDistance: 0
114
+ minRegionArea: 2
115
+ manualCellSize: 0
116
+ cellSize: 0.16666667
117
+ manualTileSize: 0
118
+ tileSize: 256
119
+ accuratePlacement: 0
120
+ debug:
121
+ m_Flags: 0
122
+ m_NavMeshData: {fileID: 0}
123
+ --- !u!1 &705507993
124
+ GameObject:
125
+ m_ObjectHideFlags: 0
126
+ m_CorrespondingSourceObject: {fileID: 0}
127
+ m_PrefabInstance: {fileID: 0}
128
+ m_PrefabAsset: {fileID: 0}
129
+ serializedVersion: 6
130
+ m_Component:
131
+ - component: {fileID: 705507995}
132
+ - component: {fileID: 705507994}
133
+ m_Layer: 0
134
+ m_Name: Main Camera
135
+ m_TagString: MainCamera
136
+ m_Icon: {fileID: 0}
137
+ m_NavMeshLayer: 0
138
+ m_StaticEditorFlags: 0
139
+ m_IsActive: 1
140
+ --- !u!20 &705507994
141
+ Camera:
142
+ m_ObjectHideFlags: 0
143
+ m_CorrespondingSourceObject: {fileID: 0}
144
+ m_PrefabInstance: {fileID: 0}
145
+ m_PrefabAsset: {fileID: 0}
146
+ m_GameObject: {fileID: 705507993}
147
+ m_Enabled: 1
148
+ serializedVersion: 2
149
+ m_ClearFlags: 1
150
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
151
+ m_projectionMatrixMode: 1
152
+ m_GateFitMode: 2
153
+ m_FOVAxisMode: 0
154
+ m_SensorSize: {x: 36, y: 24}
155
+ m_LensShift: {x: 0, y: 0}
156
+ m_FocalLength: 50
157
+ m_NormalizedViewPortRect:
158
+ serializedVersion: 2
159
+ x: 0
160
+ y: 0
161
+ width: 1
162
+ height: 1
163
+ near clip plane: 0.3
164
+ far clip plane: 1000
165
+ field of view: 60
166
+ orthographic: 0
167
+ orthographic size: 5
168
+ m_Depth: -1
169
+ m_CullingMask:
170
+ serializedVersion: 2
171
+ m_Bits: 4294967295
172
+ m_RenderingPath: -1
173
+ m_TargetTexture: {fileID: 0}
174
+ m_TargetDisplay: 0
175
+ m_TargetEye: 3
176
+ m_HDR: 1
177
+ m_AllowMSAA: 1
178
+ m_AllowDynamicResolution: 0
179
+ m_ForceIntoRT: 0
180
+ m_OcclusionCulling: 1
181
+ m_StereoConvergence: 10
182
+ m_StereoSeparation: 0.022
183
+ --- !u!4 &705507995
184
+ Transform:
185
+ m_ObjectHideFlags: 0
186
+ m_CorrespondingSourceObject: {fileID: 0}
187
+ m_PrefabInstance: {fileID: 0}
188
+ m_PrefabAsset: {fileID: 0}
189
+ m_GameObject: {fileID: 705507993}
190
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
191
+ m_LocalPosition: {x: 0, y: 1, z: -10}
192
+ m_LocalScale: {x: 1, y: 1, z: 1}
193
+ m_ConstrainProportionsScale: 0
194
+ m_Children: []
195
+ m_Father: {fileID: 0}
196
+ m_RootOrder: 0
197
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}