Compare commits

..
Author SHA1 Message Date
lennartandClaude Opus 5 f5b302b3e3 add a Makefile for the common commands, and a test reporter
The invocations in CLAUDE.md were correct but long, and retyping them is how
flags get dropped. `make check` is the gate a change should pass: Yarn compiles,
voice sheets are in sync, EditMode is green.

`make test` and `make build` depend on a `lock` target that fails if the Editor
has the project open, which removes the most common confusing failure. It
filters out AssetImportWorker children, which are not a second Editor.

tools/ci/report_tests.py parses the NUnit results and exits non-zero on failure,
because Unity documents no common exit-code definition across the components
under test — the XML is the authority, not $?.

`make merge-driver` configures UnityYAMLMerge for the .gitattributes rules added
earlier. Note the binary lives in the Editor bundle under Contents/Helpers, not
Contents/Tools as most guides say; there is no Tools directory in Unity 6 on
macOS.

Also ignores the local .test-results/ and build/ output.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-25 20:29:39 +02:00
lennartandClaude Opus 5 2b35d3f754 renormalize line endings to LF
Mechanical consequence of the .gitattributes in the previous commit, done in one
deliberate pass rather than left to trickle out as surprise diffs whenever
someone next touches a vendored file.

74 files, all CRLF -> LF, 71 of them in StarterAssets. `git diff -w` over this
commit is empty: nothing but line endings changed. DialogueTest.unity is
correctly untouched, being marked binary.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-25 20:28:07 +02:00
lennartandClaude Opus 5 382f6c7f63 add .gitattributes: Unity YAML merge driver and line-ending policy
Scenes, prefabs and assets are now marked for UnityYAMLMerge, which is what
makes them mergeable at all — without it a scene conflict is resolved by a
line-oriented text merge that produces a file Unity may still load and that is
quietly wrong. The driver needs a one-time git config per machine; CLAUDE.md
carries the command.

Line endings are pinned to LF for every text type rather than left to
`text=auto`, so the 71 CRLF files vendored in StarterAssets stop being a source
of phantom diffs.

One exception, and it matters: DialogueTest.unity is marked `binary`. It is a
Unity binary SerializedFile rather than YAML, and it contains 128 lone CR bytes
— under `*.unity text eol=lf` git would rewrite those as line endings and
corrupt the scene. The rule carries the verification command and comes out as
soon as the file is genuinely text.

LFS is deliberately not enabled: the remote is self-hosted and its LFS support
is unverified, and enabling the filter against a server without it breaks
pushing. The rules to add later, and the migration step that has to accompany
them, are recorded in the file.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-25 20:28:06 +02:00
lennartandClaude Opus 5 ed28763017 document the writing pipeline and record Phase 2
CLAUDE.md gains the writing/ layout, the voice-sheet pipeline and its direction
of truth, the sync commands, and a pointer that Ground Truth must never be
copied into this repo. The writer-owned/code-owned table now covers writing/.

The restructure plan records Phase 2 as executed, and closes its first open
question: the writing handbook does exist, in the Obsidian vault, so STYLE.md
became a digest with pointers rather than the reconstruction the plan assumed.

Also noted there: the vault's opening-scene spec records SC-101's tone check as
BLOCKED on a one-page Voice Sheet that was never written. STYLE.md now holds
that sheet with four fields explicitly unset.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-25 20:23:42 +02:00
lennartandClaude Opus 5 f1fadf7909 add a writer-facing content pipeline under writing/
Dialogue was already plain text, so the gap was never the .yarn files. It was
that the character material a writing session needs was either missing or stored
somewhere a writer could not comfortably work.

Three things were wrong. The writing handbook was not in the repo and was cited
by SC101.yarn as though it were. The best voice material — register, verbal tics,
success/failure/passive samples — was a \n-escaped string inside a JSON field.
The named NPCs had no sheets at all, existing only as their Yarn lines.

writing/ now holds the dialogue-facing layer, at the repo root so it gets no
.meta files and is not a Unity asset:

  STYLE.md          register, the five tone moves, the ban list, branching
                    shapes, the Wrong Truth rule, flag families, candidate rules
  YARN-PRIMER.md    the one page of syntax needed to write a scene
  GLOSSARY.md       in-world and project vocabulary
  voices/           the eleven skill voices, one readable sheet each
  characters/       Bartender, Chevalier Cassian Thal, Bradford Kane
  scenes/           SC-101's brief: intent, beats, checks, constraints
  lore/             the three identity readings and the rules that bind them

STYLE.md is a digest of the Mystery Writing Handbook in the Obsidian vault, with
pointers rather than copies. The vault stays the authoring home for design work,
and Ground Truth — the solution document — deliberately stays out of this repo.

The voice sheets are generated from skill_bible.json but are the source of truth
for the prose. tools/writing/sync_voices.py folds edits back; voicelib.py
guarantees notes -> dict -> notes is identity for all eleven, so --to-json on
unchanged sheets is byte-identical. VoiceSheetSyncTests fails the build on drift
in either direction, and was verified to fail on real drift rather than merely
to pass.

SC101.yarn's header is trimmed from prose rationale to the six rules that bind
while editing that file, with the reasoning moved to the scene brief.

EditMode 42/42. YarnCheck compiles 9 files / 35 nodes.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-25 20:23:42 +02:00
lennartandClaude Opus 5 b915ad78c7 record Phase 0 completion in the restructure plan
Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-25 19:50:39 +02:00
108 changed files with 17086 additions and 13999 deletions
+114
View File
@@ -0,0 +1,114 @@
# Nightclub Arcadia — git attributes
#
# Two jobs: make Unity's YAML files mergeable, and keep line endings from
# becoming a source of phantom diffs.
# ---------------------------------------------------------------------------
# Unity YAML — text, LF, and merged with UnityYAMLMerge
# ---------------------------------------------------------------------------
# The merge driver needs a one-time setup per machine; see §"Merge driver" in
# CLAUDE.md. Without it git falls back to a normal text merge, which for scenes
# and prefabs means conflicts that are painful but not silently wrong.
*.unity text eol=lf merge=unityyamlmerge
*.prefab text eol=lf merge=unityyamlmerge
*.asset text eol=lf merge=unityyamlmerge
*.mat text eol=lf merge=unityyamlmerge
*.anim text eol=lf merge=unityyamlmerge
*.controller text eol=lf merge=unityyamlmerge
*.overrideController text eol=lf merge=unityyamlmerge
*.physicMaterial text eol=lf merge=unityyamlmerge
*.physicsMaterial2D text eol=lf merge=unityyamlmerge
*.playable text eol=lf merge=unityyamlmerge
*.mask text eol=lf merge=unityyamlmerge
*.brush text eol=lf merge=unityyamlmerge
*.flare text eol=lf merge=unityyamlmerge
*.lighting text eol=lf merge=unityyamlmerge
*.terrainlayer text eol=lf merge=unityyamlmerge
*.signal text eol=lf merge=unityyamlmerge
*.guiskin text eol=lf merge=unityyamlmerge
*.fontsettings text eol=lf merge=unityyamlmerge
*.meta text eol=lf
# ---------------------------------------------------------------------------
# EXCEPTION — a scene that is serialized as BINARY
# ---------------------------------------------------------------------------
# DialogueTest.unity is a Unity binary SerializedFile, not YAML, despite the
# project being set to Force Text. It contains 128 lone CR bytes, so treating it
# as text would have git rewrite them as line endings and corrupt the scene.
#
# Remove this line the moment the file is genuinely text — verify with:
# head -c 20 NightclubArcadia/Assets/Scenes/DialogueTest.unity # want %YAML 1.1
# Background and the fix: docs/restructure-plan.md §0.1
/NightclubArcadia/Assets/Scenes/DialogueTest.unity binary
# ---------------------------------------------------------------------------
# Source, config and prose
# ---------------------------------------------------------------------------
*.cs text eol=lf diff=csharp
*.yarn text eol=lf
*.yarnproject text eol=lf
*.asmdef text eol=lf
*.asmref text eol=lf
*.inputactions text eol=lf
*.shader text eol=lf
*.compute text eol=lf
*.cginc text eol=lf
*.hlsl text eol=lf
*.shadergraph text eol=lf
*.json text eol=lf
*.md text eol=lf
*.txt text eol=lf
*.py text eol=lf
*.sh text eol=lf
*.csproj text eol=lf
*.xml text eol=lf
*.gitattributes text eol=lf
*.gitignore text eol=lf
# ---------------------------------------------------------------------------
# Binary — never diffed, never line-ending converted
# ---------------------------------------------------------------------------
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.tga binary
*.tif binary
*.tiff binary
*.psd binary
*.exr binary
*.hdr binary
*.fbx binary
*.obj binary
*.blend binary
*.wav binary
*.mp3 binary
*.ogg binary
*.aif binary
*.ttf binary
*.otf binary
*.pdf binary
*.dll binary
*.pdb binary
*.so binary
*.dylib binary
*.bundle binary
*.a binary
*.unitypackage binary
*.cubemap binary
# ---------------------------------------------------------------------------
# Git LFS — deliberately NOT enabled yet
# ---------------------------------------------------------------------------
# git-lfs is installed locally, but this repo pushes to a self-hosted server
# whose LFS support has not been verified, and enabling LFS against a server
# that lacks it breaks pushing. There is also almost nothing to store yet: one
# placeholder PNG plus the StarterAssets meshes.
#
# When real art lands, verify the server first, then add:
# *.png filter=lfs diff=lfs merge=lfs -text
# *.fbx filter=lfs diff=lfs merge=lfs -text
# *.wav filter=lfs diff=lfs merge=lfs -text
# and migrate existing blobs with `git lfs migrate import --include=...`.
# Adding the filter without migrating leaves old blobs outside LFS, which is
# confusing rather than broken.
+6
View File
@@ -127,3 +127,9 @@ tools/**/obj/
*.tar.gz *.tar.gz
*.7z *.7z
*.rar *.rar
# ---------------------------------------------------------------------------
# Local build and test output (Makefile targets)
# ---------------------------------------------------------------------------
/.test-results/
/build/
+94 -7
View File
@@ -17,7 +17,9 @@ to fix — it is the checkout path). The Unity project is a **subdirectory**:
/Users/lennart/Dev/nightlcub-arcadia/ # git root /Users/lennart/Dev/nightlcub-arcadia/ # git root
├── CLAUDE.md, AGENTS.md # this reference ├── CLAUDE.md, AGENTS.md # this reference
├── docs/ # design + plan docs (markdown) ├── docs/ # design + plan docs (markdown)
├── writing/ # writer-facing context — see §4
├── tools/YarnCheck/ # .NET 9 Yarn compiler/player, no Unity needed ├── tools/YarnCheck/ # .NET 9 Yarn compiler/player, no Unity needed
├── tools/writing/ # voice-sheet sync (md <-> skill_bible.json)
├── .gitignore # macOS / IDE / toolchain rules ├── .gitignore # macOS / IDE / toolchain rules
└── NightclubArcadia/ # ← the Unity project (-projectPath) └── NightclubArcadia/ # ← the Unity project (-projectPath)
├── .gitignore # Unity rules (anchored, must stay here) ├── .gitignore # Unity rules (anchored, must stay here)
@@ -49,13 +51,43 @@ AI Navigation 2.0.14, ProBuilder 6.1.2, Test Framework 1.7.0. Yarn Spinner is an
mode while the Editor has it open — a single instance at a time. Always check before mode while the Editor has it open — a single instance at a time. Always check before
any `-batchmode` invocation (§3.1). any `-batchmode` invocation (§3.1).
4. **Prefer YarnCheck over Unity for dialogue validation.** It is seconds, not minutes, 4. **Prefer YarnCheck over Unity for dialogue validation.** It is seconds, not minutes,
and needs no Editor lock (§5.3). and needs no Editor lock (§5.4).
5. **Do not commit on the user's behalf** unless asked. Unity writes to tracked files 5. **Do not commit on the user's behalf** unless asked. Unity writes to tracked files
(`ProjectSettings/*`, `.meta`, scenes) as a side effect of simply being open, so (`ProjectSettings/*`, `.meta`, scenes) as a side effect of simply being open, so
`git status` noise is expected and is not always yours. `git status` noise is expected and is not always yours.
--- ---
## 2b. Everyday commands
A `Makefile` at the repo root wraps everything in this document. Prefer it — the exact
invocations live there instead of being retyped.
```bash
make # list targets
make check # yarn + voice sheets + EditMode — run this before committing
make test # EditMode suite, with a readable summary
make yarn # compile every Yarn script (seconds, no Unity)
make build # macOS player into build/
make lock # fail if the Editor has the project open
```
`make test` and `make build` refuse to run while the Editor is open, which removes the most
common way these commands fail confusingly.
### Merge driver — one-time per machine
`.gitattributes` marks Unity YAML for `unityyamlmerge`. Git needs to be told what that is, or
it falls back to a line-oriented text merge that can produce a scene Unity still loads and that
is quietly wrong:
```bash
make merge-driver
```
That points git at `UnityYAMLMerge` inside the Editor bundle (`Contents/Helpers/`, not
`Contents/Tools/` — the path in most online guides is wrong for Unity 6 on macOS).
## 3. Unity from the command line ## 3. Unity from the command line
### 3.0 Two different tools, both present ### 3.0 Two different tools, both present
@@ -174,6 +206,25 @@ NightclubArcadia/Assets/Dialogue/
└── Objects/ Chair └── Objects/ Chair
``` ```
The writer-facing context sits at the repo root, outside `Assets/` so it gets no `.meta` files:
```
writing/
├── README.md session entry point
├── STYLE.md register, tone moves, ban list, branching rules ← read first
├── YARN-PRIMER.md the one page of syntax a writer needs
├── GLOSSARY.md in-world and project vocabulary
├── voices/ the eleven skill voices, one sheet each (generated — see §4.7)
├── characters/ named NPCs, dialogue-facing
├── scenes/ per-scene briefs: intent, beats, checks, constraints
└── lore/ candidates.md — the three identity readings and their hard rules
```
Design material deeper than this lives in Obsidian, not the repo:
`~/Obsidian-Vaults/obsidian-vault/Projects/Active/NightclubArcadia/`. **`Ground Truth.md` there
is the solution document — never copy, quote, or summarise it into this repo**, including into
commit messages. The game's premise is that the protagonist's identity never resolves.
**Dialogue is already plain text in the repo.** It is authored in `.yarn` files, not inside **Dialogue is already plain text in the repo.** It is authored in `.yarn` files, not inside
the Unity Editor, and any new `.yarn` file dropped anywhere under `Assets/Dialogue/` is picked the Unity Editor, and any new `.yarn` file dropped anywhere under `Assets/Dialogue/` is picked
up automatically by the `**/*.yarn` glob in the `.yarnproject`. Adding a scene or a character up automatically by the `**/*.yarn` glob in the `.yarnproject`. Adding a scene or a character
@@ -249,13 +300,41 @@ candidates.json → Tools ▸ Nightclub Arcadia ▸ (CandidateSystemSetup)
Those setup scripts also register a `[DidReloadScripts]` callback, so in practice the assets Those setup scripts also register a `[DidReloadScripts]` callback, so in practice the assets
regenerate on script reload too. The JSON is the source of truth either way. regenerate on script reload too. The JSON is the source of truth either way.
### 4.6 Code-owned vs writer-owned ### 4.6 The voice-sheet pipeline
The Skill Bible prose used to live as a `\n`-escaped string inside `skill_bible.json`, which no
writer could comfortably read or revise. It now lives in `writing/voices/*.md`, and truth flows
in opposite directions for the two halves of each sheet:
```
PROSE writing/voices/<id>.md -> skill_bible.json -> Skills/Definitions/*.asset
MACHINE skill_bible.json -> the "Machine fields" table in the .md
```
```bash
python3 tools/writing/sync_voices.py --check # verify; exit 1 on drift
python3 tools/writing/sync_voices.py --to-json # fold edited prose into the bible
python3 tools/writing/sync_voices.py --to-md # refresh the machine table from the bible
```
`tools/writing/voicelib.py` does the parsing and guarantees `notes -> dict -> notes` is identity
for all eleven skills. `--to-json` on unchanged sheets is byte-identical, so it is safe to run
at any time.
`VoiceSheetSyncTests` (EditMode) enforces the same invariant, so drift fails the build instead
of silently shipping a voice that no longer matches the sheet the next scene is written against.
It deliberately does not reimplement the markdown parser in C# — it asserts the shipped prose
appears verbatim in the sheet, which catches drift in either direction with no second parser to
keep in step.
### 4.7 Code-owned vs writer-owned
| Writer-owned (edit freely, no Unity) | Code-owned (needs an engineer) | | Writer-owned (edit freely, no Unity) | Code-owned (needs an engineer) |
|---|---| |---|---|
| `Assets/Dialogue/**/*.yarn` | `Assets/Scripts/**/*.cs` | | `writing/**` | `Assets/Scripts/**/*.cs` |
| `<<declare>>` lines in `Common.yarn` | `Assets/Editor/**/*.cs` | | `Assets/Dialogue/**/*.yarn` | `Assets/Editor/**/*.cs` |
| `Assets/Skills/skill_bible.json` (prose fields) | Yarn command/function *implementations* | | `<<declare>>` lines in `Common.yarn` | Yarn command/function *implementations* |
| `writing/voices/*.md` (prose → the bible, §4.6) | `Assets/Skills/skill_bible.json` (machine fields) |
| `Assets/Candidates/candidates.json` (`status`, `sceneId`, `notes`, `unlockFlag`) | `.asset`, `.prefab`, `.unity`, `.meta` | | `Assets/Candidates/candidates.json` (`status`, `sceneId`, `notes`, `unlockFlag`) | `.asset`, `.prefab`, `.unity`, `.meta` |
| `docs/` writing docs | `ProjectSettings/**` | | `docs/` writing docs | `ProjectSettings/**` |
@@ -278,11 +357,19 @@ or a branch.** If a writing task requires either, that is a pipeline bug — fil
`$self_lean_*` / `$found_*` in any `.yarn` file resolves to a real id in `CandidateDatabase`. `$self_lean_*` / `$found_*` in any `.yarn` file resolves to a real id in `CandidateDatabase`.
It is a tripwire, not a proof. It is a tripwire, not a proof.
### 5.2 One-click in-Editor run ### 5.2 Voice-sheet sync
```bash
python3 tools/writing/sync_voices.py --check
```
Seconds, no Unity. Run it after touching `writing/voices/*.md` or `skill_bible.json` (§4.6).
### 5.3 One-click in-Editor run
`Tools ▸ Nightclub Arcadia ▸ Run Skill EditMode Tests` (`Assets/Editor/SkillSystemTestRunner.cs`). `Tools ▸ Nightclub Arcadia ▸ Run Skill EditMode Tests` (`Assets/Editor/SkillSystemTestRunner.cs`).
### 5.3 YarnCheck — validate dialogue without Unity ⭐ ### 5.4 YarnCheck — validate dialogue without Unity ⭐
`tools/YarnCheck` is a .NET 9 console app that compiles **and plays** the Yarn scripts using `tools/YarnCheck` is a .NET 9 console app that compiles **and plays** the Yarn scripts using
the exact Yarn Spinner DLLs shipped in `Packages/dev.yarnspinner.unity/Runtime/DLLs`, so it the exact Yarn Spinner DLLs shipped in `Packages/dev.yarnspinner.unity/Runtime/DLLs`, so it
+66
View File
@@ -0,0 +1,66 @@
# Nightclub Arcadia — common commands.
#
# Everything here is documented in CLAUDE.md; this file exists so the exact
# invocations live in one place instead of being retyped from memory.
UNITY_CLI ?= /Users/lennart/.unity/bin/unity
UNITY ?= /Applications/Unity/Hub/Editor/6000.5.8f1/Unity.app/Contents/MacOS/Unity
PROJECT ?= $(CURDIR)/NightclubArcadia
RESULTS ?= $(CURDIR)/.test-results
SMARTMERGE ?= /Applications/Unity/Hub/Editor/6000.5.8f1/Unity.app/Contents/Helpers/UnityYAMLMerge
.DEFAULT_GOAL := help
.PHONY: help check yarn yarn-play voices voices-sync test test-play build lock clean-results merge-driver
help: ## Show this help
@grep -hE '^[a-z-]+:.*?## ' $(MAKEFILE_LIST) \
| awk 'BEGIN {FS = ":.*?## "} {printf " \033[36m%-14s\033[0m %s\n", $$1, $$2}'
@echo ""
@echo " Unity must be CLOSED for test/build — run 'make lock' to check."
check: yarn voices test ## Everything a change should pass before commit
yarn: ## Compile every Yarn script (seconds, no Unity)
@cd tools/YarnCheck && DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet run -- ../../NightclubArcadia/Assets/Dialogue
yarn-play: ## Play a node: make yarn-play NODE=Bartender_Talk PICKS="2 2 0 0"
@cd tools/YarnCheck && DOTNET_CLI_TELEMETRY_OPTOUT=1 \
dotnet run -- ../../NightclubArcadia/Assets/Dialogue $(NODE) $(PICKS)
voices: ## Check writing/voices/*.md against skill_bible.json
@python3 tools/writing/sync_voices.py --check
voices-sync: ## Fold edited voice prose into skill_bible.json
@python3 tools/writing/sync_voices.py --to-json
test: lock ## Run the EditMode suite
@mkdir -p $(RESULTS)
@$(UNITY_CLI) test $(PROJECT) --no-banner --mode EditMode \
--output $(RESULTS)/editmode.xml --timeout 900 || true
@python3 tools/ci/report_tests.py $(RESULTS)/editmode.xml
test-play: lock ## Run the PlayMode suite (none exist yet)
@mkdir -p $(RESULTS)
@$(UNITY_CLI) test $(PROJECT) --no-banner --mode PlayMode \
--output $(RESULTS)/playmode.xml --timeout 900 || true
@python3 tools/ci/report_tests.py $(RESULTS)/playmode.xml
build: lock ## Build a macOS player into build/
@$(UNITY_CLI) build $(PROJECT) --no-banner --target StandaloneOSX -o $(CURDIR)/build/NightclubArcadia.app
lock: ## Fail if the Unity Editor has the project open
@if pgrep -fl "Unity.app/Contents/MacOS/Unity" | grep -v AssetImportWorker | grep -q .; then \
echo "The Unity Editor is running — close it first (only one instance per project)."; \
exit 1; \
fi
merge-driver: ## One-time: teach git to merge Unity YAML with UnityYAMLMerge
@test -x "$(SMARTMERGE)" || { echo "UnityYAMLMerge not found at $(SMARTMERGE)"; exit 1; }
@git config merge.unityyamlmerge.name "Unity SmartMerge"
@git config merge.unityyamlmerge.driver "'$(SMARTMERGE)' merge -p --force --fallback none %O %B %A %A"
@git config merge.unityyamlmerge.recursive binary
@echo "configured: $$(git config merge.unityyamlmerge.name)"
clean-results: ## Remove local test results
@rm -rf $(RESULTS)
@@ -1,28 +1,24 @@
// SC-101 — The Card at the Desk. Opening candidate hooks. // SC-101 — The Card at the Desk. Opening candidate hooks.
// //
// Scene files stay thin: set the stage, <<detour>> into hook nodes, return. // Brief, beats, checks and the reasoning behind every rule below:
// writing/scenes/sc101-the-card-at-the-desk.md
// //
// Evidence rule: each candidate gets exactly one of each evidence type — // Rules that bind while editing THIS file — all six are deliberate, none is a
// object, testimony, document, intuition. Preserve that balance; do not // leftover. The brief says why; this is the short form so you do not have to
// stack types so trust becomes an artifact of imbalance. // leave the file to avoid breaking it.
// See Assets/Candidates/candidates.json.
// //
// Beat order: hooks fire in sequence from SC101_Desk (STANDING ORDER → // 1. Scene files stay thin: set the stage, <<detour>> into hook nodes, return.
// HOUSE POUR → FACEWORK → CONFLUENCE). Each remains an independently authored // 2. Evidence balance — one object / testimony / document / intuition per
// node. Never <<if>>-guard a hook on another hook having fired, on any // candidate. Never stack types. See Assets/Candidates/candidates.json.
// $self_lean_*, or on skill_rank(...). // 3. Beat order is fixed: STANDING ORDER -> HOUSE POUR -> FACEWORK ->
// // CONFLUENCE. Never <<if>>-guard a hook on another hook having fired, on any
// Passive pattern (clue-bearing): // $self_lean_*, or on skill_rank(...).
// one voice per hook, from the candidate's attached pair; // 4. Passive pattern for a clue-bearing hook: one voice, from the candidate's
// the line is that character's argument, never a report; // attached pair; the line is that voice's argument, never a report; exactly
// exactly one $self_lean_* write; set $found_<clue_id> alongside it. // one $self_lean_* write, with $found_<clue_id> set alongside it.
// // 5. Four voice introductions, against the handbook cap of three. Deliberate,
// Four-voice exception: this opening uses four voice introductions (one per // SC-101 only — one voice per pair. Do not correct it down, do not copy it.
// pair) against the writing handbook's "cap introductions at three voices" // 6. The body stays neutral: no lean, no candidate attachment outside the hooks.
// rule. Deliberate and for SC-101 only — do not "correct" it down to three,
// and do not copy it as a new precedent elsewhere.
//
// Body stays neutral on purpose: no lean, no candidate attachment.
title: Start title: Start
position: -17,-276 position: -17,-276
+8 -8
View File
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 3397cd14c28cccf47b097769f7817a19 guid: 3397cd14c28cccf47b097769f7817a19
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 8d8da06649314d7498296c53b4a0a77a guid: 8d8da06649314d7498296c53b4a0a77a
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: bc688fc4c70b02044b054f994d6e36e6 guid: bc688fc4c70b02044b054f994d6e36e6
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 62e09e1e4aed9424ba218499f11ea644 guid: 62e09e1e4aed9424ba218499f11ea644
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a725de072e7eb4d449d782a7c86fd0bf guid: a725de072e7eb4d449d782a7c86fd0bf
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a5810db7e2f75fd4281a8ace4949bec8 guid: a5810db7e2f75fd4281a8ace4949bec8
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,84 +1,84 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000 --- !u!21 &2100000
Material: Material:
serializedVersion: 6 serializedVersion: 6
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: SkyboxLite m_Name: SkyboxLite
m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0} m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords: _SUNDISK_HIGH_QUALITY m_ShaderKeywords: _SUNDISK_HIGH_QUALITY
m_LightmapFlags: 4 m_LightmapFlags: 4
m_EnableInstancingVariants: 0 m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0 m_DoubleSidedGI: 0
m_CustomRenderQueue: -1 m_CustomRenderQueue: -1
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: [] disabledShaderPasses: []
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
- _BumpMap: - _BumpMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap: - _DetailAlbedoMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _DetailMask: - _DetailMask:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _DetailNormalMap: - _DetailNormalMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _EmissionMap: - _EmissionMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MainTex: - _MainTex:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MetallicGlossMap: - _MetallicGlossMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _OcclusionMap: - _OcclusionMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _ParallaxMap: - _ParallaxMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
m_Floats: m_Floats:
- _AtmosphereThickness: 1.05 - _AtmosphereThickness: 1.05
- _BumpScale: 1 - _BumpScale: 1
- _Cutoff: 0.5 - _Cutoff: 0.5
- _DetailNormalMapScale: 1 - _DetailNormalMapScale: 1
- _DstBlend: 0 - _DstBlend: 0
- _Exposure: 0.98 - _Exposure: 0.98
- _GlossMapScale: 1 - _GlossMapScale: 1
- _Glossiness: 0.5 - _Glossiness: 0.5
- _GlossyReflections: 1 - _GlossyReflections: 1
- _Metallic: 0 - _Metallic: 0
- _Mode: 0 - _Mode: 0
- _OcclusionStrength: 1 - _OcclusionStrength: 1
- _Parallax: 0.02 - _Parallax: 0.02
- _SmoothnessTextureChannel: 0 - _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1 - _SpecularHighlights: 1
- _SrcBlend: 1 - _SrcBlend: 1
- _SunDisk: 2 - _SunDisk: 2
- _SunSize: 0.103 - _SunSize: 0.103
- _SunSizeConvergence: 5.35 - _SunSizeConvergence: 5.35
- _UVSec: 0 - _UVSec: 0
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _GroundColor: {r: 0.08627451, g: 0.08235294, b: 0.08235294, a: 1} - _GroundColor: {r: 0.08627451, g: 0.08235294, b: 0.08235294, a: 1}
- _SkyTint: {r: 0.8490566, g: 0.6121904, b: 0.2963688, a: 1} - _SkyTint: {r: 0.8490566, g: 0.6121904, b: 0.2963688, a: 1}
@@ -1,85 +1,85 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000 --- !u!21 &2100000
Material: Material:
serializedVersion: 6 serializedVersion: 6
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: SkyboxLiteWarm m_Name: SkyboxLiteWarm
m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0} m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords: _SUNDISK_HIGH_QUALITY m_ShaderKeywords: _SUNDISK_HIGH_QUALITY
m_LightmapFlags: 4 m_LightmapFlags: 4
m_EnableInstancingVariants: 0 m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0 m_DoubleSidedGI: 0
m_CustomRenderQueue: -1 m_CustomRenderQueue: -1
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: [] disabledShaderPasses: []
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
- _BumpMap: - _BumpMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap: - _DetailAlbedoMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _DetailMask: - _DetailMask:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _DetailNormalMap: - _DetailNormalMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _EmissionMap: - _EmissionMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MainTex: - _MainTex:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MetallicGlossMap: - _MetallicGlossMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _OcclusionMap: - _OcclusionMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _ParallaxMap: - _ParallaxMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
m_Floats: m_Floats:
- _AtmosphereThickness: 0.5 - _AtmosphereThickness: 0.5
- _BumpScale: 1 - _BumpScale: 1
- _Cutoff: 0.5 - _Cutoff: 0.5
- _DetailNormalMapScale: 1 - _DetailNormalMapScale: 1
- _DstBlend: 0 - _DstBlend: 0
- _Exposure: 0.7 - _Exposure: 0.7
- _GlossMapScale: 1 - _GlossMapScale: 1
- _Glossiness: 0.5 - _Glossiness: 0.5
- _GlossyReflections: 1 - _GlossyReflections: 1
- _Metallic: 0 - _Metallic: 0
- _Mode: 0 - _Mode: 0
- _OcclusionStrength: 1 - _OcclusionStrength: 1
- _Parallax: 0.02 - _Parallax: 0.02
- _SmoothnessTextureChannel: 0 - _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1 - _SpecularHighlights: 1
- _SrcBlend: 1 - _SrcBlend: 1
- _SunDisk: 2 - _SunDisk: 2
- _SunSize: 0.05 - _SunSize: 0.05
- _SunSizeConvergence: 3.5 - _SunSizeConvergence: 3.5
- _UVSec: 0 - _UVSec: 0
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _GroundColor: {r: 0.08627451, g: 0.08235294, b: 0.08235294, a: 1} - _GroundColor: {r: 0.08627451, g: 0.08235294, b: 0.08235294, a: 1}
- _SkyTint: {r: 0.8820755, g: 1, b: 0.9987828, a: 1} - _SkyTint: {r: 0.8820755, g: 1, b: 0.9987828, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: ed5cc06472bb24d419458b6ece5b79eb guid: ed5cc06472bb24d419458b6ece5b79eb
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 93bb3603ed019014a98e7c62df54135e guid: 93bb3603ed019014a98e7c62df54135e
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,97 +1,97 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &899428459418414007 --- !u!1 &899428459418414007
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 8718778828885884488} - component: {fileID: 8718778828885884488}
- component: {fileID: 3418225732042694151} - component: {fileID: 3418225732042694151}
- component: {fileID: 4043535580645081189} - component: {fileID: 4043535580645081189}
- component: {fileID: 6023149417776915991} - component: {fileID: 6023149417776915991}
m_Layer: 0 m_Layer: 0
m_Name: Box_100x100x100_Prefab m_Name: Box_100x100x100_Prefab
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 73 m_StaticEditorFlags: 73
m_IsActive: 1 m_IsActive: 1
--- !u!4 &8718778828885884488 --- !u!4 &8718778828885884488
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 899428459418414007} m_GameObject: {fileID: 899428459418414007}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3418225732042694151 --- !u!33 &3418225732042694151
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 899428459418414007} m_GameObject: {fileID: 899428459418414007}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &4043535580645081189 --- !u!23 &4043535580645081189
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 899428459418414007} m_GameObject: {fileID: 899428459418414007}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: 7ab977a21c92388468ee65ad1c0e5a78, type: 2} - {fileID: 2100000, guid: 7ab977a21c92388468ee65ad1c0e5a78, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 2 m_ReceiveGI: 2
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &6023149417776915991 --- !u!65 &6023149417776915991
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 899428459418414007} m_GameObject: {fileID: 899428459418414007}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1} m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0} m_Center: {x: 0, y: 0, z: 0}
@@ -1,97 +1,97 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &3051928965768018776 --- !u!1 &3051928965768018776
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 2382810566493446626} - component: {fileID: 2382810566493446626}
- component: {fileID: 1638934234086026823} - component: {fileID: 1638934234086026823}
- component: {fileID: 3556257425134475917} - component: {fileID: 3556257425134475917}
- component: {fileID: 5689917692814982442} - component: {fileID: 5689917692814982442}
m_Layer: 0 m_Layer: 0
m_Name: Box_350x200x250_Mesh m_Name: Box_350x200x250_Mesh
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 73 m_StaticEditorFlags: 73
m_IsActive: 1 m_IsActive: 1
--- !u!4 &2382810566493446626 --- !u!4 &2382810566493446626
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3051928965768018776} m_GameObject: {fileID: 3051928965768018776}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &1638934234086026823 --- !u!33 &1638934234086026823
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3051928965768018776} m_GameObject: {fileID: 3051928965768018776}
m_Mesh: {fileID: 7535803439391131454, guid: c6a55ba99e9e99d41b7eef123e311a43, type: 3} m_Mesh: {fileID: 7535803439391131454, guid: c6a55ba99e9e99d41b7eef123e311a43, type: 3}
--- !u!23 &3556257425134475917 --- !u!23 &3556257425134475917
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3051928965768018776} m_GameObject: {fileID: 3051928965768018776}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: 7ab977a21c92388468ee65ad1c0e5a78, type: 2} - {fileID: 2100000, guid: 7ab977a21c92388468ee65ad1c0e5a78, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 2 m_ReceiveGI: 2
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &5689917692814982442 --- !u!65 &5689917692814982442
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3051928965768018776} m_GameObject: {fileID: 3051928965768018776}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Size: {x: 3.4872339, y: 2.5007026, z: 2.0028448} m_Size: {x: 3.4872339, y: 2.5007026, z: 2.0028448}
m_Center: {x: 0, y: 0, z: 0.9989877} m_Center: {x: 0, y: 0, z: 0.9989877}
@@ -1,97 +1,97 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &2765075023489016845 --- !u!1 &2765075023489016845
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 3248315488105561783} - component: {fileID: 3248315488105561783}
- component: {fileID: 1926289588026962194} - component: {fileID: 1926289588026962194}
- component: {fileID: 4422386835124225496} - component: {fileID: 4422386835124225496}
- component: {fileID: 3620356314442491057} - component: {fileID: 3620356314442491057}
m_Layer: 0 m_Layer: 0
m_Name: Box_350x300x250_Prefab m_Name: Box_350x300x250_Prefab
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 73 m_StaticEditorFlags: 73
m_IsActive: 1 m_IsActive: 1
--- !u!4 &3248315488105561783 --- !u!4 &3248315488105561783
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2765075023489016845} m_GameObject: {fileID: 2765075023489016845}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &1926289588026962194 --- !u!33 &1926289588026962194
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2765075023489016845} m_GameObject: {fileID: 2765075023489016845}
m_Mesh: {fileID: 7718662893383318277, guid: d2f0da3998423f44594868ffed55c3e6, type: 3} m_Mesh: {fileID: 7718662893383318277, guid: d2f0da3998423f44594868ffed55c3e6, type: 3}
--- !u!23 &4422386835124225496 --- !u!23 &4422386835124225496
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2765075023489016845} m_GameObject: {fileID: 2765075023489016845}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: 7ab977a21c92388468ee65ad1c0e5a78, type: 2} - {fileID: 2100000, guid: 7ab977a21c92388468ee65ad1c0e5a78, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 2 m_ReceiveGI: 2
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &3620356314442491057 --- !u!65 &3620356314442491057
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2765075023489016845} m_GameObject: {fileID: 2765075023489016845}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Size: {x: 3.500001, y: 2.500001, z: 3.0000012} m_Size: {x: 3.500001, y: 2.500001, z: 3.0000012}
m_Center: {x: 0.00000015288805, y: -0.00000008607952, z: 1.5000004} m_Center: {x: 0.00000015288805, y: -0.00000008607952, z: 1.5000004}
File diff suppressed because it is too large Load Diff
@@ -1,98 +1,98 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &8924170145835402666 --- !u!1 &8924170145835402666
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 8111781018561290000} - component: {fileID: 8111781018561290000}
- component: {fileID: 5133274882688487605} - component: {fileID: 5133274882688487605}
- component: {fileID: 6978882906433643647} - component: {fileID: 6978882906433643647}
- component: {fileID: 894093325933845257} - component: {fileID: 894093325933845257}
m_Layer: 0 m_Layer: 0
m_Name: Ramp_Prefab m_Name: Ramp_Prefab
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 73 m_StaticEditorFlags: 73
m_IsActive: 1 m_IsActive: 1
--- !u!4 &8111781018561290000 --- !u!4 &8111781018561290000
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8924170145835402666} m_GameObject: {fileID: 8924170145835402666}
m_LocalRotation: {x: 0.000000021855694, y: -0, z: -0, w: 1} m_LocalRotation: {x: 0.000000021855694, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5133274882688487605 --- !u!33 &5133274882688487605
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8924170145835402666} m_GameObject: {fileID: 8924170145835402666}
m_Mesh: {fileID: -8512782951310809723, guid: 426a2785f8a940049aac2c246661cf09, type: 3} m_Mesh: {fileID: -8512782951310809723, guid: 426a2785f8a940049aac2c246661cf09, type: 3}
--- !u!23 &6978882906433643647 --- !u!23 &6978882906433643647
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8924170145835402666} m_GameObject: {fileID: 8924170145835402666}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: dbf898c9f9c4a2d46aa6336e23caeb61, type: 2} - {fileID: 2100000, guid: dbf898c9f9c4a2d46aa6336e23caeb61, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 2 m_ReceiveGI: 2
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &894093325933845257 --- !u!64 &894093325933845257
MeshCollider: MeshCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8924170145835402666} m_GameObject: {fileID: 8924170145835402666}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 4 serializedVersion: 4
m_Convex: 0 m_Convex: 0
m_CookingOptions: 30 m_CookingOptions: 30
m_Mesh: {fileID: -8512782951310809723, guid: 426a2785f8a940049aac2c246661cf09, type: 3} m_Mesh: {fileID: -8512782951310809723, guid: 426a2785f8a940049aac2c246661cf09, type: 3}
@@ -1,98 +1,98 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &1335415992372505392 --- !u!1 &1335415992372505392
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 1856478557988811146} - component: {fileID: 1856478557988811146}
- component: {fileID: 3345139869004496431} - component: {fileID: 3345139869004496431}
- component: {fileID: 686981140955957989} - component: {fileID: 686981140955957989}
- component: {fileID: 4055211063494181534} - component: {fileID: 4055211063494181534}
m_Layer: 0 m_Layer: 0
m_Name: Stairs_200x100x200_Prefab m_Name: Stairs_200x100x200_Prefab
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &1856478557988811146 --- !u!4 &1856478557988811146
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1335415992372505392} m_GameObject: {fileID: 1335415992372505392}
m_LocalRotation: {x: -0, y: 0.0000014603138, z: -0, w: 1} m_LocalRotation: {x: -0, y: 0.0000014603138, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3345139869004496431 --- !u!33 &3345139869004496431
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1335415992372505392} m_GameObject: {fileID: 1335415992372505392}
m_Mesh: {fileID: 5495454633994339055, guid: fce3bf5a5b603db45ab0048fb6ab44df, type: 3} m_Mesh: {fileID: 5495454633994339055, guid: fce3bf5a5b603db45ab0048fb6ab44df, type: 3}
--- !u!23 &686981140955957989 --- !u!23 &686981140955957989
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1335415992372505392} m_GameObject: {fileID: 1335415992372505392}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: dbf898c9f9c4a2d46aa6336e23caeb61, type: 2} - {fileID: 2100000, guid: dbf898c9f9c4a2d46aa6336e23caeb61, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 1 m_ReceiveGI: 1
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &4055211063494181534 --- !u!64 &4055211063494181534
MeshCollider: MeshCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1335415992372505392} m_GameObject: {fileID: 1335415992372505392}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 4 serializedVersion: 4
m_Convex: 0 m_Convex: 0
m_CookingOptions: 30 m_CookingOptions: 30
m_Mesh: {fileID: -1974449766878446227, guid: fce3bf5a5b603db45ab0048fb6ab44df, type: 3} m_Mesh: {fileID: -1974449766878446227, guid: fce3bf5a5b603db45ab0048fb6ab44df, type: 3}
@@ -1,98 +1,98 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &7561066613761435406 --- !u!1 &7561066613761435406
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 8642225304373351647} - component: {fileID: 8642225304373351647}
- component: {fileID: 5575280121017685403} - component: {fileID: 5575280121017685403}
- component: {fileID: 6264060208083866756} - component: {fileID: 6264060208083866756}
- component: {fileID: 8022073721471710236} - component: {fileID: 8022073721471710236}
m_Layer: 0 m_Layer: 0
m_Name: Stairs_650_400_300_Prefab m_Name: Stairs_650_400_300_Prefab
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 73 m_StaticEditorFlags: 73
m_IsActive: 1 m_IsActive: 1
--- !u!4 &8642225304373351647 --- !u!4 &8642225304373351647
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7561066613761435406} m_GameObject: {fileID: 7561066613761435406}
m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068}
m_LocalPosition: {x: 8.665093, y: 2.1527317, z: 16.125418} m_LocalPosition: {x: 8.665093, y: 2.1527317, z: 16.125418}
m_LocalScale: {x: 1, y: 1.003, z: 0.9774802} m_LocalScale: {x: 1, y: 1.003, z: 0.9774802}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5575280121017685403 --- !u!33 &5575280121017685403
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7561066613761435406} m_GameObject: {fileID: 7561066613761435406}
m_Mesh: {fileID: 5495454633994339055, guid: 7e0223e1d3e1733499accfa5ebffb67e, type: 3} m_Mesh: {fileID: 5495454633994339055, guid: 7e0223e1d3e1733499accfa5ebffb67e, type: 3}
--- !u!23 &6264060208083866756 --- !u!23 &6264060208083866756
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7561066613761435406} m_GameObject: {fileID: 7561066613761435406}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: dbf898c9f9c4a2d46aa6336e23caeb61, type: 2} - {fileID: 2100000, guid: dbf898c9f9c4a2d46aa6336e23caeb61, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 2 m_ReceiveGI: 2
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &8022073721471710236 --- !u!64 &8022073721471710236
MeshCollider: MeshCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7561066613761435406} m_GameObject: {fileID: 7561066613761435406}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 4 serializedVersion: 4
m_Convex: 1 m_Convex: 1
m_CookingOptions: 30 m_CookingOptions: 30
m_Mesh: {fileID: -1974449766878446227, guid: 7e0223e1d3e1733499accfa5ebffb67e, type: 3} m_Mesh: {fileID: -1974449766878446227, guid: 7e0223e1d3e1733499accfa5ebffb67e, type: 3}
File diff suppressed because it is too large Load Diff
@@ -1,125 +1,125 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &1604908963751126680 --- !u!1 &1604908963751126680
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 2093637950428003362} - component: {fileID: 2093637950428003362}
- component: {fileID: 3071950872142852999} - component: {fileID: 3071950872142852999}
- component: {fileID: 956227959320364877} - component: {fileID: 956227959320364877}
- component: {fileID: 4985949235297978144} - component: {fileID: 4985949235297978144}
- component: {fileID: 8456313914433245678} - component: {fileID: 8456313914433245678}
- component: {fileID: 1138964657491743937} - component: {fileID: 1138964657491743937}
m_Layer: 0 m_Layer: 0
m_Name: Tunnel_Prefab m_Name: Tunnel_Prefab
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 73 m_StaticEditorFlags: 73
m_IsActive: 1 m_IsActive: 1
--- !u!4 &2093637950428003362 --- !u!4 &2093637950428003362
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1604908963751126680} m_GameObject: {fileID: 1604908963751126680}
m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: -90.00001, y: 0, z: 0} m_LocalEulerAnglesHint: {x: -90.00001, y: 0, z: 0}
--- !u!33 &3071950872142852999 --- !u!33 &3071950872142852999
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1604908963751126680} m_GameObject: {fileID: 1604908963751126680}
m_Mesh: {fileID: 5060444177187149915, guid: f712806514868e54699156ec05dcb749, type: 3} m_Mesh: {fileID: 5060444177187149915, guid: f712806514868e54699156ec05dcb749, type: 3}
--- !u!23 &956227959320364877 --- !u!23 &956227959320364877
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1604908963751126680} m_GameObject: {fileID: 1604908963751126680}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: 7ab977a21c92388468ee65ad1c0e5a78, type: 2} - {fileID: 2100000, guid: 7ab977a21c92388468ee65ad1c0e5a78, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 2 m_ReceiveGI: 2
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &4985949235297978144 --- !u!65 &4985949235297978144
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1604908963751126680} m_GameObject: {fileID: 1604908963751126680}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Size: {x: 2.502674, y: 6.0000024, z: 0.258326} m_Size: {x: 2.502674, y: 6.0000024, z: 0.258326}
m_Center: {x: 0, y: 5.4121983e-15, z: 2.3808491} m_Center: {x: 0, y: 5.4121983e-15, z: 2.3808491}
--- !u!65 &8456313914433245678 --- !u!65 &8456313914433245678
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1604908963751126680} m_GameObject: {fileID: 1604908963751126680}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Size: {x: 0.2527809, y: 6.0000024, z: 2.2399507} m_Size: {x: 0.2527809, y: 6.0000024, z: 2.2399507}
m_Center: {x: -1.1249466, y: 1.7786642e-15, z: 1.1251621} m_Center: {x: -1.1249466, y: 1.7786642e-15, z: 1.1251621}
--- !u!65 &1138964657491743937 --- !u!65 &1138964657491743937
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1604908963751126680} m_GameObject: {fileID: 1604908963751126680}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Size: {x: 0.26525307, y: 6.0000024, z: 2.256102} m_Size: {x: 0.26525307, y: 6.0000024, z: 2.256102}
m_Center: {x: 1.1187105, y: 1.893427e-15, z: 1.1332378} m_Center: {x: 1.1187105, y: 1.893427e-15, z: 1.1332378}
@@ -1,111 +1,111 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &7993119983977949264 --- !u!1 &7993119983977949264
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 7324705577624711914} - component: {fileID: 7324705577624711914}
- component: {fileID: 5911343394670230863} - component: {fileID: 5911343394670230863}
- component: {fileID: 8497650616581704069} - component: {fileID: 8497650616581704069}
- component: {fileID: 9105854698657379725} - component: {fileID: 9105854698657379725}
- component: {fileID: 1277700310800588604} - component: {fileID: 1277700310800588604}
m_Layer: 0 m_Layer: 0
m_Name: Wall_Prefab m_Name: Wall_Prefab
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 73 m_StaticEditorFlags: 73
m_IsActive: 1 m_IsActive: 1
--- !u!4 &7324705577624711914 --- !u!4 &7324705577624711914
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7993119983977949264} m_GameObject: {fileID: 7993119983977949264}
m_LocalRotation: {x: 0.000000021855694, y: -0, z: -0, w: 1} m_LocalRotation: {x: 0.000000021855694, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5911343394670230863 --- !u!33 &5911343394670230863
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7993119983977949264} m_GameObject: {fileID: 7993119983977949264}
m_Mesh: {fileID: 6352809919239313146, guid: ff02a0a00ab750f48b09459b1cafd1b8, type: 3} m_Mesh: {fileID: 6352809919239313146, guid: ff02a0a00ab750f48b09459b1cafd1b8, type: 3}
--- !u!23 &8497650616581704069 --- !u!23 &8497650616581704069
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7993119983977949264} m_GameObject: {fileID: 7993119983977949264}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: dbf898c9f9c4a2d46aa6336e23caeb61, type: 2} - {fileID: 2100000, guid: dbf898c9f9c4a2d46aa6336e23caeb61, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 2 m_ReceiveGI: 2
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &9105854698657379725 --- !u!65 &9105854698657379725
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7993119983977949264} m_GameObject: {fileID: 7993119983977949264}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Size: {x: 0.25, y: 1.0095696, z: 2.9958286} m_Size: {x: 0.25, y: 1.0095696, z: 2.9958286}
m_Center: {x: 0, y: 0.5047848, z: 1.5020857} m_Center: {x: 0, y: 0.5047848, z: 1.5020857}
--- !u!65 &1277700310800588604 --- !u!65 &1277700310800588604
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7993119983977949264} m_GameObject: {fileID: 7993119983977949264}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Size: {x: 0.25, y: 2.0055175, z: 3.000146} m_Size: {x: 0.25, y: 2.0055175, z: 3.000146}
m_Center: {x: 0, y: 1.0027587, z: -1.499927} m_Center: {x: 0, y: 1.0027587, z: -1.499927}
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 4d9eba5f689533f4196b93e67348ada3 guid: 4d9eba5f689533f4196b93e67348ada3
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,64 +1,64 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000 --- !u!114 &11400000
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3}
m_Name: StarterAssetsURPRenderer m_Name: StarterAssetsURPRenderer
m_EditorClassIdentifier: m_EditorClassIdentifier:
debugShaders: debugShaders:
debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3}
hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3}
probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3} probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3}
probeVolumeResources: probeVolumeResources:
probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, type: 3} probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, type: 3}
probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, type: 3} probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, type: 3}
probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, type: 3} probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, type: 3}
probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, type: 3} probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, type: 3}
probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, type: 3} probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, type: 3}
probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, type: 3} probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, type: 3}
m_RendererFeatures: [] m_RendererFeatures: []
m_RendererFeatureMap: m_RendererFeatureMap:
m_UseNativeRenderPass: 0 m_UseNativeRenderPass: 0
postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2}
xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2}
shaders: shaders:
blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3}
copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3}
screenSpaceShadowPS: {fileID: 0} screenSpaceShadowPS: {fileID: 0}
samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3}
stencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} stencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3}
fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3}
fallbackLoadingPS: {fileID: 4800000, guid: 7f888aff2ac86494babad1c2c5daeee2, type: 3} fallbackLoadingPS: {fileID: 4800000, guid: 7f888aff2ac86494babad1c2c5daeee2, type: 3}
materialErrorPS: {fileID: 4800000, guid: 5fd9a8feb75a4b5894c241777f519d4e, type: 3} materialErrorPS: {fileID: 4800000, guid: 5fd9a8feb75a4b5894c241777f519d4e, type: 3}
coreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} coreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3}
coreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3} coreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3}
blitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} blitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3}
cameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, type: 3} cameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, type: 3}
objectMotionVector: {fileID: 4800000, guid: 7b3ede40266cd49a395def176e1bc486, type: 3} objectMotionVector: {fileID: 4800000, guid: 7b3ede40266cd49a395def176e1bc486, type: 3}
m_AssetVersion: 2 m_AssetVersion: 2
m_OpaqueLayerMask: m_OpaqueLayerMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 4294967295 m_Bits: 4294967295
m_TransparentLayerMask: m_TransparentLayerMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 4294967295 m_Bits: 4294967295
m_DefaultStencilState: m_DefaultStencilState:
overrideStencilState: 0 overrideStencilState: 0
stencilReference: 0 stencilReference: 0
stencilCompareFunction: 8 stencilCompareFunction: 8
passOperation: 2 passOperation: 2
failOperation: 0 failOperation: 0
zFailOperation: 0 zFailOperation: 0
m_ShadowTransparentReceive: 1 m_ShadowTransparentReceive: 1
m_RenderingMode: 0 m_RenderingMode: 0
m_DepthPrimingMode: 0 m_DepthPrimingMode: 0
m_CopyDepthMode: 0 m_CopyDepthMode: 0
m_AccurateGbufferNormals: 0 m_AccurateGbufferNormals: 0
m_IntermediateTextureMode: 1 m_IntermediateTextureMode: 1
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 48c9acd554a28814b922162e3fa889b0 guid: 48c9acd554a28814b922162e3fa889b0
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,387 +1,387 @@
{ {
"name": "StarterAssets", "name": "StarterAssets",
"maps": [ "maps": [
{ {
"name": "Player", "name": "Player",
"id": "f62a4b92-ef5e-4175-8f4c-c9075429d32c", "id": "f62a4b92-ef5e-4175-8f4c-c9075429d32c",
"actions": [ "actions": [
{ {
"name": "Move", "name": "Move",
"type": "Value", "type": "Value",
"id": "6bc1aaf4-b110-4ff7-891e-5b9fe6f32c4d", "id": "6bc1aaf4-b110-4ff7-891e-5b9fe6f32c4d",
"expectedControlType": "Vector2", "expectedControlType": "Vector2",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
}, },
{ {
"name": "Look", "name": "Look",
"type": "Value", "type": "Value",
"id": "2690c379-f54d-45be-a724-414123833eb4", "id": "2690c379-f54d-45be-a724-414123833eb4",
"expectedControlType": "Vector2", "expectedControlType": "Vector2",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
}, },
{ {
"name": "Jump", "name": "Jump",
"type": "Button", "type": "Button",
"id": "8c4abdf8-4099-493a-aa1a-129acec7c3df", "id": "8c4abdf8-4099-493a-aa1a-129acec7c3df",
"expectedControlType": "Button", "expectedControlType": "Button",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
}, },
{ {
"name": "Sprint", "name": "Sprint",
"type": "PassThrough", "type": "PassThrough",
"id": "980e881e-182c-404c-8cbf-3d09fdb48fef", "id": "980e881e-182c-404c-8cbf-3d09fdb48fef",
"expectedControlType": "", "expectedControlType": "",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
}, },
{ {
"name": "Menu", "name": "Menu",
"type": "Button", "type": "Button",
"id": "e81d9782-4d9d-4a8b-b5a3-bc2f31e1cdcc", "id": "e81d9782-4d9d-4a8b-b5a3-bc2f31e1cdcc",
"expectedControlType": "Button", "expectedControlType": "Button",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
}, },
{ {
"name": "Point", "name": "Point",
"type": "PassThrough", "type": "PassThrough",
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"expectedControlType": "Vector2", "expectedControlType": "Vector2",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
}, },
{ {
"name": "Click", "name": "Click",
"type": "Button", "type": "Button",
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901", "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"expectedControlType": "Button", "expectedControlType": "Button",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
}, },
{ {
"name": "CameraPan", "name": "CameraPan",
"type": "Button", "type": "Button",
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012", "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"expectedControlType": "Button", "expectedControlType": "Button",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
}, },
{ {
"name": "PointerDelta", "name": "PointerDelta",
"type": "PassThrough", "type": "PassThrough",
"id": "d4e5f6a7-b8c9-0123-def0-234567890123", "id": "d4e5f6a7-b8c9-0123-def0-234567890123",
"expectedControlType": "Vector2", "expectedControlType": "Vector2",
"processors": "", "processors": "",
"interactions": "" "interactions": ""
} }
], ],
"bindings": [ "bindings": [
{ {
"name": "WASD", "name": "WASD",
"id": "b7594ddb-26c9-4ba2-bd5a-901468929edc", "id": "b7594ddb-26c9-4ba2-bd5a-901468929edc",
"path": "2DVector(mode=1)", "path": "2DVector(mode=1)",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "", "groups": "",
"action": "Move", "action": "Move",
"isComposite": true, "isComposite": true,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "up", "name": "up",
"id": "2063a8b5-6a45-43de-851b-65f3d46e7b58", "id": "2063a8b5-6a45-43de-851b-65f3d46e7b58",
"path": "<Keyboard>/w", "path": "<Keyboard>/w",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": true "isPartOfComposite": true
}, },
{ {
"name": "down", "name": "down",
"id": "64e4d037-32e1-4fb9-80e4-fc7330404dfe", "id": "64e4d037-32e1-4fb9-80e4-fc7330404dfe",
"path": "<Keyboard>/s", "path": "<Keyboard>/s",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": true "isPartOfComposite": true
}, },
{ {
"name": "left", "name": "left",
"id": "0fce8b11-5eab-4e4e-a741-b732e7b20873", "id": "0fce8b11-5eab-4e4e-a741-b732e7b20873",
"path": "<Keyboard>/a", "path": "<Keyboard>/a",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": true "isPartOfComposite": true
}, },
{ {
"name": "right", "name": "right",
"id": "7bdda0d6-57a8-47c8-8238-8aecf3110e47", "id": "7bdda0d6-57a8-47c8-8238-8aecf3110e47",
"path": "<Keyboard>/d", "path": "<Keyboard>/d",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": true "isPartOfComposite": true
}, },
{ {
"name": "up", "name": "up",
"id": "bb94b405-58d3-4998-8535-d705c1218a98", "id": "bb94b405-58d3-4998-8535-d705c1218a98",
"path": "<Keyboard>/upArrow", "path": "<Keyboard>/upArrow",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": true "isPartOfComposite": true
}, },
{ {
"name": "down", "name": "down",
"id": "929d9071-7dd0-4368-9743-6793bb98087e", "id": "929d9071-7dd0-4368-9743-6793bb98087e",
"path": "<Keyboard>/downArrow", "path": "<Keyboard>/downArrow",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": true "isPartOfComposite": true
}, },
{ {
"name": "left", "name": "left",
"id": "28abadba-06ff-4d37-bb70-af2f1e35a3b9", "id": "28abadba-06ff-4d37-bb70-af2f1e35a3b9",
"path": "<Keyboard>/leftArrow", "path": "<Keyboard>/leftArrow",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": true "isPartOfComposite": true
}, },
{ {
"name": "right", "name": "right",
"id": "45f115b6-9b4f-4ba8-b500-b94c93bf7d7e", "id": "45f115b6-9b4f-4ba8-b500-b94c93bf7d7e",
"path": "<Keyboard>/rightArrow", "path": "<Keyboard>/rightArrow",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": true "isPartOfComposite": true
}, },
{ {
"name": "", "name": "",
"id": "e2f9aa65-db06-4c5b-a2e9-41bc8acb9517", "id": "e2f9aa65-db06-4c5b-a2e9-41bc8acb9517",
"path": "<Gamepad>/leftStick", "path": "<Gamepad>/leftStick",
"interactions": "", "interactions": "",
"processors": "StickDeadzone", "processors": "StickDeadzone",
"groups": "Gamepad", "groups": "Gamepad",
"action": "Move", "action": "Move",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "ed66cbff-2900-4a62-8896-696503cfcd31", "id": "ed66cbff-2900-4a62-8896-696503cfcd31",
"path": "<Pointer>/delta", "path": "<Pointer>/delta",
"interactions": "", "interactions": "",
"processors": "InvertVector2(invertX=false),ScaleVector2(x=0.05,y=0.05)", "processors": "InvertVector2(invertX=false),ScaleVector2(x=0.05,y=0.05)",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Look", "action": "Look",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "d1d171b6-19d8-47a6-ba3a-71b6a8e7b3c0", "id": "d1d171b6-19d8-47a6-ba3a-71b6a8e7b3c0",
"path": "<Gamepad>/rightStick", "path": "<Gamepad>/rightStick",
"interactions": "", "interactions": "",
"processors": "InvertVector2(invertX=false),StickDeadzone,ScaleVector2(x=300,y=300)", "processors": "InvertVector2(invertX=false),StickDeadzone,ScaleVector2(x=300,y=300)",
"groups": "Gamepad", "groups": "Gamepad",
"action": "Look", "action": "Look",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "1bd55a0b-761e-4ae4-89ae-8ec127e08a29", "id": "1bd55a0b-761e-4ae4-89ae-8ec127e08a29",
"path": "<Keyboard>/space", "path": "<Keyboard>/space",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Jump", "action": "Jump",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "9f973413-5e27-4239-acee-38c4a63feeba", "id": "9f973413-5e27-4239-acee-38c4a63feeba",
"path": "<Gamepad>/buttonSouth", "path": "<Gamepad>/buttonSouth",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "Gamepad", "groups": "Gamepad",
"action": "Jump", "action": "Jump",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "dc65b89f-9bd3-43fb-92af-d0d87ba5faa4", "id": "dc65b89f-9bd3-43fb-92af-d0d87ba5faa4",
"path": "<Keyboard>/leftShift", "path": "<Keyboard>/leftShift",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Sprint", "action": "Sprint",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "c8fcd86e-dcfd-4f88-8e93-b638cdbf3320", "id": "c8fcd86e-dcfd-4f88-8e93-b638cdbf3320",
"path": "<Gamepad>/leftTrigger", "path": "<Gamepad>/leftTrigger",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "Gamepad", "groups": "Gamepad",
"action": "Sprint", "action": "Sprint",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "0f5e00e8-de3a-454f-8338-4348e69ac91a", "id": "0f5e00e8-de3a-454f-8338-4348e69ac91a",
"path": "<Keyboard>/tab", "path": "<Keyboard>/tab",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Menu", "action": "Menu",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "8533b9e3-7efc-442a-9d07-8fe1b29a3bf0", "id": "8533b9e3-7efc-442a-9d07-8fe1b29a3bf0",
"path": "<Gamepad>/start", "path": "<Gamepad>/start",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "Gamepad", "groups": "Gamepad",
"action": "Menu", "action": "Menu",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "e5f6a7b8-c9d0-1234-ef01-345678901234", "id": "e5f6a7b8-c9d0-1234-ef01-345678901234",
"path": "<Mouse>/position", "path": "<Mouse>/position",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Point", "action": "Point",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "f6a7b8c9-d0e1-2345-f012-456789012345", "id": "f6a7b8c9-d0e1-2345-f012-456789012345",
"path": "<Mouse>/leftButton", "path": "<Mouse>/leftButton",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "Click", "action": "Click",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "a7b8c9d0-e1f2-3456-0123-567890123456", "id": "a7b8c9d0-e1f2-3456-0123-567890123456",
"path": "<Mouse>/middleButton", "path": "<Mouse>/middleButton",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "CameraPan", "action": "CameraPan",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "b8c9d0e1-f2a3-4567-1234-678901234567", "id": "b8c9d0e1-f2a3-4567-1234-678901234567",
"path": "<Mouse>/rightButton", "path": "<Mouse>/rightButton",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "CameraPan", "action": "CameraPan",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
}, },
{ {
"name": "", "name": "",
"id": "c9d0e1f2-a3b4-5678-2345-789012345678", "id": "c9d0e1f2-a3b4-5678-2345-789012345678",
"path": "<Mouse>/delta", "path": "<Mouse>/delta",
"interactions": "", "interactions": "",
"processors": "", "processors": "",
"groups": "KeyboardMouse", "groups": "KeyboardMouse",
"action": "PointerDelta", "action": "PointerDelta",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
} }
] ]
} }
], ],
"controlSchemes": [ "controlSchemes": [
{ {
"name": "KeyboardMouse", "name": "KeyboardMouse",
"bindingGroup": "KeyboardMouse", "bindingGroup": "KeyboardMouse",
"devices": [ "devices": [
{ {
"devicePath": "<Keyboard>", "devicePath": "<Keyboard>",
"isOptional": false, "isOptional": false,
"isOR": false "isOR": false
}, },
{ {
"devicePath": "<Mouse>", "devicePath": "<Mouse>",
"isOptional": false, "isOptional": false,
"isOR": false "isOR": false
} }
] ]
}, },
{ {
"name": "Gamepad", "name": "Gamepad",
"bindingGroup": "Gamepad", "bindingGroup": "Gamepad",
"devices": [ "devices": [
{ {
"devicePath": "<Gamepad>", "devicePath": "<Gamepad>",
"isOptional": true, "isOptional": true,
"isOR": false "isOR": false
}, },
{ {
"devicePath": "<XInputController>", "devicePath": "<XInputController>",
"isOptional": true, "isOptional": true,
"isOR": false "isOR": false
}, },
{ {
"devicePath": "<DualShockGamepad>", "devicePath": "<DualShockGamepad>",
"isOptional": true, "isOptional": true,
"isOR": false "isOR": false
} }
] ]
}, },
{ {
"name": "Xbox Controller", "name": "Xbox Controller",
"bindingGroup": "Xbox Controller", "bindingGroup": "Xbox Controller",
"devices": [] "devices": []
}, },
{ {
"name": "PS4 Controller", "name": "PS4 Controller",
"bindingGroup": "PS4 Controller", "bindingGroup": "PS4 Controller",
"devices": [] "devices": []
} }
] ]
} }
@@ -1,26 +1,26 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000 --- !u!114 &11400000
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c46f07b5ed07e4e92aa78254188d3d10, type: 3} m_Script: {fileID: 11500000, guid: c46f07b5ed07e4e92aa78254188d3d10, type: 3}
m_Name: StarterAssets.inputsettings m_Name: StarterAssets.inputsettings
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_SupportedDevices: [] m_SupportedDevices: []
m_UpdateMode: 1 m_UpdateMode: 1
m_CompensateForScreenOrientation: 0 m_CompensateForScreenOrientation: 0
m_FilterNoiseOnCurrent: 0 m_FilterNoiseOnCurrent: 0
m_DefaultDeadzoneMin: 0.125 m_DefaultDeadzoneMin: 0.125
m_DefaultDeadzoneMax: 0.925 m_DefaultDeadzoneMax: 0.925
m_DefaultButtonPressPoint: 0.5 m_DefaultButtonPressPoint: 0.5
m_DefaultTapTime: 0.2 m_DefaultTapTime: 0.2
m_DefaultSlowTapTime: 0.5 m_DefaultSlowTapTime: 0.5
m_DefaultHoldTime: 0.4 m_DefaultHoldTime: 0.4
m_TapRadius: 5 m_TapRadius: 5
m_MultiTapDelayTime: 0.75 m_MultiTapDelayTime: 0.75
@@ -1,80 +1,80 @@
using UnityEngine; using UnityEngine;
#if ENABLE_INPUT_SYSTEM #if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
#endif #endif
namespace StarterAssets namespace StarterAssets
{ {
public class StarterAssetsInputs : MonoBehaviour public class StarterAssetsInputs : MonoBehaviour
{ {
[Header("Character Input Values")] [Header("Character Input Values")]
public Vector2 move; public Vector2 move;
public Vector2 look; public Vector2 look;
public bool jump; public bool jump;
public bool sprint; public bool sprint;
[Header("Movement Settings")] [Header("Movement Settings")]
public bool analogMovement; public bool analogMovement;
[Header("Mouse Cursor Settings")] [Header("Mouse Cursor Settings")]
public bool cursorLocked = true; public bool cursorLocked = true;
public bool cursorInputForLook = true; public bool cursorInputForLook = true;
#if ENABLE_INPUT_SYSTEM #if ENABLE_INPUT_SYSTEM
public void OnMove(InputValue value) public void OnMove(InputValue value)
{ {
MoveInput(value.Get<Vector2>()); MoveInput(value.Get<Vector2>());
} }
public void OnLook(InputValue value) public void OnLook(InputValue value)
{ {
if(cursorInputForLook) if(cursorInputForLook)
{ {
LookInput(value.Get<Vector2>()); LookInput(value.Get<Vector2>());
} }
} }
public void OnJump(InputValue value) public void OnJump(InputValue value)
{ {
JumpInput(value.isPressed); JumpInput(value.isPressed);
} }
public void OnSprint(InputValue value) public void OnSprint(InputValue value)
{ {
SprintInput(value.isPressed); SprintInput(value.isPressed);
} }
#endif #endif
public void MoveInput(Vector2 newMoveDirection) public void MoveInput(Vector2 newMoveDirection)
{ {
move = newMoveDirection; move = newMoveDirection;
} }
public void LookInput(Vector2 newLookDirection) public void LookInput(Vector2 newLookDirection)
{ {
look = newLookDirection; look = newLookDirection;
} }
public void JumpInput(bool newJumpState) public void JumpInput(bool newJumpState)
{ {
jump = newJumpState; jump = newJumpState;
} }
public void SprintInput(bool newSprintState) public void SprintInput(bool newSprintState)
{ {
sprint = newSprintState; sprint = newSprintState;
} }
private void OnApplicationFocus(bool hasFocus) private void OnApplicationFocus(bool hasFocus)
{ {
SetCursorState(cursorLocked); SetCursorState(cursorLocked);
} }
private void SetCursorState(bool newState) private void SetCursorState(bool newState)
{ {
Cursor.lockState = newState ? CursorLockMode.Locked : CursorLockMode.None; Cursor.lockState = newState ? CursorLockMode.Locked : CursorLockMode.None;
} }
} }
} }
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 14344c134ca94dc42887027aebcf24a5 guid: 14344c134ca94dc42887027aebcf24a5
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 49852dd85b2de7b4997a61317937f2e1 guid: 49852dd85b2de7b4997a61317937f2e1
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 6ac91ba6d254abc4c98c1a8868673b28 guid: 6ac91ba6d254abc4c98c1a8868673b28
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: c89b887ca267db84f895ccd75713a923 guid: c89b887ca267db84f895ccd75713a923
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,87 +1,87 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &1992104595683069851 --- !u!1 &1992104595683069851
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 8063073397250431797} - component: {fileID: 8063073397250431797}
- component: {fileID: 5148107578835001787} - component: {fileID: 5148107578835001787}
- component: {fileID: 8279798545678494202} - component: {fileID: 8279798545678494202}
m_Layer: 0 m_Layer: 0
m_Name: EventSystem m_Name: EventSystem
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &8063073397250431797 --- !u!4 &8063073397250431797
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1992104595683069851} m_GameObject: {fileID: 1992104595683069851}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -799.99994, y: -449.99997, z: 0} m_LocalPosition: {x: -799.99994, y: -449.99997, z: 0}
m_LocalScale: {x: 0.83333325, y: 0.83333325, z: 0.83333325} m_LocalScale: {x: 0.83333325, y: 0.83333325, z: 0.83333325}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5148107578835001787 --- !u!114 &5148107578835001787
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1992104595683069851} m_GameObject: {fileID: 1992104595683069851}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0} m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1 m_sendNavigationEvents: 1
m_DragThreshold: 10 m_DragThreshold: 10
--- !u!114 &8279798545678494202 --- !u!114 &8279798545678494202
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1992104595683069851} m_GameObject: {fileID: 1992104595683069851}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_MoveRepeatDelay: 0.5 m_MoveRepeatDelay: 0.5
m_MoveRepeatRate: 0.1 m_MoveRepeatRate: 0.1
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_PointAction: {fileID: 1054132383583890850, guid: ca9f5fa95ffab41fb9a615ab714db018, m_PointAction: {fileID: 1054132383583890850, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_MoveAction: {fileID: 3710738434707379630, guid: ca9f5fa95ffab41fb9a615ab714db018, m_MoveAction: {fileID: 3710738434707379630, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_SubmitAction: {fileID: 2064916234097673511, guid: ca9f5fa95ffab41fb9a615ab714db018, m_SubmitAction: {fileID: 2064916234097673511, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_CancelAction: {fileID: -1967631576421560919, guid: ca9f5fa95ffab41fb9a615ab714db018, m_CancelAction: {fileID: -1967631576421560919, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_LeftClickAction: {fileID: 8056856818456041789, guid: ca9f5fa95ffab41fb9a615ab714db018, m_LeftClickAction: {fileID: 8056856818456041789, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_MiddleClickAction: {fileID: 3279352641294131588, guid: ca9f5fa95ffab41fb9a615ab714db018, m_MiddleClickAction: {fileID: 3279352641294131588, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_RightClickAction: {fileID: 3837173908680883260, guid: ca9f5fa95ffab41fb9a615ab714db018, m_RightClickAction: {fileID: 3837173908680883260, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_ScrollWheelAction: {fileID: 4502412055082496612, guid: ca9f5fa95ffab41fb9a615ab714db018, m_ScrollWheelAction: {fileID: 4502412055082496612, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_TrackedDevicePositionAction: {fileID: 4754684134866288074, guid: ca9f5fa95ffab41fb9a615ab714db018, m_TrackedDevicePositionAction: {fileID: 4754684134866288074, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_TrackedDeviceOrientationAction: {fileID: 1025543830046995696, guid: ca9f5fa95ffab41fb9a615ab714db018, m_TrackedDeviceOrientationAction: {fileID: 1025543830046995696, guid: ca9f5fa95ffab41fb9a615ab714db018,
type: 3} type: 3}
m_DeselectOnBackgroundClick: 1 m_DeselectOnBackgroundClick: 1
m_PointerBehavior: 0 m_PointerBehavior: 0
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 7f242e43338822940a6223675e92f05d guid: 7f242e43338822940a6223675e92f05d
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,229 +1,229 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &4091757288130996202 --- !u!1 &4091757288130996202
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 8892224244125084019} - component: {fileID: 8892224244125084019}
- component: {fileID: 4087890128900500515} - component: {fileID: 4087890128900500515}
- component: {fileID: 2478905580774955251} - component: {fileID: 2478905580774955251}
- component: {fileID: 998461505230474078} - component: {fileID: 998461505230474078}
- component: {fileID: 413722335} - component: {fileID: 413722335}
m_Layer: 5 m_Layer: 5
m_Name: UI_Virtual_Button m_Name: UI_Virtual_Button
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &8892224244125084019 --- !u!224 &8892224244125084019
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4091757288130996202} m_GameObject: {fileID: 4091757288130996202}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.6, y: 0.6, z: 1} m_LocalScale: {x: 0.6, y: 0.6, z: 1}
m_Children: m_Children:
- {fileID: 5282399414295180930} - {fileID: 5282399414295180930}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0} m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -582, y: 327.5} m_AnchoredPosition: {x: -582, y: 327.5}
m_SizeDelta: {x: 200, y: 200} m_SizeDelta: {x: 200, y: 200}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4087890128900500515 --- !u!222 &4087890128900500515
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4091757288130996202} m_GameObject: {fileID: 4091757288130996202}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &2478905580774955251 --- !u!114 &2478905580774955251
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4091757288130996202} m_GameObject: {fileID: 4091757288130996202}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1} m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: b74c31d447d2f5d41a61081bdf5e7126, type: 3} m_Sprite: {fileID: 21300000, guid: b74c31d447d2f5d41a61081bdf5e7126, type: 3}
m_Type: 0 m_Type: 0
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!114 &998461505230474078 --- !u!114 &998461505230474078
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4091757288130996202} m_GameObject: {fileID: 4091757288130996202}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Navigation: m_Navigation:
m_Mode: 0 m_Mode: 0
m_WrapAround: 0 m_WrapAround: 0
m_SelectOnUp: {fileID: 0} m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0} m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0} m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0} m_SelectOnRight: {fileID: 0}
m_Transition: 1 m_Transition: 1
m_Colors: m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1} m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1 m_ColorMultiplier: 1
m_FadeDuration: 0.1 m_FadeDuration: 0.1
m_SpriteState: m_SpriteState:
m_HighlightedSprite: {fileID: 0} m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0} m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0} m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0} m_DisabledSprite: {fileID: 0}
m_AnimationTriggers: m_AnimationTriggers:
m_NormalTrigger: Normal m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed m_PressedTrigger: Pressed
m_SelectedTrigger: Selected m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled m_DisabledTrigger: Disabled
m_Interactable: 1 m_Interactable: 1
m_TargetGraphic: {fileID: 2478905580774955251} m_TargetGraphic: {fileID: 2478905580774955251}
m_OnClick: m_OnClick:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
--- !u!114 &413722335 --- !u!114 &413722335
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4091757288130996202} m_GameObject: {fileID: 4091757288130996202}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 448cd6d8e2f2cb04096e777d99974bc4, type: 3} m_Script: {fileID: 11500000, guid: 448cd6d8e2f2cb04096e777d99974bc4, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
buttonStateOutputEvent: buttonStateOutputEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 0} - m_Target: {fileID: 0}
m_TargetAssemblyTypeName: StarterAssets.UICanvasControllerInput, Assembly-CSharp m_TargetAssemblyTypeName: StarterAssets.UICanvasControllerInput, Assembly-CSharp
m_MethodName: VirtualJumpInput m_MethodName: VirtualJumpInput
m_Mode: 0 m_Mode: 0
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0 m_IntArgument: 0
m_FloatArgument: 0 m_FloatArgument: 0
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
buttonClickOutputEvent: buttonClickOutputEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
--- !u!1 &4525221819527958844 --- !u!1 &4525221819527958844
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 5282399414295180930} - component: {fileID: 5282399414295180930}
- component: {fileID: 8274542354720177529} - component: {fileID: 8274542354720177529}
- component: {fileID: 6604053163029732620} - component: {fileID: 6604053163029732620}
m_Layer: 5 m_Layer: 5
m_Name: Image_Icon m_Name: Image_Icon
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &5282399414295180930 --- !u!224 &5282399414295180930
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4525221819527958844} m_GameObject: {fileID: 4525221819527958844}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 8892224244125084019} m_Father: {fileID: 8892224244125084019}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100} m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8274542354720177529 --- !u!222 &8274542354720177529
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4525221819527958844} m_GameObject: {fileID: 4525221819527958844}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &6604053163029732620 --- !u!114 &6604053163029732620
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4525221819527958844} m_GameObject: {fileID: 4525221819527958844}
m_Enabled: 0 m_Enabled: 0
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.78431374} m_Color: {r: 1, g: 1, b: 1, a: 0.78431374}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 0} m_Sprite: {fileID: 0}
m_Type: 0 m_Type: 0
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
@@ -1,263 +1,263 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &1480850142 --- !u!1 &1480850142
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 1480850143} - component: {fileID: 1480850143}
- component: {fileID: 1480850145} - component: {fileID: 1480850145}
- component: {fileID: 1480850144} - component: {fileID: 1480850144}
m_Layer: 5 m_Layer: 5
m_Name: Image_Icon m_Name: Image_Icon
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &1480850143 --- !u!224 &1480850143
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1480850142} m_GameObject: {fileID: 1480850142}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 3199668076469712368} m_Father: {fileID: 3199668076469712368}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 70, y: 70} m_SizeDelta: {x: 70, y: 70}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1480850145 --- !u!222 &1480850145
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1480850142} m_GameObject: {fileID: 1480850142}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &1480850144 --- !u!114 &1480850144
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1480850142} m_GameObject: {fileID: 1480850142}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.78431374} m_Color: {r: 1, g: 1, b: 1, a: 0.78431374}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: ff7bfa7addf40784d86f62b8e4a034a6, type: 3} m_Sprite: {fileID: 21300000, guid: ff7bfa7addf40784d86f62b8e4a034a6, type: 3}
m_Type: 0 m_Type: 0
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!1 &1423390416140222447 --- !u!1 &1423390416140222447
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 1407806550736918862} - component: {fileID: 1407806550736918862}
- component: {fileID: 5566472052310511190} - component: {fileID: 5566472052310511190}
- component: {fileID: 2976711156707159110} - component: {fileID: 2976711156707159110}
- component: {fileID: 191938513} - component: {fileID: 191938513}
m_Layer: 5 m_Layer: 5
m_Name: UI_Virtual_Joystick m_Name: UI_Virtual_Joystick
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &1407806550736918862 --- !u!224 &1407806550736918862
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1423390416140222447} m_GameObject: {fileID: 1423390416140222447}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 3199668076469712368} - {fileID: 3199668076469712368}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 350, y: 350} m_SizeDelta: {x: 350, y: 350}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5566472052310511190 --- !u!222 &5566472052310511190
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1423390416140222447} m_GameObject: {fileID: 1423390416140222447}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &2976711156707159110 --- !u!114 &2976711156707159110
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1423390416140222447} m_GameObject: {fileID: 1423390416140222447}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1} m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: 90ded0611e490aa4ba6961afbfc2280d, type: 3} m_Sprite: {fileID: 21300000, guid: 90ded0611e490aa4ba6961afbfc2280d, type: 3}
m_Type: 0 m_Type: 0
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!114 &191938513 --- !u!114 &191938513
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1423390416140222447} m_GameObject: {fileID: 1423390416140222447}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f2cb8c4d669392748bb924209de33b85, type: 3} m_Script: {fileID: 11500000, guid: f2cb8c4d669392748bb924209de33b85, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
containerRect: {fileID: 1407806550736918862} containerRect: {fileID: 1407806550736918862}
handleRect: {fileID: 3199668076469712368} handleRect: {fileID: 3199668076469712368}
joystickRange: 100 joystickRange: 100
magnitudeMultiplier: 1 magnitudeMultiplier: 1
invertXOutputValue: 0 invertXOutputValue: 0
invertYOutputValue: 0 invertYOutputValue: 0
joystickOutputEvent: joystickOutputEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 0} - m_Target: {fileID: 0}
m_TargetAssemblyTypeName: StarterAssets.UICanvasControllerInput, Assembly-CSharp m_TargetAssemblyTypeName: StarterAssets.UICanvasControllerInput, Assembly-CSharp
m_MethodName: VirtualMoveInput m_MethodName: VirtualMoveInput
m_Mode: 0 m_Mode: 0
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0 m_IntArgument: 0
m_FloatArgument: 0 m_FloatArgument: 0
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
--- !u!1 &3199668076469712371 --- !u!1 &3199668076469712371
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 3199668076469712368} - component: {fileID: 3199668076469712368}
- component: {fileID: 3199668076469712374} - component: {fileID: 3199668076469712374}
- component: {fileID: 3199668076469712369} - component: {fileID: 3199668076469712369}
m_Layer: 5 m_Layer: 5
m_Name: Image_Handle m_Name: Image_Handle
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &3199668076469712368 --- !u!224 &3199668076469712368
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3199668076469712371} m_GameObject: {fileID: 3199668076469712371}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 1480850143} - {fileID: 1480850143}
m_Father: {fileID: 1407806550736918862} m_Father: {fileID: 1407806550736918862}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 130, y: 130} m_SizeDelta: {x: 130, y: 130}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3199668076469712374 --- !u!222 &3199668076469712374
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3199668076469712371} m_GameObject: {fileID: 3199668076469712371}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &3199668076469712369 --- !u!114 &3199668076469712369
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3199668076469712371} m_GameObject: {fileID: 3199668076469712371}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1} m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: b74c31d447d2f5d41a61081bdf5e7126, type: 3} m_Sprite: {fileID: 21300000, guid: b74c31d447d2f5d41a61081bdf5e7126, type: 3}
m_Type: 0 m_Type: 0
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
@@ -1,263 +1,263 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &1837564145867584781 --- !u!1 &1837564145867584781
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 3500080046422971095} - component: {fileID: 3500080046422971095}
- component: {fileID: 1681218170225375998} - component: {fileID: 1681218170225375998}
- component: {fileID: 1495516281102152583} - component: {fileID: 1495516281102152583}
m_Layer: 5 m_Layer: 5
m_Name: Image_Icon m_Name: Image_Icon
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &3500080046422971095 --- !u!224 &3500080046422971095
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1837564145867584781} m_GameObject: {fileID: 1837564145867584781}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.6, y: 0.6, z: 1} m_LocalScale: {x: 0.6, y: 0.6, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 4767772227758557155} m_Father: {fileID: 4767772227758557155}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1681218170225375998 --- !u!222 &1681218170225375998
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1837564145867584781} m_GameObject: {fileID: 1837564145867584781}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &1495516281102152583 --- !u!114 &1495516281102152583
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1837564145867584781} m_GameObject: {fileID: 1837564145867584781}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1} m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: ff7bfa7addf40784d86f62b8e4a034a6, type: 3} m_Sprite: {fileID: 21300000, guid: ff7bfa7addf40784d86f62b8e4a034a6, type: 3}
m_Type: 0 m_Type: 0
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!1 &4475312012745311023 --- !u!1 &4475312012745311023
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 4475312012745311020} - component: {fileID: 4475312012745311020}
- component: {fileID: 4475312012745310994} - component: {fileID: 4475312012745310994}
- component: {fileID: 4767772227563435449} - component: {fileID: 4767772227563435449}
- component: {fileID: 4767772227563435448} - component: {fileID: 4767772227563435448}
m_Layer: 5 m_Layer: 5
m_Name: UI_Virtual_TouchZone m_Name: UI_Virtual_TouchZone
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &4475312012745311020 --- !u!224 &4475312012745311020
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4475312012745311023} m_GameObject: {fileID: 4475312012745311023}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 4767772227758557155} - {fileID: 4767772227758557155}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 639.4351, y: 389.6286} m_SizeDelta: {x: 639.4351, y: 389.6286}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4475312012745310994 --- !u!222 &4475312012745310994
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4475312012745311023} m_GameObject: {fileID: 4475312012745311023}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &4767772227563435449 --- !u!114 &4767772227563435449
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4475312012745311023} m_GameObject: {fileID: 4475312012745311023}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.18431373} m_Color: {r: 0, g: 0, b: 0, a: 0.18431373}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 0} m_Sprite: {fileID: 0}
m_Type: 1 m_Type: 1
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!114 &4767772227563435448 --- !u!114 &4767772227563435448
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4475312012745311023} m_GameObject: {fileID: 4475312012745311023}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 65870f34fef70aa44b0f562cfc810220, type: 3} m_Script: {fileID: 11500000, guid: 65870f34fef70aa44b0f562cfc810220, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
containerRect: {fileID: 4475312012745311020} containerRect: {fileID: 4475312012745311020}
handleRect: {fileID: 4767772227758557155} handleRect: {fileID: 4767772227758557155}
clampToMagnitude: 1 clampToMagnitude: 1
magnitudeMultiplier: 1 magnitudeMultiplier: 1
invertXOutputValue: 0 invertXOutputValue: 0
invertYOutputValue: 0 invertYOutputValue: 0
touchZoneOutputEvent: touchZoneOutputEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 0} - m_Target: {fileID: 0}
m_TargetAssemblyTypeName: StarterAssets.UICanvasControllerInput, Assembly-CSharp m_TargetAssemblyTypeName: StarterAssets.UICanvasControllerInput, Assembly-CSharp
m_MethodName: VirtualMoveInput m_MethodName: VirtualMoveInput
m_Mode: 0 m_Mode: 0
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0 m_IntArgument: 0
m_FloatArgument: 0 m_FloatArgument: 0
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
--- !u!1 &4767772227758557154 --- !u!1 &4767772227758557154
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 4767772227758557155} - component: {fileID: 4767772227758557155}
- component: {fileID: 4767772227758556957} - component: {fileID: 4767772227758556957}
- component: {fileID: 4767772227758556956} - component: {fileID: 4767772227758556956}
m_Layer: 5 m_Layer: 5
m_Name: Image_Handle m_Name: Image_Handle
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &4767772227758557155 --- !u!224 &4767772227758557155
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4767772227758557154} m_GameObject: {fileID: 4767772227758557154}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 3500080046422971095} - {fileID: 3500080046422971095}
m_Father: {fileID: 4475312012745311020} m_Father: {fileID: 4475312012745311020}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 50, y: 50} m_SizeDelta: {x: 50, y: 50}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4767772227758556957 --- !u!222 &4767772227758556957
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4767772227758557154} m_GameObject: {fileID: 4767772227758557154}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &4767772227758556956 --- !u!114 &4767772227758556956
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4767772227758557154} m_GameObject: {fileID: 4767772227758557154}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.78431374} m_Color: {r: 1, g: 1, b: 1, a: 0.78431374}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: b74c31d447d2f5d41a61081bdf5e7126, type: 3} m_Sprite: {fileID: 21300000, guid: b74c31d447d2f5d41a61081bdf5e7126, type: 3}
m_Type: 0 m_Type: 0
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 7b0e507958fc3a940b3afabb02fdb2cc guid: 7b0e507958fc3a940b3afabb02fdb2cc
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 0777899404b4b2b4696f1032f3231697 guid: 0777899404b4b2b4696f1032f3231697
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,33 +1,33 @@
using UnityEngine; using UnityEngine;
namespace StarterAssets namespace StarterAssets
{ {
public class UICanvasControllerInput : MonoBehaviour public class UICanvasControllerInput : MonoBehaviour
{ {
[Header("Output")] [Header("Output")]
public StarterAssetsInputs starterAssetsInputs; public StarterAssetsInputs starterAssetsInputs;
public void VirtualMoveInput(Vector2 virtualMoveDirection) public void VirtualMoveInput(Vector2 virtualMoveDirection)
{ {
starterAssetsInputs.MoveInput(virtualMoveDirection); starterAssetsInputs.MoveInput(virtualMoveDirection);
} }
public void VirtualLookInput(Vector2 virtualLookDirection) public void VirtualLookInput(Vector2 virtualLookDirection)
{ {
starterAssetsInputs.LookInput(virtualLookDirection); starterAssetsInputs.LookInput(virtualLookDirection);
} }
public void VirtualJumpInput(bool virtualJumpState) public void VirtualJumpInput(bool virtualJumpState)
{ {
starterAssetsInputs.JumpInput(virtualJumpState); starterAssetsInputs.JumpInput(virtualJumpState);
} }
public void VirtualSprintInput(bool virtualSprintState) public void VirtualSprintInput(bool virtualSprintState)
{ {
starterAssetsInputs.SprintInput(virtualSprintState); starterAssetsInputs.SprintInput(virtualSprintState);
} }
} }
} }
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a499c73a35b488449a6f9e9db9e88120 guid: a499c73a35b488449a6f9e9db9e88120
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,35 +1,35 @@
/* /*
The PlayerInput component has an auto-switch control scheme action that allows automatic changing of connected devices. The PlayerInput component has an auto-switch control scheme action that allows automatic changing of connected devices.
IE: Switching from Keyboard to Gamepad in-game. IE: Switching from Keyboard to Gamepad in-game.
When built to a mobile phone; in most cases, there is no concept of switching connected devices as controls are typically driven through what is on the device's hardware (Screen, Tilt, etc) When built to a mobile phone; in most cases, there is no concept of switching connected devices as controls are typically driven through what is on the device's hardware (Screen, Tilt, etc)
In Input System 1.0.2, if the PlayerInput component has Auto Switch enabled, it will search the mobile device for connected devices; which is very costly and results in bad performance. In Input System 1.0.2, if the PlayerInput component has Auto Switch enabled, it will search the mobile device for connected devices; which is very costly and results in bad performance.
This is fixed in Input System 1.1. This is fixed in Input System 1.1.
For the time-being; this script will disable a PlayerInput's auto switch control schemes; when project is built to mobile. For the time-being; this script will disable a PlayerInput's auto switch control schemes; when project is built to mobile.
*/ */
using UnityEngine; using UnityEngine;
#if ENABLE_INPUT_SYSTEM #if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
#endif #endif
public class MobileDisableAutoSwitchControls : MonoBehaviour public class MobileDisableAutoSwitchControls : MonoBehaviour
{ {
#if ENABLE_INPUT_SYSTEM && (UNITY_IOS || UNITY_ANDROID) #if ENABLE_INPUT_SYSTEM && (UNITY_IOS || UNITY_ANDROID)
[Header("Target")] [Header("Target")]
public PlayerInput playerInput; public PlayerInput playerInput;
void Start() void Start()
{ {
DisableAutoSwitchControls(); DisableAutoSwitchControls();
} }
void DisableAutoSwitchControls() void DisableAutoSwitchControls()
{ {
playerInput.neverAutoSwitchControlSchemes = true; playerInput.neverAutoSwitchControlSchemes = true;
} }
#endif #endif
} }
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: bcc364c89270bab40a69cac58f5ae926 guid: bcc364c89270bab40a69cac58f5ae926
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,41 +1,41 @@
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using UnityEngine.Events; using UnityEngine.Events;
public class UIVirtualButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler public class UIVirtualButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler
{ {
[System.Serializable] [System.Serializable]
public class BoolEvent : UnityEvent<bool> { } public class BoolEvent : UnityEvent<bool> { }
[System.Serializable] [System.Serializable]
public class Event : UnityEvent { } public class Event : UnityEvent { }
[Header("Output")] [Header("Output")]
public BoolEvent buttonStateOutputEvent; public BoolEvent buttonStateOutputEvent;
public Event buttonClickOutputEvent; public Event buttonClickOutputEvent;
public void OnPointerDown(PointerEventData eventData) public void OnPointerDown(PointerEventData eventData)
{ {
OutputButtonStateValue(true); OutputButtonStateValue(true);
} }
public void OnPointerUp(PointerEventData eventData) public void OnPointerUp(PointerEventData eventData)
{ {
OutputButtonStateValue(false); OutputButtonStateValue(false);
} }
public void OnPointerClick(PointerEventData eventData) public void OnPointerClick(PointerEventData eventData)
{ {
OutputButtonClickEvent(); OutputButtonClickEvent();
} }
void OutputButtonStateValue(bool buttonState) void OutputButtonStateValue(bool buttonState)
{ {
buttonStateOutputEvent.Invoke(buttonState); buttonStateOutputEvent.Invoke(buttonState);
} }
void OutputButtonClickEvent() void OutputButtonClickEvent()
{ {
buttonClickOutputEvent.Invoke(); buttonClickOutputEvent.Invoke();
} }
} }
@@ -1,113 +1,113 @@
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using UnityEngine.Events; using UnityEngine.Events;
public class UIVirtualJoystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler public class UIVirtualJoystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
{ {
[System.Serializable] [System.Serializable]
public class Event : UnityEvent<Vector2> { } public class Event : UnityEvent<Vector2> { }
[Header("Rect References")] [Header("Rect References")]
public RectTransform containerRect; public RectTransform containerRect;
public RectTransform handleRect; public RectTransform handleRect;
[Header("Settings")] [Header("Settings")]
public float joystickRange = 50f; public float joystickRange = 50f;
public float magnitudeMultiplier = 1f; public float magnitudeMultiplier = 1f;
public bool invertXOutputValue; public bool invertXOutputValue;
public bool invertYOutputValue; public bool invertYOutputValue;
[Header("Output")] [Header("Output")]
public Event joystickOutputEvent; public Event joystickOutputEvent;
void Start() void Start()
{ {
SetupHandle(); SetupHandle();
} }
private void SetupHandle() private void SetupHandle()
{ {
if(handleRect) if(handleRect)
{ {
UpdateHandleRectPosition(Vector2.zero); UpdateHandleRectPosition(Vector2.zero);
} }
} }
public void OnPointerDown(PointerEventData eventData) public void OnPointerDown(PointerEventData eventData)
{ {
OnDrag(eventData); OnDrag(eventData);
} }
public void OnDrag(PointerEventData eventData) public void OnDrag(PointerEventData eventData)
{ {
RectTransformUtility.ScreenPointToLocalPointInRectangle(containerRect, eventData.position, eventData.pressEventCamera, out Vector2 position); RectTransformUtility.ScreenPointToLocalPointInRectangle(containerRect, eventData.position, eventData.pressEventCamera, out Vector2 position);
position = ApplySizeDelta(position); position = ApplySizeDelta(position);
Vector2 clampedPosition = ClampValuesToMagnitude(position); Vector2 clampedPosition = ClampValuesToMagnitude(position);
Vector2 outputPosition = ApplyInversionFilter(position); Vector2 outputPosition = ApplyInversionFilter(position);
OutputPointerEventValue(outputPosition * magnitudeMultiplier); OutputPointerEventValue(outputPosition * magnitudeMultiplier);
if(handleRect) if(handleRect)
{ {
UpdateHandleRectPosition(clampedPosition * joystickRange); UpdateHandleRectPosition(clampedPosition * joystickRange);
} }
} }
public void OnPointerUp(PointerEventData eventData) public void OnPointerUp(PointerEventData eventData)
{ {
OutputPointerEventValue(Vector2.zero); OutputPointerEventValue(Vector2.zero);
if(handleRect) if(handleRect)
{ {
UpdateHandleRectPosition(Vector2.zero); UpdateHandleRectPosition(Vector2.zero);
} }
} }
private void OutputPointerEventValue(Vector2 pointerPosition) private void OutputPointerEventValue(Vector2 pointerPosition)
{ {
joystickOutputEvent.Invoke(pointerPosition); joystickOutputEvent.Invoke(pointerPosition);
} }
private void UpdateHandleRectPosition(Vector2 newPosition) private void UpdateHandleRectPosition(Vector2 newPosition)
{ {
handleRect.anchoredPosition = newPosition; handleRect.anchoredPosition = newPosition;
} }
Vector2 ApplySizeDelta(Vector2 position) Vector2 ApplySizeDelta(Vector2 position)
{ {
float x = (position.x/containerRect.sizeDelta.x) * 2.5f; float x = (position.x/containerRect.sizeDelta.x) * 2.5f;
float y = (position.y/containerRect.sizeDelta.y) * 2.5f; float y = (position.y/containerRect.sizeDelta.y) * 2.5f;
return new Vector2(x, y); return new Vector2(x, y);
} }
Vector2 ClampValuesToMagnitude(Vector2 position) Vector2 ClampValuesToMagnitude(Vector2 position)
{ {
return Vector2.ClampMagnitude(position, 1); return Vector2.ClampMagnitude(position, 1);
} }
Vector2 ApplyInversionFilter(Vector2 position) Vector2 ApplyInversionFilter(Vector2 position)
{ {
if(invertXOutputValue) if(invertXOutputValue)
{ {
position.x = InvertValue(position.x); position.x = InvertValue(position.x);
} }
if(invertYOutputValue) if(invertYOutputValue)
{ {
position.y = InvertValue(position.y); position.y = InvertValue(position.y);
} }
return position; return position;
} }
float InvertValue(float value) float InvertValue(float value)
{ {
return -value; return -value;
} }
} }
@@ -1,125 +1,125 @@
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using UnityEngine.Events; using UnityEngine.Events;
public class UIVirtualTouchZone : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler public class UIVirtualTouchZone : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
{ {
[System.Serializable] [System.Serializable]
public class Event : UnityEvent<Vector2> { } public class Event : UnityEvent<Vector2> { }
[Header("Rect References")] [Header("Rect References")]
public RectTransform containerRect; public RectTransform containerRect;
public RectTransform handleRect; public RectTransform handleRect;
[Header("Settings")] [Header("Settings")]
public bool clampToMagnitude; public bool clampToMagnitude;
public float magnitudeMultiplier = 1f; public float magnitudeMultiplier = 1f;
public bool invertXOutputValue; public bool invertXOutputValue;
public bool invertYOutputValue; public bool invertYOutputValue;
//Stored Pointer Values //Stored Pointer Values
private Vector2 pointerDownPosition; private Vector2 pointerDownPosition;
private Vector2 currentPointerPosition; private Vector2 currentPointerPosition;
[Header("Output")] [Header("Output")]
public Event touchZoneOutputEvent; public Event touchZoneOutputEvent;
void Start() void Start()
{ {
SetupHandle(); SetupHandle();
} }
private void SetupHandle() private void SetupHandle()
{ {
if(handleRect) if(handleRect)
{ {
SetObjectActiveState(handleRect.gameObject, false); SetObjectActiveState(handleRect.gameObject, false);
} }
} }
public void OnPointerDown(PointerEventData eventData) public void OnPointerDown(PointerEventData eventData)
{ {
RectTransformUtility.ScreenPointToLocalPointInRectangle(containerRect, eventData.position, eventData.pressEventCamera, out pointerDownPosition); RectTransformUtility.ScreenPointToLocalPointInRectangle(containerRect, eventData.position, eventData.pressEventCamera, out pointerDownPosition);
if(handleRect) if(handleRect)
{ {
SetObjectActiveState(handleRect.gameObject, true); SetObjectActiveState(handleRect.gameObject, true);
UpdateHandleRectPosition(pointerDownPosition); UpdateHandleRectPosition(pointerDownPosition);
} }
} }
public void OnDrag(PointerEventData eventData) public void OnDrag(PointerEventData eventData)
{ {
RectTransformUtility.ScreenPointToLocalPointInRectangle(containerRect, eventData.position, eventData.pressEventCamera, out currentPointerPosition); RectTransformUtility.ScreenPointToLocalPointInRectangle(containerRect, eventData.position, eventData.pressEventCamera, out currentPointerPosition);
Vector2 positionDelta = GetDeltaBetweenPositions(pointerDownPosition, currentPointerPosition); Vector2 positionDelta = GetDeltaBetweenPositions(pointerDownPosition, currentPointerPosition);
Vector2 clampedPosition = ClampValuesToMagnitude(positionDelta); Vector2 clampedPosition = ClampValuesToMagnitude(positionDelta);
Vector2 outputPosition = ApplyInversionFilter(clampedPosition); Vector2 outputPosition = ApplyInversionFilter(clampedPosition);
OutputPointerEventValue(outputPosition * magnitudeMultiplier); OutputPointerEventValue(outputPosition * magnitudeMultiplier);
} }
public void OnPointerUp(PointerEventData eventData) public void OnPointerUp(PointerEventData eventData)
{ {
pointerDownPosition = Vector2.zero; pointerDownPosition = Vector2.zero;
currentPointerPosition = Vector2.zero; currentPointerPosition = Vector2.zero;
OutputPointerEventValue(Vector2.zero); OutputPointerEventValue(Vector2.zero);
if(handleRect) if(handleRect)
{ {
SetObjectActiveState(handleRect.gameObject, false); SetObjectActiveState(handleRect.gameObject, false);
UpdateHandleRectPosition(Vector2.zero); UpdateHandleRectPosition(Vector2.zero);
} }
} }
void OutputPointerEventValue(Vector2 pointerPosition) void OutputPointerEventValue(Vector2 pointerPosition)
{ {
touchZoneOutputEvent.Invoke(pointerPosition); touchZoneOutputEvent.Invoke(pointerPosition);
} }
void UpdateHandleRectPosition(Vector2 newPosition) void UpdateHandleRectPosition(Vector2 newPosition)
{ {
handleRect.anchoredPosition = newPosition; handleRect.anchoredPosition = newPosition;
} }
void SetObjectActiveState(GameObject targetObject, bool newState) void SetObjectActiveState(GameObject targetObject, bool newState)
{ {
targetObject.SetActive(newState); targetObject.SetActive(newState);
} }
Vector2 GetDeltaBetweenPositions(Vector2 firstPosition, Vector2 secondPosition) Vector2 GetDeltaBetweenPositions(Vector2 firstPosition, Vector2 secondPosition)
{ {
return secondPosition - firstPosition; return secondPosition - firstPosition;
} }
Vector2 ClampValuesToMagnitude(Vector2 position) Vector2 ClampValuesToMagnitude(Vector2 position)
{ {
return Vector2.ClampMagnitude(position, 1); return Vector2.ClampMagnitude(position, 1);
} }
Vector2 ApplyInversionFilter(Vector2 position) Vector2 ApplyInversionFilter(Vector2 position)
{ {
if(invertXOutputValue) if(invertXOutputValue)
{ {
position.x = InvertValue(position.x); position.x = InvertValue(position.x);
} }
if(invertYOutputValue) if(invertYOutputValue)
{ {
position.y = InvertValue(position.y); position.y = InvertValue(position.y);
} }
return position; return position;
} }
float InvertValue(float value) float InvertValue(float value)
{ {
return -value; return -value;
} }
} }
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: e7fdf9603bb47074a9b04a3eb60ffcd8 guid: e7fdf9603bb47074a9b04a3eb60ffcd8
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 54b90d7f60b179e4e9909cd127aa060d guid: 54b90d7f60b179e4e9909cd127aa060d
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 135db69c43c47ee4e97c7c6b13621056 guid: 135db69c43c47ee4e97c7c6b13621056
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 478ef75e2d9612043ad9e092df040fea guid: 478ef75e2d9612043ad9e092df040fea
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 8a0e91532ce93274fb01919ee0dda264 guid: 8a0e91532ce93274fb01919ee0dda264
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: f99c02f4392c29d4dad06bad32b0bfb1 guid: f99c02f4392c29d4dad06bad32b0bfb1
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: f99957d857b6314489a45d0556423fd4 guid: f99957d857b6314489a45d0556423fd4
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 5f5880d19cc8d48c688d78a6c6d05ec8 guid: 5f5880d19cc8d48c688d78a6c6d05ec8
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,82 +1,82 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1233149941 &-7586714597313585321 --- !u!1233149941 &-7586714597313585321
AudioContainerElement: AudioContainerElement:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Concrete_05_{-7586714597313585321} m_Name: Concrete_05_{-7586714597313585321}
m_AudioClip: {fileID: 8300000, guid: 1834ec69586af4bccb2b0595d9065d3e, type: 3} m_AudioClip: {fileID: 8300000, guid: 1834ec69586af4bccb2b0595d9065d3e, type: 3}
m_Volume: 0 m_Volume: 0
m_Enabled: 1 m_Enabled: 1
--- !u!1233149941 &-6025000786359728421 --- !u!1233149941 &-6025000786359728421
AudioContainerElement: AudioContainerElement:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Concrete_04_{-6025000786359728421} m_Name: Concrete_04_{-6025000786359728421}
m_AudioClip: {fileID: 8300000, guid: f6c46c2ca4f624aacabaa487bb4ed6e4, type: 3} m_AudioClip: {fileID: 8300000, guid: f6c46c2ca4f624aacabaa487bb4ed6e4, type: 3}
m_Volume: 0 m_Volume: 0
m_Enabled: 1 m_Enabled: 1
--- !u!1233149941 &-4330494011686235080 --- !u!1233149941 &-4330494011686235080
AudioContainerElement: AudioContainerElement:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Concrete_02_{-4330494011686235080} m_Name: Concrete_02_{-4330494011686235080}
m_AudioClip: {fileID: 8300000, guid: becc44e5c724942ff9db71e50e0cf47f, type: 3} m_AudioClip: {fileID: 8300000, guid: becc44e5c724942ff9db71e50e0cf47f, type: 3}
m_Volume: 0 m_Volume: 0
m_Enabled: 1 m_Enabled: 1
--- !u!1233149941 &-250991000991268778 --- !u!1233149941 &-250991000991268778
AudioContainerElement: AudioContainerElement:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Concrete_01_{-250991000991268778} m_Name: Concrete_01_{-250991000991268778}
m_AudioClip: {fileID: 8300000, guid: 3515527f48a854c658f6654d89c03d44, type: 3} m_AudioClip: {fileID: 8300000, guid: 3515527f48a854c658f6654d89c03d44, type: 3}
m_Volume: 0 m_Volume: 0
m_Enabled: 1 m_Enabled: 1
--- !u!1307931743 &6418180475301049370 --- !u!1307931743 &6418180475301049370
AudioRandomContainer: AudioRandomContainer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Footstep_Concrete m_Name: Footstep_Concrete
m_Volume: -10 m_Volume: -10
m_Pitch: 500 m_Pitch: 500
m_AutomaticTriggerTime: 1 m_AutomaticTriggerTime: 1
m_LoopCount: 1 m_LoopCount: 1
m_VolumeRandomizationRange: {x: -2, y: 2} m_VolumeRandomizationRange: {x: -2, y: 2}
m_PitchRandomizationRange: {x: 0, y: 500} m_PitchRandomizationRange: {x: 0, y: 500}
m_AutomaticTriggerTimeRandomizationRange: {x: -0.5, y: 0.5} m_AutomaticTriggerTimeRandomizationRange: {x: -0.5, y: 0.5}
m_LoopCountRandomizationRange: {x: 0, y: 0} m_LoopCountRandomizationRange: {x: 0, y: 0}
m_Elements: m_Elements:
- {fileID: -250991000991268778} - {fileID: -250991000991268778}
- {fileID: -4330494011686235080} - {fileID: -4330494011686235080}
- {fileID: 7655602436142396064} - {fileID: 7655602436142396064}
- {fileID: -6025000786359728421} - {fileID: -6025000786359728421}
- {fileID: -7586714597313585321} - {fileID: -7586714597313585321}
m_AvoidRepeatingLast: 0 m_AvoidRepeatingLast: 0
m_PlaybackMode: 2 m_PlaybackMode: 2
m_TriggerMode: 0 m_TriggerMode: 0
m_AutomaticTriggerMode: 0 m_AutomaticTriggerMode: 0
m_LoopMode: 0 m_LoopMode: 0
m_VolumeRandomizationEnabled: 1 m_VolumeRandomizationEnabled: 1
m_PitchRandomizationEnabled: 1 m_PitchRandomizationEnabled: 1
m_AutomaticTriggerTimeRandomizationEnabled: 1 m_AutomaticTriggerTimeRandomizationEnabled: 1
m_LoopCountRandomizationEnabled: 0 m_LoopCountRandomizationEnabled: 0
--- !u!1233149941 &7655602436142396064 --- !u!1233149941 &7655602436142396064
AudioContainerElement: AudioContainerElement:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Concrete_03_{7655602436142396064} m_Name: Concrete_03_{7655602436142396064}
m_AudioClip: {fileID: 8300000, guid: 2751f72ca7b6249dabb2f404db45c29f, type: 3} m_AudioClip: {fileID: 8300000, guid: 2751f72ca7b6249dabb2f404db45c29f, type: 3}
m_Volume: 0 m_Volume: 0
m_Enabled: 1 m_Enabled: 1
@@ -1,27 +1,27 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1307931743 &6418180475301049370 --- !u!1307931743 &6418180475301049370
AudioRandomContainer: AudioRandomContainer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Player_Footstep m_Name: Player_Footstep
m_Volume: 0 m_Volume: 0
m_Pitch: 0 m_Pitch: 0
m_AutomaticTriggerTime: 0 m_AutomaticTriggerTime: 0
m_LoopCount: 1 m_LoopCount: 1
m_VolumeRandomizationRange: {x: 0, y: 0} m_VolumeRandomizationRange: {x: 0, y: 0}
m_PitchRandomizationRange: {x: 0, y: 0} m_PitchRandomizationRange: {x: 0, y: 0}
m_AutomaticTriggerTimeRandomizationRange: {x: 0, y: 0} m_AutomaticTriggerTimeRandomizationRange: {x: 0, y: 0}
m_LoopCountRandomizationRange: {x: 0, y: 0} m_LoopCountRandomizationRange: {x: 0, y: 0}
m_Elements: [] m_Elements: []
m_AvoidRepeatingLast: 0 m_AvoidRepeatingLast: 0
m_PlaybackMode: 0 m_PlaybackMode: 0
m_TriggerMode: 1 m_TriggerMode: 1
m_AutomaticTriggerMode: 1 m_AutomaticTriggerMode: 1
m_LoopMode: 2 m_LoopMode: 2
m_VolumeRandomizationEnabled: 0 m_VolumeRandomizationEnabled: 0
m_PitchRandomizationEnabled: 0 m_PitchRandomizationEnabled: 0
m_AutomaticTriggerTimeRandomizationEnabled: 0 m_AutomaticTriggerTimeRandomizationEnabled: 0
m_LoopCountRandomizationEnabled: 0 m_LoopCountRandomizationEnabled: 0
@@ -1,60 +1,60 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1233149941 &-3038339863073270411 --- !u!1233149941 &-3038339863073270411
AudioContainerElement: AudioContainerElement:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Player_Land_02_{-3038339863073270411} m_Name: Player_Land_02_{-3038339863073270411}
m_AudioClip: {fileID: 8300000, guid: c37138872f61b4418be9e8c1084790ac, type: 3} m_AudioClip: {fileID: 8300000, guid: c37138872f61b4418be9e8c1084790ac, type: 3}
m_Volume: 0 m_Volume: 0
m_Enabled: 1 m_Enabled: 1
--- !u!1233149941 &-2236532293860724103 --- !u!1233149941 &-2236532293860724103
AudioContainerElement: AudioContainerElement:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Player_Land_01_{-2236532293860724103} m_Name: Player_Land_01_{-2236532293860724103}
m_AudioClip: {fileID: 8300000, guid: b13fd8dee3cf44c40859bf6c987bf68c, type: 3} m_AudioClip: {fileID: 8300000, guid: b13fd8dee3cf44c40859bf6c987bf68c, type: 3}
m_Volume: 0 m_Volume: 0
m_Enabled: 1 m_Enabled: 1
--- !u!1233149941 &3241090870461451841 --- !u!1233149941 &3241090870461451841
AudioContainerElement: AudioContainerElement:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Player_Land_03_{3241090870461451841} m_Name: Player_Land_03_{3241090870461451841}
m_AudioClip: {fileID: 8300000, guid: a3da1afec2ee3465db49602a61ef0ec7, type: 3} m_AudioClip: {fileID: 8300000, guid: a3da1afec2ee3465db49602a61ef0ec7, type: 3}
m_Volume: 0 m_Volume: 0
m_Enabled: 1 m_Enabled: 1
--- !u!1307931743 &6418180475301049370 --- !u!1307931743 &6418180475301049370
AudioRandomContainer: AudioRandomContainer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Player_Land m_Name: Player_Land
m_Volume: 0 m_Volume: 0
m_Pitch: 200 m_Pitch: 200
m_AutomaticTriggerTime: 0.2 m_AutomaticTriggerTime: 0.2
m_LoopCount: 2 m_LoopCount: 2
m_VolumeRandomizationRange: {x: -5, y: 0} m_VolumeRandomizationRange: {x: -5, y: 0}
m_PitchRandomizationRange: {x: 0, y: 500} m_PitchRandomizationRange: {x: 0, y: 500}
m_AutomaticTriggerTimeRandomizationRange: {x: 0, y: 0} m_AutomaticTriggerTimeRandomizationRange: {x: 0, y: 0}
m_LoopCountRandomizationRange: {x: 0, y: 0} m_LoopCountRandomizationRange: {x: 0, y: 0}
m_Elements: m_Elements:
- {fileID: -2236532293860724103} - {fileID: -2236532293860724103}
- {fileID: -3038339863073270411} - {fileID: -3038339863073270411}
- {fileID: 3241090870461451841} - {fileID: 3241090870461451841}
m_AvoidRepeatingLast: 2 m_AvoidRepeatingLast: 2
m_PlaybackMode: 2 m_PlaybackMode: 2
m_TriggerMode: 0 m_TriggerMode: 0
m_AutomaticTriggerMode: 0 m_AutomaticTriggerMode: 0
m_LoopMode: 1 m_LoopMode: 1
m_VolumeRandomizationEnabled: 1 m_VolumeRandomizationEnabled: 1
m_PitchRandomizationEnabled: 1 m_PitchRandomizationEnabled: 1
m_AutomaticTriggerTimeRandomizationEnabled: 0 m_AutomaticTriggerTimeRandomizationEnabled: 0
m_LoopCountRandomizationEnabled: 0 m_LoopCountRandomizationEnabled: 0
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 940251fa621540241ab6a33c87cc8b7e guid: 940251fa621540241ab6a33c87cc8b7e
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 84b4ab346fc32d445b7207cb1884cf42 guid: 84b4ab346fc32d445b7207cb1884cf42
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,120 +1,120 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &8944336655422409498 --- !u!1 &8944336655422409498
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 8944336655422409503} - component: {fileID: 8944336655422409503}
- component: {fileID: 8944336655422409496} - component: {fileID: 8944336655422409496}
- component: {fileID: 8944336655422409497} - component: {fileID: 8944336655422409497}
- component: {fileID: 9078993845375825671} - component: {fileID: 9078993845375825671}
m_Layer: 0 m_Layer: 0
m_Name: MainCamera m_Name: MainCamera
m_TagString: MainCamera m_TagString: MainCamera
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &8944336655422409503 --- !u!4 &8944336655422409503
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8944336655422409498} m_GameObject: {fileID: 8944336655422409498}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.5, y: 1.375, z: -4} m_LocalPosition: {x: 0.5, y: 1.375, z: -4}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!20 &8944336655422409496 --- !u!20 &8944336655422409496
Camera: Camera:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8944336655422409498} m_GameObject: {fileID: 8944336655422409498}
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_ClearFlags: 1 m_ClearFlags: 1
m_BackGroundColor: {r: 0.972549, g: 0.95686275, b: 0.92941177, a: 0} m_BackGroundColor: {r: 0.972549, g: 0.95686275, b: 0.92941177, a: 0}
m_projectionMatrixMode: 1 m_projectionMatrixMode: 1
m_GateFitMode: 2 m_GateFitMode: 2
m_FOVAxisMode: 0 m_FOVAxisMode: 0
m_SensorSize: {x: 36, y: 24} m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0} m_LensShift: {x: 0, y: 0}
m_FocalLength: 50 m_FocalLength: 50
m_NormalizedViewPortRect: m_NormalizedViewPortRect:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 0 y: 0
width: 1 width: 1
height: 1 height: 1
near clip plane: 0.2 near clip plane: 0.2
far clip plane: 5000 far clip plane: 5000
field of view: 40 field of view: 40
orthographic: 0 orthographic: 0
orthographic size: 5 orthographic size: 5
m_Depth: -1 m_Depth: -1
m_CullingMask: m_CullingMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 4294967295 m_Bits: 4294967295
m_RenderingPath: -1 m_RenderingPath: -1
m_TargetTexture: {fileID: 0} m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0 m_TargetDisplay: 0
m_TargetEye: 3 m_TargetEye: 3
m_HDR: 1 m_HDR: 1
m_AllowMSAA: 1 m_AllowMSAA: 1
m_AllowDynamicResolution: 0 m_AllowDynamicResolution: 0
m_ForceIntoRT: 0 m_ForceIntoRT: 0
m_OcclusionCulling: 1 m_OcclusionCulling: 1
m_StereoConvergence: 10 m_StereoConvergence: 10
m_StereoSeparation: 0.022 m_StereoSeparation: 0.022
--- !u!81 &8944336655422409497 --- !u!81 &8944336655422409497
AudioListener: AudioListener:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8944336655422409498} m_GameObject: {fileID: 8944336655422409498}
m_Enabled: 1 m_Enabled: 1
--- !u!114 &9078993845375825671 --- !u!114 &9078993845375825671
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8944336655422409498} m_GameObject: {fileID: 8944336655422409498}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 72ece51f2901e7445ab60da3685d6b5f, type: 3} m_Script: {fileID: 11500000, guid: 72ece51f2901e7445ab60da3685d6b5f, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_ShowDebugText: 0 m_ShowDebugText: 0
m_ShowCameraFrustum: 1 m_ShowCameraFrustum: 1
m_IgnoreTimeScale: 0 m_IgnoreTimeScale: 0
m_WorldUpOverride: {fileID: 0} m_WorldUpOverride: {fileID: 0}
m_UpdateMethod: 2 m_UpdateMethod: 2
m_BlendUpdateMethod: 1 m_BlendUpdateMethod: 1
m_DefaultBlend: m_DefaultBlend:
m_Style: 1 m_Style: 1
m_Time: 2 m_Time: 2
m_CustomCurve: m_CustomCurve:
serializedVersion: 2 serializedVersion: 2
m_Curve: [] m_Curve: []
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
m_CustomBlends: {fileID: 0} m_CustomBlends: {fileID: 0}
m_CameraCutEvent: m_CameraCutEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_CameraActivatedEvent: m_CameraActivatedEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
@@ -1,492 +1,492 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &8047161636021232021 --- !u!1 &8047161636021232021
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 2119775930974504096} - component: {fileID: 2119775930974504096}
m_Layer: 0 m_Layer: 0
m_Name: NestedParentCapsule_Unpack m_Name: NestedParentCapsule_Unpack
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &2119775930974504096 --- !u!4 &2119775930974504096
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8047161636021232021} m_GameObject: {fileID: 8047161636021232021}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.92999995, z: 0} m_LocalPosition: {x: 0, y: 0.92999995, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 5542111180780342647} - {fileID: 5542111180780342647}
- {fileID: 3203261902030644824} - {fileID: 3203261902030644824}
- {fileID: 6001220780674294383} - {fileID: 6001220780674294383}
- {fileID: 4072154296131656415} - {fileID: 4072154296131656415}
- {fileID: 6858111992258843779} - {fileID: 6858111992258843779}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &3515378425540693942 --- !u!1001 &3515378425540693942
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Modification: m_Modification:
m_TransformParent: {fileID: 2119775930974504096} m_TransformParent: {fileID: 2119775930974504096}
m_Modifications: m_Modifications:
- target: {fileID: 1992104595683069851, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 1992104595683069851, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_Name propertyPath: m_Name
value: UI_EventSystem value: UI_EventSystem
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 4 value: 4
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalScale.x propertyPath: m_LocalScale.x
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalScale.y propertyPath: m_LocalScale.y
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalScale.z propertyPath: m_LocalScale.z
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: -0.92999995 value: -0.92999995
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalRotation.w propertyPath: m_LocalRotation.w
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalRotation.x propertyPath: m_LocalRotation.x
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalRotation.z propertyPath: m_LocalRotation.z
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.x propertyPath: m_LocalEulerAnglesHint.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.y propertyPath: m_LocalEulerAnglesHint.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, - target: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f0271df749728104eac22c3d897fd8ce, type: 3} m_SourcePrefab: {fileID: 100100000, guid: f0271df749728104eac22c3d897fd8ce, type: 3}
--- !u!4 &6858111992258843779 stripped --- !u!4 &6858111992258843779 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce, m_CorrespondingSourceObject: {fileID: 8063073397250431797, guid: f0271df749728104eac22c3d897fd8ce,
type: 3} type: 3}
m_PrefabInstance: {fileID: 3515378425540693942} m_PrefabInstance: {fileID: 3515378425540693942}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1001 &3515378427008540405 --- !u!1001 &3515378427008540405
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Modification: m_Modification:
m_TransformParent: {fileID: 2119775930974504096} m_TransformParent: {fileID: 2119775930974504096}
m_Modifications: m_Modifications:
- target: {fileID: 1663187150, guid: 2f7f3dde7ae722a4aafffe20691ad702, type: 3} - target: {fileID: 1663187150, guid: 2f7f3dde7ae722a4aafffe20691ad702, type: 3}
propertyPath: thirdPersonInputs propertyPath: thirdPersonInputs
value: value:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_Pivot.x propertyPath: m_Pivot.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_Pivot.y propertyPath: m_Pivot.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 3 value: 3
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_AnchorMax.x propertyPath: m_AnchorMax.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_AnchorMin.x propertyPath: m_AnchorMin.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_AnchorMin.y propertyPath: m_AnchorMin.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_SizeDelta.y propertyPath: m_SizeDelta.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalRotation.w propertyPath: m_LocalRotation.w
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalRotation.x propertyPath: m_LocalRotation.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalRotation.z propertyPath: m_LocalRotation.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.x propertyPath: m_LocalEulerAnglesHint.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.y propertyPath: m_LocalEulerAnglesHint.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 6751388636123340836, guid: 2f7f3dde7ae722a4aafffe20691ad702, - target: {fileID: 6751388636123340836, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
propertyPath: m_Name propertyPath: m_Name
value: UI_Canvas_StarterAssetsInputs_Joysticks value: UI_Canvas_StarterAssetsInputs_Joysticks
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2f7f3dde7ae722a4aafffe20691ad702, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 2f7f3dde7ae722a4aafffe20691ad702, type: 3}
--- !u!224 &4072154296131656415 stripped --- !u!224 &4072154296131656415 stripped
RectTransform: RectTransform:
m_CorrespondingSourceObject: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702, m_CorrespondingSourceObject: {fileID: 597308369130767402, guid: 2f7f3dde7ae722a4aafffe20691ad702,
type: 3} type: 3}
m_PrefabInstance: {fileID: 3515378427008540405} m_PrefabInstance: {fileID: 3515378427008540405}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1001 &3515378427225392744 --- !u!1001 &3515378427225392744
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Modification: m_Modification:
m_TransformParent: {fileID: 2119775930974504096} m_TransformParent: {fileID: 2119775930974504096}
m_Modifications: m_Modifications:
- target: {fileID: 8944336655422409498, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409498, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_Name propertyPath: m_Name
value: MainCamera value: MainCamera
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0.20000005 value: 0.20000005
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 0.44500005 value: 0.44500005
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: -4 value: -4
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalRotation.w propertyPath: m_LocalRotation.w
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalRotation.x propertyPath: m_LocalRotation.x
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalRotation.z propertyPath: m_LocalRotation.z
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.x propertyPath: m_LocalEulerAnglesHint.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.y propertyPath: m_LocalEulerAnglesHint.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, - target: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f6d148d888ffbf54b9afe9936dfaec1f, type: 3} m_SourcePrefab: {fileID: 100100000, guid: f6d148d888ffbf54b9afe9936dfaec1f, type: 3}
--- !u!4 &5542111180780342647 stripped --- !u!4 &5542111180780342647 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f, m_CorrespondingSourceObject: {fileID: 8944336655422409503, guid: f6d148d888ffbf54b9afe9936dfaec1f,
type: 3} type: 3}
m_PrefabInstance: {fileID: 3515378427225392744} m_PrefabInstance: {fileID: 3515378427225392744}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1001 &3515378427639998752 --- !u!1001 &3515378427639998752
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Modification: m_Modification:
m_TransformParent: {fileID: 2119775930974504096} m_TransformParent: {fileID: 2119775930974504096}
m_Modifications: m_Modifications:
- target: {fileID: 2070925441746177671, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177671, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_Name propertyPath: m_Name
value: PlayerFollowCamera value: PlayerFollowCamera
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0.20000005 value: 0.20000005
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 0.44500005 value: 0.44500005
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: -4 value: -4
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalRotation.w propertyPath: m_LocalRotation.w
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalRotation.x propertyPath: m_LocalRotation.x
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalRotation.z propertyPath: m_LocalRotation.z
value: -0 value: -0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.x propertyPath: m_LocalEulerAnglesHint.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.y propertyPath: m_LocalEulerAnglesHint.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2070925441746177913, guid: a1a802ecaf6775746bb2a929fb554ad8, - target: {fileID: 2070925441746177913, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
propertyPath: m_Follow propertyPath: m_Follow
value: value:
objectReference: {fileID: 1654322001227874697} objectReference: {fileID: 1654322001227874697}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: a1a802ecaf6775746bb2a929fb554ad8, type: 3} m_SourcePrefab: {fileID: 100100000, guid: a1a802ecaf6775746bb2a929fb554ad8, type: 3}
--- !u!4 &3203261902030644824 stripped --- !u!4 &3203261902030644824 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, m_CorrespondingSourceObject: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8,
type: 3} type: 3}
m_PrefabInstance: {fileID: 3515378427639998752} m_PrefabInstance: {fileID: 3515378427639998752}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1001 &4807976689997140263 --- !u!1001 &4807976689997140263
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Modification: m_Modification:
m_TransformParent: {fileID: 2119775930974504096} m_TransformParent: {fileID: 2119775930974504096}
m_Modifications: m_Modifications:
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 2 value: 2
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: -0.92999995 value: -0.92999995
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalRotation.w propertyPath: m_LocalRotation.w
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalRotation.x propertyPath: m_LocalRotation.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalRotation.z propertyPath: m_LocalRotation.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.x propertyPath: m_LocalEulerAnglesHint.x
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.y propertyPath: m_LocalEulerAnglesHint.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1925873226565265906, guid: 2553cec8fdb3eb643bbe9f2ec880c472, - target: {fileID: 1925873226565265906, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
propertyPath: m_Name propertyPath: m_Name
value: PlayerCapsule value: PlayerCapsule
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2553cec8fdb3eb643bbe9f2ec880c472, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 2553cec8fdb3eb643bbe9f2ec880c472, type: 3}
--- !u!4 &6001220780674294383 stripped --- !u!4 &6001220780674294383 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, m_CorrespondingSourceObject: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
m_PrefabInstance: {fileID: 4807976689997140263} m_PrefabInstance: {fileID: 4807976689997140263}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!4 &1654322001227874697 stripped --- !u!4 &1654322001227874697 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 6074239116653777070, guid: 2553cec8fdb3eb643bbe9f2ec880c472, m_CorrespondingSourceObject: {fileID: 6074239116653777070, guid: 2553cec8fdb3eb643bbe9f2ec880c472,
type: 3} type: 3}
m_PrefabInstance: {fileID: 4807976689997140263} m_PrefabInstance: {fileID: 4807976689997140263}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
@@ -1,349 +1,349 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &29811323 --- !u!1 &29811323
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 29811324} - component: {fileID: 29811324}
- component: {fileID: 29811327} - component: {fileID: 29811327}
- component: {fileID: 29811326} - component: {fileID: 29811326}
- component: {fileID: 29811325} - component: {fileID: 29811325}
m_Layer: 8 m_Layer: 8
m_Name: Capsule m_Name: Capsule
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &29811324 --- !u!4 &29811324
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29811323} m_GameObject: {fileID: 29811323}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.9, z: 0} m_LocalPosition: {x: 0, y: 0.9, z: 0}
m_LocalScale: {x: 0.75, y: 0.9, z: 0.75} m_LocalScale: {x: 0.75, y: 0.9, z: 0.75}
m_Children: [] m_Children: []
m_Father: {fileID: 1293029876712600392} m_Father: {fileID: 1293029876712600392}
m_RootOrder: 1 m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &29811327 --- !u!33 &29811327
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29811323} m_GameObject: {fileID: 29811323}
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &29811326 --- !u!23 &29811326
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29811323} m_GameObject: {fileID: 29811323}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
m_RayTracingMode: 2 m_RayTracingMode: 2
m_RayTraceProcedural: 0 m_RayTraceProcedural: 0
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: 6b911390c5825014e8377183a7837d3f, type: 2} - {fileID: 2100000, guid: 6b911390c5825014e8377183a7837d3f, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
m_StaticBatchRoot: {fileID: 0} m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0} m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1 m_ScaleInLightmap: 1
m_ReceiveGI: 1 m_ReceiveGI: 1
m_PreserveUVs: 0 m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0 m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0 m_ImportantGI: 0
m_StitchLightmapSeams: 1 m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3 m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4 m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5 m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!136 &29811325 --- !u!136 &29811325
CapsuleCollider: CapsuleCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29811323} m_GameObject: {fileID: 29811323}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
m_Radius: 0.5 m_Radius: 0.5
m_Height: 2 m_Height: 2
m_Direction: 1 m_Direction: 1
m_Center: {x: 0, y: 0, z: 0} m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &1925873226565265906 --- !u!1 &1925873226565265906
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 1293029876712600392} - component: {fileID: 1293029876712600392}
- component: {fileID: 1925873226565265912} - component: {fileID: 1925873226565265912}
- component: {fileID: 1925873226565265913} - component: {fileID: 1925873226565265913}
- component: {fileID: 7292828519420468114} - component: {fileID: 7292828519420468114}
- component: {fileID: 1925873226565265918} - component: {fileID: 1925873226565265918}
- component: {fileID: 2468714030164847400} - component: {fileID: 2468714030164847400}
m_Layer: 8 m_Layer: 8
m_Name: PlayerCapsule m_Name: PlayerCapsule
m_TagString: Player m_TagString: Player
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &1293029876712600392 --- !u!4 &1293029876712600392
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1925873226565265906} m_GameObject: {fileID: 1925873226565265906}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 6074239116653777070} - {fileID: 6074239116653777070}
- {fileID: 29811324} - {fileID: 29811324}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!143 &1925873226565265912 --- !u!143 &1925873226565265912
CharacterController: CharacterController:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1925873226565265906} m_GameObject: {fileID: 1925873226565265906}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Height: 1.8 m_Height: 1.8
m_Radius: 0.4 m_Radius: 0.4
m_SlopeLimit: 45 m_SlopeLimit: 45
m_StepOffset: 0.25 m_StepOffset: 0.25
m_SkinWidth: 0.02 m_SkinWidth: 0.02
m_MinMoveDistance: 0 m_MinMoveDistance: 0
m_Center: {x: 0, y: 0.93, z: 0} m_Center: {x: 0, y: 0.93, z: 0}
--- !u!114 &1925873226565265913 --- !u!114 &1925873226565265913
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1925873226565265906} m_GameObject: {fileID: 1925873226565265906}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26e54e5a728a9234ab24fcf1460ed8a2, type: 3} m_Script: {fileID: 11500000, guid: 26e54e5a728a9234ab24fcf1460ed8a2, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
MoveSpeed: 4 MoveSpeed: 4
SprintSpeed: 6 SprintSpeed: 6
RotationSmoothTime: 0.12 RotationSmoothTime: 0.12
SpeedChangeRate: 10 SpeedChangeRate: 10
JumpHeight: 1.2 JumpHeight: 1.2
Gravity: -15 Gravity: -15
JumpTimeout: 0.5 JumpTimeout: 0.5
FallTimeout: 0.15 FallTimeout: 0.15
Grounded: 1 Grounded: 1
GroundedOffset: -0.14 GroundedOffset: -0.14
GroundedRadius: 0.28 GroundedRadius: 0.28
GroundLayers: GroundLayers:
serializedVersion: 2 serializedVersion: 2
m_Bits: 513 m_Bits: 513
CinemachineCameraTarget: {fileID: 6074239116653777065} CinemachineCameraTarget: {fileID: 6074239116653777065}
TopClamp: 70 TopClamp: 70
BottomClamp: -30 BottomClamp: -30
CameraAngleOverride: 0 CameraAngleOverride: 0
LockCameraPosition: 0 LockCameraPosition: 0
--- !u!114 &7292828519420468114 --- !u!114 &7292828519420468114
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1925873226565265906} m_GameObject: {fileID: 1925873226565265906}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 909d917d73a63f940ac158d02e936645, type: 3} m_Script: {fileID: 11500000, guid: 909d917d73a63f940ac158d02e936645, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
pushLayers: pushLayers:
serializedVersion: 2 serializedVersion: 2
m_Bits: 0 m_Bits: 0
canPush: 0 canPush: 0
strength: 1.1 strength: 1.1
--- !u!114 &1925873226565265918 --- !u!114 &1925873226565265918
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1925873226565265906} m_GameObject: {fileID: 1925873226565265906}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 62899f850307741f2a39c98a8b639597, type: 3} m_Script: {fileID: 11500000, guid: 62899f850307741f2a39c98a8b639597, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Actions: {fileID: -944628639613478452, guid: 4419d82f33d36e848b3ed5af4c8da37e, m_Actions: {fileID: -944628639613478452, guid: 4419d82f33d36e848b3ed5af4c8da37e,
type: 3} type: 3}
m_NotificationBehavior: 0 m_NotificationBehavior: 0
m_UIInputModule: {fileID: 0} m_UIInputModule: {fileID: 0}
m_DeviceLostEvent: m_DeviceLostEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_DeviceRegainedEvent: m_DeviceRegainedEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_ControlsChangedEvent: m_ControlsChangedEvent:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_ActionEvents: m_ActionEvents:
- m_PersistentCalls: - m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 1925873226565265913} - m_Target: {fileID: 1925873226565265913}
m_TargetAssemblyTypeName: m_TargetAssemblyTypeName:
m_MethodName: InputMove m_MethodName: InputMove
m_Mode: 0 m_Mode: 0
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0 m_IntArgument: 0
m_FloatArgument: 0 m_FloatArgument: 0
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
m_ActionId: 6bc1aaf4-b110-4ff7-891e-5b9fe6f32c4d m_ActionId: 6bc1aaf4-b110-4ff7-891e-5b9fe6f32c4d
m_ActionName: Player/Move[/Keyboard/w,/Keyboard/s,/Keyboard/a,/Keyboard/d,/Keyboard/upArrow,/Keyboard/downArrow,/Keyboard/leftArrow,/Keyboard/rightArrow,/XInputControllerWindows/leftStick] m_ActionName: Player/Move[/Keyboard/w,/Keyboard/s,/Keyboard/a,/Keyboard/d,/Keyboard/upArrow,/Keyboard/downArrow,/Keyboard/leftArrow,/Keyboard/rightArrow,/XInputControllerWindows/leftStick]
- m_PersistentCalls: - m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 1925873226565265913} - m_Target: {fileID: 1925873226565265913}
m_TargetAssemblyTypeName: m_TargetAssemblyTypeName:
m_MethodName: InputLook m_MethodName: InputLook
m_Mode: 0 m_Mode: 0
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0 m_IntArgument: 0
m_FloatArgument: 0 m_FloatArgument: 0
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
m_ActionId: 2690c379-f54d-45be-a724-414123833eb4 m_ActionId: 2690c379-f54d-45be-a724-414123833eb4
m_ActionName: Player/Look[/Mouse/delta,/XInputControllerWindows/rightStick] m_ActionName: Player/Look[/Mouse/delta,/XInputControllerWindows/rightStick]
- m_PersistentCalls: - m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 1925873226565265913} - m_Target: {fileID: 1925873226565265913}
m_TargetAssemblyTypeName: m_TargetAssemblyTypeName:
m_MethodName: InputJump m_MethodName: InputJump
m_Mode: 0 m_Mode: 0
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0 m_IntArgument: 0
m_FloatArgument: 0 m_FloatArgument: 0
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
m_ActionId: 8c4abdf8-4099-493a-aa1a-129acec7c3df m_ActionId: 8c4abdf8-4099-493a-aa1a-129acec7c3df
m_ActionName: Player/Jump[/Keyboard/space,/XInputControllerWindows/buttonSouth] m_ActionName: Player/Jump[/Keyboard/space,/XInputControllerWindows/buttonSouth]
- m_PersistentCalls: - m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 1925873226565265913} - m_Target: {fileID: 1925873226565265913}
m_TargetAssemblyTypeName: m_TargetAssemblyTypeName:
m_MethodName: InputSprint m_MethodName: InputSprint
m_Mode: 0 m_Mode: 0
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0 m_IntArgument: 0
m_FloatArgument: 0 m_FloatArgument: 0
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
m_ActionId: 980e881e-182c-404c-8cbf-3d09fdb48fef m_ActionId: 980e881e-182c-404c-8cbf-3d09fdb48fef
m_ActionName: Player/Sprint[/Keyboard/leftShift,/XInputControllerWindows/leftTrigger] m_ActionName: Player/Sprint[/Keyboard/leftShift,/XInputControllerWindows/leftTrigger]
- m_PersistentCalls: - m_PersistentCalls:
m_Calls: [] m_Calls: []
m_ActionId: e4ce1614-c754-48c1-9103-33130441661f m_ActionId: e4ce1614-c754-48c1-9103-33130441661f
m_ActionName: UI/New action m_ActionName: UI/New action
m_NeverAutoSwitchControlSchemes: 0 m_NeverAutoSwitchControlSchemes: 0
m_DefaultControlScheme: m_DefaultControlScheme:
m_DefaultActionMap: Player m_DefaultActionMap: Player
m_SplitScreenIndex: -1 m_SplitScreenIndex: -1
m_Camera: {fileID: 0} m_Camera: {fileID: 0}
--- !u!114 &2468714030164847400 --- !u!114 &2468714030164847400
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1925873226565265906} m_GameObject: {fileID: 1925873226565265906}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e087ecce43ebbff45a1b360637807d93, type: 3} m_Script: {fileID: 11500000, guid: e087ecce43ebbff45a1b360637807d93, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
move: {x: 0, y: 0} move: {x: 0, y: 0}
look: {x: 0, y: 0} look: {x: 0, y: 0}
jump: 0 jump: 0
sprint: 0 sprint: 0
analogMovement: 0 analogMovement: 0
cursorLocked: 1 cursorLocked: 1
cursorInputForLook: 1 cursorInputForLook: 1
--- !u!1 &6074239116653777065 --- !u!1 &6074239116653777065
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 6074239116653777070} - component: {fileID: 6074239116653777070}
m_Layer: 0 m_Layer: 0
m_Name: PlayerCameraRoot m_Name: PlayerCameraRoot
m_TagString: CinemachineTarget m_TagString: CinemachineTarget
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &6074239116653777070 --- !u!4 &6074239116653777070
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6074239116653777065} m_GameObject: {fileID: 6074239116653777065}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 1.375, z: 0} m_LocalPosition: {x: 0, y: 1.375, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 1293029876712600392} m_Father: {fileID: 1293029876712600392}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -1,153 +1,153 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &2070925441746177671 --- !u!1 &2070925441746177671
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 2070925441746177912} - component: {fileID: 2070925441746177912}
- component: {fileID: 2070925441746177913} - component: {fileID: 2070925441746177913}
m_Layer: 0 m_Layer: 0
m_Name: PlayerFollowCamera m_Name: PlayerFollowCamera
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &2070925441746177912 --- !u!4 &2070925441746177912
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070925441746177671} m_GameObject: {fileID: 2070925441746177671}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.5, y: 1.375, z: -4} m_LocalPosition: {x: 0.5, y: 1.375, z: -4}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 2070925442191277756} - {fileID: 2070925442191277756}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2070925441746177913 --- !u!114 &2070925441746177913
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070925441746177671} m_GameObject: {fileID: 2070925441746177671}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 45e653bab7fb20e499bda25e1b646fea, type: 3} m_Script: {fileID: 11500000, guid: 45e653bab7fb20e499bda25e1b646fea, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_ExcludedPropertiesInInspector: m_ExcludedPropertiesInInspector:
- m_Script - m_Script
m_LockStageInInspector: m_LockStageInInspector:
m_StreamingVersion: 20170927 m_StreamingVersion: 20170927
m_Priority: 10 m_Priority: 10
m_StandbyUpdate: 2 m_StandbyUpdate: 2
m_LookAt: {fileID: 0} m_LookAt: {fileID: 0}
m_Follow: {fileID: 0} m_Follow: {fileID: 0}
m_Lens: m_Lens:
FieldOfView: 40 FieldOfView: 40
OrthographicSize: 10 OrthographicSize: 10
NearClipPlane: 0.2 NearClipPlane: 0.2
FarClipPlane: 500 FarClipPlane: 500
Dutch: 0 Dutch: 0
LensShift: {x: 0, y: 0} LensShift: {x: 0, y: 0}
m_Transitions: m_Transitions:
m_BlendHint: 0 m_BlendHint: 0
m_InheritPosition: 0 m_InheritPosition: 0
m_OnCameraLive: m_OnCameraLive:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_LegacyBlendHint: 0 m_LegacyBlendHint: 0
m_ComponentOwner: {fileID: 2070925442191277756} m_ComponentOwner: {fileID: 2070925442191277756}
--- !u!1 &2070925442191277755 --- !u!1 &2070925442191277755
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 2070925442191277756} - component: {fileID: 2070925442191277756}
- component: {fileID: 2070925442191277757} - component: {fileID: 2070925442191277757}
- component: {fileID: 2070925442191277753} - component: {fileID: 2070925442191277753}
- component: {fileID: 2070925442191277752} - component: {fileID: 2070925442191277752}
m_Layer: 0 m_Layer: 0
m_Name: cm m_Name: cm
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &2070925442191277756 --- !u!4 &2070925442191277756
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070925442191277755} m_GameObject: {fileID: 2070925442191277755}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 2070925441746177912} m_Father: {fileID: 2070925441746177912}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2070925442191277757 --- !u!114 &2070925442191277757
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070925442191277755} m_GameObject: {fileID: 2070925442191277755}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac0b09e7857660247b1477e93731de29, type: 3} m_Script: {fileID: 11500000, guid: ac0b09e7857660247b1477e93731de29, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
--- !u!114 &2070925442191277753 --- !u!114 &2070925442191277753
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070925442191277755} m_GameObject: {fileID: 2070925442191277755}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 68bb026fafb42b14791938953eaace77, type: 3} m_Script: {fileID: 11500000, guid: 68bb026fafb42b14791938953eaace77, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_NoiseProfile: {fileID: 11400000, guid: 46965f9cbaf525742a6da4c2172a99cd, type: 2} m_NoiseProfile: {fileID: 11400000, guid: 46965f9cbaf525742a6da4c2172a99cd, type: 2}
m_PivotOffset: {x: 0, y: 0, z: 1} m_PivotOffset: {x: 0, y: 0, z: 1}
m_AmplitudeGain: 0.5 m_AmplitudeGain: 0.5
m_FrequencyGain: 0.3 m_FrequencyGain: 0.3
mNoiseOffsets: {x: -451.37964, y: 684.7062, z: 648.0488} mNoiseOffsets: {x: -451.37964, y: 684.7062, z: 648.0488}
--- !u!114 &2070925442191277752 --- !u!114 &2070925442191277752
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070925442191277755} m_GameObject: {fileID: 2070925442191277755}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bd6043bde05a7fc4cba197d06915c1e3, type: 3} m_Script: {fileID: 11500000, guid: bd6043bde05a7fc4cba197d06915c1e3, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
Damping: {x: 0.1, y: 0.25, z: 0.3} Damping: {x: 0.1, y: 0.25, z: 0.3}
ShoulderOffset: {x: 1, y: 0, z: 0} ShoulderOffset: {x: 1, y: 0, z: 0}
VerticalArmLength: 0 VerticalArmLength: 0
CameraSide: 0.6 CameraSide: 0.6
CameraDistance: 4 CameraDistance: 4
CameraCollisionFilter: CameraCollisionFilter:
serializedVersion: 2 serializedVersion: 2
m_Bits: 1 m_Bits: 1
IgnoreTag: Player IgnoreTag: Player
CameraRadius: 0.15 CameraRadius: 0.15
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 89e5f9b6a0fcdae4e8ccb4b461925e8c guid: 89e5f9b6a0fcdae4e8ccb4b461925e8c
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 22db1f6f78cfb3440835ed6dee5f8e9e guid: 22db1f6f78cfb3440835ed6dee5f8e9e
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,35 +1,35 @@
using UnityEngine; using UnityEngine;
public class BasicRigidBodyPush : MonoBehaviour public class BasicRigidBodyPush : MonoBehaviour
{ {
public LayerMask pushLayers; public LayerMask pushLayers;
public bool canPush; public bool canPush;
[Range(0.5f, 5f)] public float strength = 1.1f; [Range(0.5f, 5f)] public float strength = 1.1f;
private void OnControllerColliderHit(ControllerColliderHit hit) private void OnControllerColliderHit(ControllerColliderHit hit)
{ {
if (canPush) PushRigidBodies(hit); if (canPush) PushRigidBodies(hit);
} }
private void PushRigidBodies(ControllerColliderHit hit) private void PushRigidBodies(ControllerColliderHit hit)
{ {
// https://docs.unity3d.com/ScriptReference/CharacterController.OnControllerColliderHit.html // https://docs.unity3d.com/ScriptReference/CharacterController.OnControllerColliderHit.html
// make sure we hit a non kinematic rigidbody // make sure we hit a non kinematic rigidbody
Rigidbody body = hit.collider.attachedRigidbody; Rigidbody body = hit.collider.attachedRigidbody;
if (body == null || body.isKinematic) return; if (body == null || body.isKinematic) return;
// make sure we only push desired layer(s) // make sure we only push desired layer(s)
var bodyLayerMask = 1 << body.gameObject.layer; var bodyLayerMask = 1 << body.gameObject.layer;
if ((bodyLayerMask & pushLayers.value) == 0) return; if ((bodyLayerMask & pushLayers.value) == 0) return;
// We dont want to push objects below us // We dont want to push objects below us
if (hit.moveDirection.y < -0.3f) return; if (hit.moveDirection.y < -0.3f) return;
// Calculate push direction from move direction, horizontal motion only // Calculate push direction from move direction, horizontal motion only
Vector3 pushDir = new Vector3(hit.moveDirection.x, 0.0f, hit.moveDirection.z); Vector3 pushDir = new Vector3(hit.moveDirection.x, 0.0f, hit.moveDirection.z);
// Apply the push and take strength into account // Apply the push and take strength into account
body.AddForce(pushDir * strength, ForceMode.Impulse); body.AddForce(pushDir * strength, ForceMode.Impulse);
} }
} }
@@ -1,401 +1,401 @@
using UnityEngine; using UnityEngine;
#if ENABLE_INPUT_SYSTEM #if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
#endif #endif
/* Note: animations are called via the controller for both the character and capsule using animator null checks /* Note: animations are called via the controller for both the character and capsule using animator null checks
*/ */
namespace StarterAssets namespace StarterAssets
{ {
[RequireComponent(typeof(CharacterController))] [RequireComponent(typeof(CharacterController))]
#if ENABLE_INPUT_SYSTEM #if ENABLE_INPUT_SYSTEM
[RequireComponent(typeof(PlayerInput))] [RequireComponent(typeof(PlayerInput))]
#endif #endif
public class ThirdPersonController : MonoBehaviour public class ThirdPersonController : MonoBehaviour
{ {
[Header("Player")] [Header("Player")]
[Tooltip("Move speed of the character in m/s")] [Tooltip("Move speed of the character in m/s")]
public float MoveSpeed = 2.0f; public float MoveSpeed = 2.0f;
[Tooltip("Sprint speed of the character in m/s")] [Tooltip("Sprint speed of the character in m/s")]
public float SprintSpeed = 5.335f; public float SprintSpeed = 5.335f;
[Tooltip("How fast the character turns to face movement direction")] [Tooltip("How fast the character turns to face movement direction")]
[Range(0.0f, 0.3f)] [Range(0.0f, 0.3f)]
public float RotationSmoothTime = 0.12f; public float RotationSmoothTime = 0.12f;
[Tooltip("Acceleration and deceleration")] [Tooltip("Acceleration and deceleration")]
public float SpeedChangeRate = 10.0f; public float SpeedChangeRate = 10.0f;
public AudioSource AudioFootsteps; public AudioSource AudioFootsteps;
public AudioSource LandingAudio; public AudioSource LandingAudio;
public AudioSource AudioFoley; public AudioSource AudioFoley;
public AudioClip LandingAudioClip; public AudioClip LandingAudioClip;
public AudioClip[] FootstepAudioClips; public AudioClip[] FootstepAudioClips;
[Range(0, 1)] public float FootstepAudioVolume = 0.5f; [Range(0, 1)] public float FootstepAudioVolume = 0.5f;
[Space(10)] [Space(10)]
[Tooltip("The height the player can jump")] [Tooltip("The height the player can jump")]
public float JumpHeight = 1.2f; public float JumpHeight = 1.2f;
[Tooltip("The character uses its own gravity value. The engine default is -9.81f")] [Tooltip("The character uses its own gravity value. The engine default is -9.81f")]
public float Gravity = -15.0f; public float Gravity = -15.0f;
[Space(10)] [Space(10)]
[Tooltip("Time required to pass before being able to jump again. Set to 0f to instantly jump again")] [Tooltip("Time required to pass before being able to jump again. Set to 0f to instantly jump again")]
public float JumpTimeout = 0.50f; public float JumpTimeout = 0.50f;
[Tooltip("Time required to pass before entering the fall state. Useful for walking down stairs")] [Tooltip("Time required to pass before entering the fall state. Useful for walking down stairs")]
public float FallTimeout = 0.15f; public float FallTimeout = 0.15f;
[Header("Player Grounded")] [Header("Player Grounded")]
[Tooltip("If the character is grounded or not. Not part of the CharacterController built in grounded check")] [Tooltip("If the character is grounded or not. Not part of the CharacterController built in grounded check")]
public bool Grounded = true; public bool Grounded = true;
[Tooltip("Useful for rough ground")] [Tooltip("Useful for rough ground")]
public float GroundedOffset = -0.14f; public float GroundedOffset = -0.14f;
[Tooltip("The radius of the grounded check. Should match the radius of the CharacterController")] [Tooltip("The radius of the grounded check. Should match the radius of the CharacterController")]
public float GroundedRadius = 0.28f; public float GroundedRadius = 0.28f;
[Tooltip("What layers the character uses as ground")] [Tooltip("What layers the character uses as ground")]
public LayerMask GroundLayers; public LayerMask GroundLayers;
[Header("Cinemachine")] [Header("Cinemachine")]
[Tooltip("The follow target set in the Cinemachine Virtual Camera that the camera will follow")] [Tooltip("The follow target set in the Cinemachine Virtual Camera that the camera will follow")]
public GameObject CinemachineCameraTarget; public GameObject CinemachineCameraTarget;
[Tooltip("How far in degrees can you move the camera up")] [Tooltip("How far in degrees can you move the camera up")]
public float TopClamp = 70.0f; public float TopClamp = 70.0f;
[Tooltip("How far in degrees can you move the camera down")] [Tooltip("How far in degrees can you move the camera down")]
public float BottomClamp = -30.0f; public float BottomClamp = -30.0f;
[Tooltip("Additional degress to override the camera. Useful for fine tuning camera position when locked")] [Tooltip("Additional degress to override the camera. Useful for fine tuning camera position when locked")]
public float CameraAngleOverride = 0.0f; public float CameraAngleOverride = 0.0f;
[Tooltip("For locking the camera position on all axis")] [Tooltip("For locking the camera position on all axis")]
public bool LockCameraPosition = false; public bool LockCameraPosition = false;
// cinemachine // cinemachine
private float _cinemachineTargetYaw; private float _cinemachineTargetYaw;
private float _cinemachineTargetPitch; private float _cinemachineTargetPitch;
// player // player
private float _speed; private float _speed;
private float _animationBlend; private float _animationBlend;
private float _targetRotation = 0.0f; private float _targetRotation = 0.0f;
private float _rotationVelocity; private float _rotationVelocity;
private float _verticalVelocity; private float _verticalVelocity;
private float _terminalVelocity = 53.0f; private float _terminalVelocity = 53.0f;
// timeout deltatime // timeout deltatime
private float _jumpTimeoutDelta; private float _jumpTimeoutDelta;
private float _fallTimeoutDelta; private float _fallTimeoutDelta;
// animation IDs // animation IDs
private int _animIDSpeed; private int _animIDSpeed;
private int _animIDGrounded; private int _animIDGrounded;
private int _animIDJump; private int _animIDJump;
private int _animIDFreeFall; private int _animIDFreeFall;
private int _animIDMotionSpeed; private int _animIDMotionSpeed;
#if ENABLE_INPUT_SYSTEM #if ENABLE_INPUT_SYSTEM
private PlayerInput _playerInput; private PlayerInput _playerInput;
#endif #endif
private Animator _animator; private Animator _animator;
private CharacterController _controller; private CharacterController _controller;
private StarterAssetsInputs _input; private StarterAssetsInputs _input;
private GameObject _mainCamera; private GameObject _mainCamera;
private const float _threshold = 0.01f; private const float _threshold = 0.01f;
private bool _hasAnimator; private bool _hasAnimator;
private bool IsCurrentDeviceMouse private bool IsCurrentDeviceMouse
{ {
get get
{ {
#if ENABLE_INPUT_SYSTEM #if ENABLE_INPUT_SYSTEM
return _playerInput.currentControlScheme == "KeyboardMouse"; return _playerInput.currentControlScheme == "KeyboardMouse";
#else #else
return false; return false;
#endif #endif
} }
} }
private void Awake() private void Awake()
{ {
// get a reference to our main camera // get a reference to our main camera
if (_mainCamera == null) if (_mainCamera == null)
{ {
_mainCamera = GameObject.FindGameObjectWithTag("MainCamera"); _mainCamera = GameObject.FindGameObjectWithTag("MainCamera");
} }
} }
private void Start() private void Start()
{ {
_cinemachineTargetYaw = CinemachineCameraTarget.transform.rotation.eulerAngles.y; _cinemachineTargetYaw = CinemachineCameraTarget.transform.rotation.eulerAngles.y;
_hasAnimator = TryGetComponent(out _animator); _hasAnimator = TryGetComponent(out _animator);
_controller = GetComponent<CharacterController>(); _controller = GetComponent<CharacterController>();
_input = GetComponent<StarterAssetsInputs>(); _input = GetComponent<StarterAssetsInputs>();
#if ENABLE_INPUT_SYSTEM #if ENABLE_INPUT_SYSTEM
_playerInput = GetComponent<PlayerInput>(); _playerInput = GetComponent<PlayerInput>();
#else #else
Debug.LogError( "Starter Assets package is missing dependencies. Please use Tools/Starter Assets/Reinstall Dependencies to fix it"); Debug.LogError( "Starter Assets package is missing dependencies. Please use Tools/Starter Assets/Reinstall Dependencies to fix it");
#endif #endif
AssignAnimationIDs(); AssignAnimationIDs();
// reset our timeouts on start // reset our timeouts on start
_jumpTimeoutDelta = JumpTimeout; _jumpTimeoutDelta = JumpTimeout;
_fallTimeoutDelta = FallTimeout; _fallTimeoutDelta = FallTimeout;
} }
private void Update() private void Update()
{ {
_hasAnimator = TryGetComponent(out _animator); _hasAnimator = TryGetComponent(out _animator);
JumpAndGravity(); JumpAndGravity();
GroundedCheck(); GroundedCheck();
Move(); Move();
} }
private void LateUpdate() private void LateUpdate()
{ {
CameraRotation(); CameraRotation();
} }
private void AssignAnimationIDs() private void AssignAnimationIDs()
{ {
_animIDSpeed = Animator.StringToHash("Speed"); _animIDSpeed = Animator.StringToHash("Speed");
_animIDGrounded = Animator.StringToHash("Grounded"); _animIDGrounded = Animator.StringToHash("Grounded");
_animIDJump = Animator.StringToHash("Jump"); _animIDJump = Animator.StringToHash("Jump");
_animIDFreeFall = Animator.StringToHash("FreeFall"); _animIDFreeFall = Animator.StringToHash("FreeFall");
_animIDMotionSpeed = Animator.StringToHash("MotionSpeed"); _animIDMotionSpeed = Animator.StringToHash("MotionSpeed");
} }
private void GroundedCheck() private void GroundedCheck()
{ {
// set sphere position, with offset // set sphere position, with offset
Vector3 spherePosition = new Vector3(transform.position.x, transform.position.y - GroundedOffset, Vector3 spherePosition = new Vector3(transform.position.x, transform.position.y - GroundedOffset,
transform.position.z); transform.position.z);
Grounded = Physics.CheckSphere(spherePosition, GroundedRadius, GroundLayers, Grounded = Physics.CheckSphere(spherePosition, GroundedRadius, GroundLayers,
QueryTriggerInteraction.Ignore); QueryTriggerInteraction.Ignore);
// update animator if using character // update animator if using character
if (_hasAnimator) if (_hasAnimator)
{ {
_animator.SetBool(_animIDGrounded, Grounded); _animator.SetBool(_animIDGrounded, Grounded);
} }
} }
private void CameraRotation() private void CameraRotation()
{ {
// if there is an input and camera position is not fixed // if there is an input and camera position is not fixed
if (_input.look.sqrMagnitude >= _threshold && !LockCameraPosition) if (_input.look.sqrMagnitude >= _threshold && !LockCameraPosition)
{ {
//Don't multiply mouse input by Time.deltaTime; //Don't multiply mouse input by Time.deltaTime;
float deltaTimeMultiplier = IsCurrentDeviceMouse ? 1.0f : Time.deltaTime; float deltaTimeMultiplier = IsCurrentDeviceMouse ? 1.0f : Time.deltaTime;
_cinemachineTargetYaw += _input.look.x * deltaTimeMultiplier; _cinemachineTargetYaw += _input.look.x * deltaTimeMultiplier;
_cinemachineTargetPitch += _input.look.y * deltaTimeMultiplier; _cinemachineTargetPitch += _input.look.y * deltaTimeMultiplier;
} }
// clamp our rotations so our values are limited 360 degrees // clamp our rotations so our values are limited 360 degrees
_cinemachineTargetYaw = ClampAngle(_cinemachineTargetYaw, float.MinValue, float.MaxValue); _cinemachineTargetYaw = ClampAngle(_cinemachineTargetYaw, float.MinValue, float.MaxValue);
_cinemachineTargetPitch = ClampAngle(_cinemachineTargetPitch, BottomClamp, TopClamp); _cinemachineTargetPitch = ClampAngle(_cinemachineTargetPitch, BottomClamp, TopClamp);
// Cinemachine will follow this target // Cinemachine will follow this target
CinemachineCameraTarget.transform.rotation = Quaternion.Euler(_cinemachineTargetPitch + CameraAngleOverride, CinemachineCameraTarget.transform.rotation = Quaternion.Euler(_cinemachineTargetPitch + CameraAngleOverride,
_cinemachineTargetYaw, 0.0f); _cinemachineTargetYaw, 0.0f);
} }
private void Move() private void Move()
{ {
// set target speed based on move speed, sprint speed and if sprint is pressed // set target speed based on move speed, sprint speed and if sprint is pressed
float targetSpeed = _input.sprint ? SprintSpeed : MoveSpeed; float targetSpeed = _input.sprint ? SprintSpeed : MoveSpeed;
// a simplistic acceleration and deceleration designed to be easy to remove, replace, or iterate upon // a simplistic acceleration and deceleration designed to be easy to remove, replace, or iterate upon
// note: Vector2's == operator uses approximation so is not floating point error prone, and is cheaper than magnitude // note: Vector2's == operator uses approximation so is not floating point error prone, and is cheaper than magnitude
// if there is no input, set the target speed to 0 // if there is no input, set the target speed to 0
if (_input.move == Vector2.zero) targetSpeed = 0.0f; if (_input.move == Vector2.zero) targetSpeed = 0.0f;
// a reference to the players current horizontal velocity // a reference to the players current horizontal velocity
float currentHorizontalSpeed = new Vector3(_controller.velocity.x, 0.0f, _controller.velocity.z).magnitude; float currentHorizontalSpeed = new Vector3(_controller.velocity.x, 0.0f, _controller.velocity.z).magnitude;
float speedOffset = 0.1f; float speedOffset = 0.1f;
float inputMagnitude = _input.analogMovement ? _input.move.magnitude : 1f; float inputMagnitude = _input.analogMovement ? _input.move.magnitude : 1f;
// accelerate or decelerate to target speed // accelerate or decelerate to target speed
if (currentHorizontalSpeed < targetSpeed - speedOffset || if (currentHorizontalSpeed < targetSpeed - speedOffset ||
currentHorizontalSpeed > targetSpeed + speedOffset) currentHorizontalSpeed > targetSpeed + speedOffset)
{ {
// creates curved result rather than a linear one giving a more organic speed change // creates curved result rather than a linear one giving a more organic speed change
// note T in Lerp is clamped, so we don't need to clamp our speed // note T in Lerp is clamped, so we don't need to clamp our speed
_speed = Mathf.Lerp(currentHorizontalSpeed, targetSpeed * inputMagnitude, _speed = Mathf.Lerp(currentHorizontalSpeed, targetSpeed * inputMagnitude,
Time.deltaTime * SpeedChangeRate); Time.deltaTime * SpeedChangeRate);
// round speed to 3 decimal places // round speed to 3 decimal places
_speed = Mathf.Round(_speed * 1000f) / 1000f; _speed = Mathf.Round(_speed * 1000f) / 1000f;
} }
else else
{ {
_speed = targetSpeed; _speed = targetSpeed;
} }
// NightclubArcadia: blend toward speed scaled by input magnitude so // NightclubArcadia: blend toward speed scaled by input magnitude so
// partial stick / click-to-move arrival uses walk cycles, not a // partial stick / click-to-move arrival uses walk cycles, not a
// slowed run clip via MotionSpeed alone. // slowed run clip via MotionSpeed alone.
_animationBlend = Mathf.Lerp(_animationBlend, targetSpeed * inputMagnitude, _animationBlend = Mathf.Lerp(_animationBlend, targetSpeed * inputMagnitude,
Time.deltaTime * SpeedChangeRate); Time.deltaTime * SpeedChangeRate);
if (_animationBlend < 0.01f) _animationBlend = 0f; if (_animationBlend < 0.01f) _animationBlend = 0f;
// normalise input direction // normalise input direction
Vector3 inputDirection = new Vector3(_input.move.x, 0.0f, _input.move.y).normalized; Vector3 inputDirection = new Vector3(_input.move.x, 0.0f, _input.move.y).normalized;
// note: Vector2's != operator uses approximation so is not floating point error prone, and is cheaper than magnitude // note: Vector2's != operator uses approximation so is not floating point error prone, and is cheaper than magnitude
// if there is a move input rotate player when the player is moving // if there is a move input rotate player when the player is moving
if (_input.move != Vector2.zero) if (_input.move != Vector2.zero)
{ {
_targetRotation = Mathf.Atan2(inputDirection.x, inputDirection.z) * Mathf.Rad2Deg + _targetRotation = Mathf.Atan2(inputDirection.x, inputDirection.z) * Mathf.Rad2Deg +
_mainCamera.transform.eulerAngles.y; _mainCamera.transform.eulerAngles.y;
float rotation = Mathf.SmoothDampAngle(transform.eulerAngles.y, _targetRotation, ref _rotationVelocity, float rotation = Mathf.SmoothDampAngle(transform.eulerAngles.y, _targetRotation, ref _rotationVelocity,
RotationSmoothTime); RotationSmoothTime);
// rotate to face input direction relative to camera position // rotate to face input direction relative to camera position
transform.rotation = Quaternion.Euler(0.0f, rotation, 0.0f); transform.rotation = Quaternion.Euler(0.0f, rotation, 0.0f);
} }
Vector3 targetDirection = Quaternion.Euler(0.0f, _targetRotation, 0.0f) * Vector3.forward; Vector3 targetDirection = Quaternion.Euler(0.0f, _targetRotation, 0.0f) * Vector3.forward;
// move the player // move the player
_controller.Move(targetDirection.normalized * (_speed * Time.deltaTime) + _controller.Move(targetDirection.normalized * (_speed * Time.deltaTime) +
new Vector3(0.0f, _verticalVelocity, 0.0f) * Time.deltaTime); new Vector3(0.0f, _verticalVelocity, 0.0f) * Time.deltaTime);
// update animator if using character // update animator if using character
if (_hasAnimator) if (_hasAnimator)
{ {
_animator.SetFloat(_animIDSpeed, _animationBlend); _animator.SetFloat(_animIDSpeed, _animationBlend);
_animator.SetFloat(_animIDMotionSpeed, inputMagnitude); _animator.SetFloat(_animIDMotionSpeed, inputMagnitude);
} }
} }
private void JumpAndGravity() private void JumpAndGravity()
{ {
if (Grounded) if (Grounded)
{ {
// reset the fall timeout timer // reset the fall timeout timer
_fallTimeoutDelta = FallTimeout; _fallTimeoutDelta = FallTimeout;
// update animator if using character // update animator if using character
if (_hasAnimator) if (_hasAnimator)
{ {
_animator.SetBool(_animIDJump, false); _animator.SetBool(_animIDJump, false);
_animator.SetBool(_animIDFreeFall, false); _animator.SetBool(_animIDFreeFall, false);
} }
// stop our velocity dropping infinitely when grounded // stop our velocity dropping infinitely when grounded
if (_verticalVelocity < 0.0f) if (_verticalVelocity < 0.0f)
{ {
_verticalVelocity = -2f; _verticalVelocity = -2f;
} }
// Jump // Jump
if (_input.jump && _jumpTimeoutDelta <= 0.0f) if (_input.jump && _jumpTimeoutDelta <= 0.0f)
{ {
// the square root of H * -2 * G = how much velocity needed to reach desired height // the square root of H * -2 * G = how much velocity needed to reach desired height
_verticalVelocity = Mathf.Sqrt(JumpHeight * -2f * Gravity); _verticalVelocity = Mathf.Sqrt(JumpHeight * -2f * Gravity);
// update animator if using character // update animator if using character
if (_hasAnimator) if (_hasAnimator)
{ {
_animator.SetBool(_animIDJump, true); _animator.SetBool(_animIDJump, true);
} }
} }
// jump timeout // jump timeout
if (_jumpTimeoutDelta >= 0.0f) if (_jumpTimeoutDelta >= 0.0f)
{ {
_jumpTimeoutDelta -= Time.deltaTime; _jumpTimeoutDelta -= Time.deltaTime;
} }
} }
else else
{ {
// reset the jump timeout timer // reset the jump timeout timer
_jumpTimeoutDelta = JumpTimeout; _jumpTimeoutDelta = JumpTimeout;
// fall timeout // fall timeout
if (_fallTimeoutDelta >= 0.0f) if (_fallTimeoutDelta >= 0.0f)
{ {
_fallTimeoutDelta -= Time.deltaTime; _fallTimeoutDelta -= Time.deltaTime;
} }
else else
{ {
// update animator if using character // update animator if using character
if (_hasAnimator) if (_hasAnimator)
{ {
_animator.SetBool(_animIDFreeFall, true); _animator.SetBool(_animIDFreeFall, true);
} }
} }
// if we are not grounded, do not jump // if we are not grounded, do not jump
_input.jump = false; _input.jump = false;
} }
// apply gravity over time if under terminal (multiply by delta time twice to linearly speed up over time) // apply gravity over time if under terminal (multiply by delta time twice to linearly speed up over time)
if (_verticalVelocity < _terminalVelocity) if (_verticalVelocity < _terminalVelocity)
{ {
_verticalVelocity += Gravity * Time.deltaTime; _verticalVelocity += Gravity * Time.deltaTime;
} }
} }
private static float ClampAngle(float lfAngle, float lfMin, float lfMax) private static float ClampAngle(float lfAngle, float lfMin, float lfMax)
{ {
if (lfAngle < -360f) lfAngle += 360f; if (lfAngle < -360f) lfAngle += 360f;
if (lfAngle > 360f) lfAngle -= 360f; if (lfAngle > 360f) lfAngle -= 360f;
return Mathf.Clamp(lfAngle, lfMin, lfMax); return Mathf.Clamp(lfAngle, lfMin, lfMax);
} }
private void OnDrawGizmosSelected() private void OnDrawGizmosSelected()
{ {
Color transparentGreen = new Color(0.0f, 1.0f, 0.0f, 0.35f); Color transparentGreen = new Color(0.0f, 1.0f, 0.0f, 0.35f);
Color transparentRed = new Color(1.0f, 0.0f, 0.0f, 0.35f); Color transparentRed = new Color(1.0f, 0.0f, 0.0f, 0.35f);
if (Grounded) Gizmos.color = transparentGreen; if (Grounded) Gizmos.color = transparentGreen;
else Gizmos.color = transparentRed; else Gizmos.color = transparentRed;
// when selected, draw a gizmo in the position of, and matching radius of, the grounded collider // when selected, draw a gizmo in the position of, and matching radius of, the grounded collider
Gizmos.DrawSphere( Gizmos.DrawSphere(
new Vector3(transform.position.x, transform.position.y - GroundedOffset, transform.position.z), new Vector3(transform.position.x, transform.position.y - GroundedOffset, transform.position.z),
GroundedRadius); GroundedRadius);
} }
private void OnFootstep(AnimationEvent animationEvent) private void OnFootstep(AnimationEvent animationEvent)
{ {
if (animationEvent.animatorClipInfo.weight > 0.5f) if (animationEvent.animatorClipInfo.weight > 0.5f)
{ {
if (AudioFootsteps != null) if (AudioFootsteps != null)
AudioFootsteps.Play(); AudioFootsteps.Play();
if (AudioFoley != null) if (AudioFoley != null)
AudioFoley.Play(); AudioFoley.Play();
} }
} }
private void OnLand(AnimationEvent animationEvent) private void OnLand(AnimationEvent animationEvent)
{ {
if (animationEvent.animatorClipInfo.weight > 0.5f) if (animationEvent.animatorClipInfo.weight > 0.5f)
{ {
if (LandingAudio != null) if (LandingAudio != null)
LandingAudio.Play(); LandingAudio.Play();
} }
} }
} }
} }
@@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: d9b1ba53f81715d4a8405a40b0a1e2c1 guid: d9b1ba53f81715d4a8405a40b0a1e2c1
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
@@ -1,2 +1,2 @@
This package is licensed under the Unity Companion License. This package is licensed under the Unity Companion License.
For full license terms, please see: https://unity3d.com/legal/licenses/Unity_Companion_License For full license terms, please see: https://unity3d.com/legal/licenses/Unity_Companion_License
@@ -0,0 +1,141 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using NUnit.Framework;
using UnityEditor;
using UnityEngine;
namespace NightclubArcadia.Skills.Tests
{
/// <summary>
/// Guards the voice-sheet pipeline: writing/voices/*.md holds the prose, skill_bible.json
/// mirrors it, and the SkillDefinition assets are generated from the JSON.
///
/// A writer edits the markdown and runs tools/writing/sync_voices.py --to-json. If they
/// forget, or if someone edits the JSON prose directly, the two drift and the shipped
/// voice stops matching the sheet the next scene is written against. That is silent and
/// expensive, so it fails here instead.
///
/// This deliberately does NOT reimplement the markdown parser in C#. It asserts that the
/// prose the game ships is present verbatim in the sheet, which catches drift in either
/// direction without a second parser to keep in step with the Python one.
/// </summary>
public class VoiceSheetSyncTests
{
const string DatabasePath = "Assets/Skills/SkillDatabase.asset";
static string VoicesDir =>
Path.GetFullPath(Path.Combine(Application.dataPath, "..", "..", "writing", "voices"));
static string SheetPath(string id) => Path.Combine(VoicesDir, id + ".md");
SkillDatabase LoadDatabase()
{
var db = AssetDatabase.LoadAssetAtPath<SkillDatabase>(DatabasePath);
Assert.IsNotNull(db, $"Expected SkillDatabase at {DatabasePath}");
return db;
}
/// <summary>Files in voices/ that are prose for the writer, not a voice sheet.</summary>
static bool IsSupportingDoc(string name) =>
name.StartsWith("_") ||
string.Equals(name, "README", StringComparison.OrdinalIgnoreCase);
/// <summary>Collapse whitespace so a hard-wrapped sheet still matches a single-line source.</summary>
static string Flatten(string s) =>
Regex.Replace(s ?? string.Empty, @"\s+", " ").Trim();
[Test]
public void EverySkill_HasAVoiceSheet()
{
Assert.IsTrue(Directory.Exists(VoicesDir), $"Expected the voice sheets at {VoicesDir}");
var missing = LoadDatabase().All
.Where(s => !File.Exists(SheetPath(s.Id)))
.Select(s => s.Id)
.ToList();
Assert.IsEmpty(missing,
"No voice sheet for: " + string.Join(", ", missing) +
". Run: python3 tools/writing/sync_voices.py --to-md");
}
[Test]
public void EveryVoiceSheet_HasASkill()
{
Assert.IsTrue(Directory.Exists(VoicesDir), $"Expected the voice sheets at {VoicesDir}");
var ids = new HashSet<string>(LoadDatabase().All.Select(s => s.Id));
var orphans = Directory.GetFiles(VoicesDir, "*.md")
.Select(Path.GetFileNameWithoutExtension)
.Where(name => !IsSupportingDoc(name) && !ids.Contains(name))
.ToList();
Assert.IsEmpty(orphans,
"Voice sheets with no matching skill id: " + string.Join(", ", orphans));
}
[Test]
public void VoiceSheets_MatchTheShippedProse()
{
var problems = new List<string>();
foreach (var skill in LoadDatabase().All)
{
var path = SheetPath(skill.Id);
if (!File.Exists(path))
{
continue; // EverySkill_HasAVoiceSheet reports this
}
var sheet = Flatten(File.ReadAllText(path));
if (!sheet.Contains(Flatten("# " + skill.DisplayName)))
{
problems.Add($"{skill.Id}: sheet title does not match displayName '{skill.DisplayName}'");
}
if (!sheet.Contains(Flatten(skill.Domain)))
{
problems.Add($"{skill.Id}: the domain text is not in the sheet");
}
foreach (var line in VoiceSamples(skill.Notes))
{
if (!sheet.Contains(Flatten(line)))
{
var preview = line.Length > 60 ? line.Substring(0, 60) + "…" : line;
problems.Add($"{skill.Id}: voice sample missing from the sheet: {preview}");
}
}
}
Assert.IsEmpty(problems,
"writing/voices/*.md has drifted from skill_bible.json:\n " +
string.Join("\n ", problems) +
"\n\nProse is authored in the markdown. If you changed it there, run:\n" +
" python3 tools/writing/sync_voices.py --to-json\n" +
"If you changed the JSON directly, move the change into the sheet instead.");
}
/// <summary>The SUCCESS / FAILURE / PASSIVE lines out of a Skill Bible notes blob.</summary>
static IEnumerable<string> VoiceSamples(string notes)
{
if (string.IsNullOrEmpty(notes))
{
yield break;
}
foreach (var raw in notes.Split('\n'))
{
var match = Regex.Match(raw, @"^(?:SUCCESS|FAILURE|PASSIVE) VOICE(?: — .*?)?: (.+)$");
if (match.Success)
{
yield return match.Groups[1].Value;
}
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f51db402df844805947fea0f2d43dfbc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,158 +1,158 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEditor; using UnityEditor;
using System; using System;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
[CustomEditor(typeof(Readme))] [CustomEditor(typeof(Readme))]
[InitializeOnLoad] [InitializeOnLoad]
public class ReadmeEditor : Editor { public class ReadmeEditor : Editor {
static string kShowedReadmeSessionStateName = "ReadmeEditor.showedReadme"; static string kShowedReadmeSessionStateName = "ReadmeEditor.showedReadme";
static float kSpace = 16f; static float kSpace = 16f;
static ReadmeEditor() static ReadmeEditor()
{ {
EditorApplication.delayCall += SelectReadmeAutomatically; EditorApplication.delayCall += SelectReadmeAutomatically;
} }
static void SelectReadmeAutomatically() static void SelectReadmeAutomatically()
{ {
if (!SessionState.GetBool(kShowedReadmeSessionStateName, false )) if (!SessionState.GetBool(kShowedReadmeSessionStateName, false ))
{ {
var readme = SelectReadme(); var readme = SelectReadme();
SessionState.SetBool(kShowedReadmeSessionStateName, true); SessionState.SetBool(kShowedReadmeSessionStateName, true);
if (readme && !readme.loadedLayout) if (readme && !readme.loadedLayout)
{ {
LoadLayout(); LoadLayout();
readme.loadedLayout = true; readme.loadedLayout = true;
} }
} }
} }
static void LoadLayout() static void LoadLayout()
{ {
var assembly = typeof(EditorApplication).Assembly; var assembly = typeof(EditorApplication).Assembly;
var windowLayoutType = assembly.GetType("UnityEditor.WindowLayout", true); var windowLayoutType = assembly.GetType("UnityEditor.WindowLayout", true);
var method = windowLayoutType.GetMethod("LoadWindowLayout", BindingFlags.Public | BindingFlags.Static); var method = windowLayoutType.GetMethod("LoadWindowLayout", BindingFlags.Public | BindingFlags.Static);
method.Invoke(null, new object[]{Path.Combine(Application.dataPath, "TutorialInfo/Layout.wlt"), false}); method.Invoke(null, new object[]{Path.Combine(Application.dataPath, "TutorialInfo/Layout.wlt"), false});
} }
[MenuItem("Tutorial/Show Tutorial Instructions")] [MenuItem("Tutorial/Show Tutorial Instructions")]
static Readme SelectReadme() static Readme SelectReadme()
{ {
var ids = AssetDatabase.FindAssets("Readme t:Readme"); var ids = AssetDatabase.FindAssets("Readme t:Readme");
if (ids.Length == 1) if (ids.Length == 1)
{ {
var readmeObject = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(ids[0])); var readmeObject = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(ids[0]));
Selection.objects = new UnityEngine.Object[]{readmeObject}; Selection.objects = new UnityEngine.Object[]{readmeObject};
return (Readme)readmeObject; return (Readme)readmeObject;
} }
else else
{ {
Debug.Log("Couldn't find a readme"); Debug.Log("Couldn't find a readme");
return null; return null;
} }
} }
protected override void OnHeaderGUI() protected override void OnHeaderGUI()
{ {
var readme = (Readme)target; var readme = (Readme)target;
Init(); Init();
var iconWidth = Mathf.Min(EditorGUIUtility.currentViewWidth/3f - 20f, 128f); var iconWidth = Mathf.Min(EditorGUIUtility.currentViewWidth/3f - 20f, 128f);
GUILayout.BeginHorizontal("In BigTitle"); GUILayout.BeginHorizontal("In BigTitle");
{ {
GUILayout.Label(readme.icon, GUILayout.Width(iconWidth), GUILayout.Height(iconWidth)); GUILayout.Label(readme.icon, GUILayout.Width(iconWidth), GUILayout.Height(iconWidth));
GUILayout.Label(readme.title, TitleStyle); GUILayout.Label(readme.title, TitleStyle);
} }
GUILayout.EndHorizontal(); GUILayout.EndHorizontal();
} }
public override void OnInspectorGUI() public override void OnInspectorGUI()
{ {
var readme = (Readme)target; var readme = (Readme)target;
Init(); Init();
foreach (var section in readme.sections) foreach (var section in readme.sections)
{ {
if (!string.IsNullOrEmpty(section.heading)) if (!string.IsNullOrEmpty(section.heading))
{ {
GUILayout.Label(section.heading, HeadingStyle); GUILayout.Label(section.heading, HeadingStyle);
} }
if (!string.IsNullOrEmpty(section.text)) if (!string.IsNullOrEmpty(section.text))
{ {
GUILayout.Label(section.text, BodyStyle); GUILayout.Label(section.text, BodyStyle);
} }
if (!string.IsNullOrEmpty(section.linkText)) if (!string.IsNullOrEmpty(section.linkText))
{ {
if (LinkLabel(new GUIContent(section.linkText))) if (LinkLabel(new GUIContent(section.linkText)))
{ {
Application.OpenURL(section.url); Application.OpenURL(section.url);
} }
} }
GUILayout.Space(kSpace); GUILayout.Space(kSpace);
} }
} }
bool m_Initialized; bool m_Initialized;
GUIStyle LinkStyle { get { return m_LinkStyle; } } GUIStyle LinkStyle { get { return m_LinkStyle; } }
[SerializeField] GUIStyle m_LinkStyle; [SerializeField] GUIStyle m_LinkStyle;
GUIStyle TitleStyle { get { return m_TitleStyle; } } GUIStyle TitleStyle { get { return m_TitleStyle; } }
[SerializeField] GUIStyle m_TitleStyle; [SerializeField] GUIStyle m_TitleStyle;
GUIStyle HeadingStyle { get { return m_HeadingStyle; } } GUIStyle HeadingStyle { get { return m_HeadingStyle; } }
[SerializeField] GUIStyle m_HeadingStyle; [SerializeField] GUIStyle m_HeadingStyle;
GUIStyle BodyStyle { get { return m_BodyStyle; } } GUIStyle BodyStyle { get { return m_BodyStyle; } }
[SerializeField] GUIStyle m_BodyStyle; [SerializeField] GUIStyle m_BodyStyle;
void Init() void Init()
{ {
if (m_Initialized) if (m_Initialized)
return; return;
m_BodyStyle = new GUIStyle(EditorStyles.label); m_BodyStyle = new GUIStyle(EditorStyles.label);
m_BodyStyle.wordWrap = true; m_BodyStyle.wordWrap = true;
m_BodyStyle.fontSize = 14; m_BodyStyle.fontSize = 14;
m_TitleStyle = new GUIStyle(m_BodyStyle); m_TitleStyle = new GUIStyle(m_BodyStyle);
m_TitleStyle.fontSize = 26; m_TitleStyle.fontSize = 26;
m_HeadingStyle = new GUIStyle(m_BodyStyle); m_HeadingStyle = new GUIStyle(m_BodyStyle);
m_HeadingStyle.fontSize = 18 ; m_HeadingStyle.fontSize = 18 ;
m_LinkStyle = new GUIStyle(m_BodyStyle); m_LinkStyle = new GUIStyle(m_BodyStyle);
m_LinkStyle.wordWrap = false; m_LinkStyle.wordWrap = false;
// Match selection color which works nicely for both light and dark skins // Match selection color which works nicely for both light and dark skins
m_LinkStyle.normal.textColor = new Color (0x00/255f, 0x78/255f, 0xDA/255f, 1f); m_LinkStyle.normal.textColor = new Color (0x00/255f, 0x78/255f, 0xDA/255f, 1f);
m_LinkStyle.stretchWidth = false; m_LinkStyle.stretchWidth = false;
m_Initialized = true; m_Initialized = true;
} }
bool LinkLabel (GUIContent label, params GUILayoutOption[] options) bool LinkLabel (GUIContent label, params GUILayoutOption[] options)
{ {
var position = GUILayoutUtility.GetRect(label, LinkStyle, options); var position = GUILayoutUtility.GetRect(label, LinkStyle, options);
Handles.BeginGUI (); Handles.BeginGUI ();
Handles.color = LinkStyle.normal.textColor; Handles.color = LinkStyle.normal.textColor;
Handles.DrawLine (new Vector3(position.xMin, position.yMax), new Vector3(position.xMax, position.yMax)); Handles.DrawLine (new Vector3(position.xMin, position.yMax), new Vector3(position.xMax, position.yMax));
Handles.color = Color.white; Handles.color = Color.white;
Handles.EndGUI (); Handles.EndGUI ();
EditorGUIUtility.AddCursorRect (position, MouseCursor.Link); EditorGUIUtility.AddCursorRect (position, MouseCursor.Link);
return GUI.Button (position, label, LinkStyle); return GUI.Button (position, label, LinkStyle);
} }
} }
@@ -1,14 +1,14 @@
using System; using System;
using UnityEngine; using UnityEngine;
public class Readme : ScriptableObject { public class Readme : ScriptableObject {
public Texture2D icon; public Texture2D icon;
public string title; public string title;
public Section[] sections; public Section[] sections;
public bool loadedLayout; public bool loadedLayout;
[Serializable] [Serializable]
public class Section { public class Section {
public string heading, text, linkText, url; public string heading, text, linkText, url;
} }
} }
+45 -20
View File
@@ -10,7 +10,7 @@ Companion reading: `docs/skill-system-refactor-plan.md`, `docs/candidate-system-
--- ---
## 0. Status — Phase 0 is complete ## 0. Status — Phases 0 and 2 are complete
Executed 2026-08-25. The working tree is clean and tagged `pre-restructure`. Executed 2026-08-25. The working tree is clean and tagged `pre-restructure`.
@@ -19,7 +19,7 @@ the UI layer, player control setup, the dialogue-vs-menu interaction fix, and th
A full pre-flight backup was taken first (`.tar.gz` of the tree excluding `Library/`, `Temp/`, A full pre-flight backup was taken first (`.tar.gz` of the tree excluding `Library/`, `Temp/`,
`Logs/`, and build output) plus a separate copy of the scene file. `Logs/`, and build output) plus a separate copy of the scene file.
Everything below from §1 onward is unchanged proposal. Nothing in §2–§5 has been applied. Phase 2 (the writing pipeline) is also done — see §4. Phases 1, 3, 4 and 5 remain proposal.
### 0.1 The binary scene — diagnosis corrected ### 0.1 The binary scene — diagnosis corrected
@@ -388,8 +388,8 @@ Effort marks are rough: **S** ≲1h, **M** a half day, **L** a day or more.
| 0.2 | Full backup of the tree + separate copy of the scene | done | | 0.2 | Full backup of the tree + separate copy of the scene | done |
| 0.3 | Commit all uncommitted work in logical slices (§5) | done — 5 commits | | 0.3 | Commit all uncommitted work in logical slices (§5) | done — 5 commits |
| 0.4 | Convert `DialogueTest.unity` to text | **blocked** — Editor-UI only, see §0.1 | | 0.4 | Convert `DialogueTest.unity` to text | **blocked** — Editor-UI only, see §0.1 |
| 0.5 | Tag `pre-restructure` | done | | 0.5 | Tag `pre-restructure` (on a green tree, 39/39) | done |
| 0.6 | Push `main` and the tag to `origin` | pending | | 0.6 | Push `main` and the tag to `origin` | done |
0.4 is the one open item and it does not block Phase 1 or 2. 0.4 is the one open item and it does not block Phase 1 or 2.
@@ -405,20 +405,41 @@ Effort marks are rough: **S** ≲1h, **M** a half day, **L** a day or more.
`.gitattributes` before any restructuring is deliberate — the moment work happens on a branch, `.gitattributes` before any restructuring is deliberate — the moment work happens on a branch,
scene merges without a merge driver will corrupt files. scene merges without a merge driver will corrupt files.
### Phase 2 — writing pipeline (no Unity changes, fully parallel to Phase 3+) ### Phase 2 — writing pipeline ✅ DONE (2026-08-25)
| # | Step | Detail | Effort | | # | Step | Status |
|---|---|---|---| |---|---|---|
| 2.1 | Create `writing/` skeleton + templates | §2.2, §2.3 | S | | 2.1 | `writing/` skeleton + templates | done |
| 2.2 | **Write `writing/STYLE.md`** | The missing handbook. Recover the rules from `.yarn` header comments and the three `docs/` plans. Highest-value single item in this plan. | M | | 2.2 | `writing/STYLE.md` | done — **digested from the vault handbook, not reconstructed** (below) |
| 2.3 | Extract `skill_bible.json` `notes` → `writing/voices/*.md` | one-shot script, 11 files | M | | 2.3 | Extract `skill_bible.json` prose → `writing/voices/*.md` | done — 11 sheets, lossless round-trip |
| 2.4 | Write the sync script md → JSON + an EditMode drift test | §2.4 | M | | 2.4 | Sync script + EditMode drift test | done — `tools/writing/sync_voices.py`, `VoiceSheetSyncTests` |
| 2.5 | Author the three character sheets | Bartender, Bradford Kane, Chevalier Cassian Thal | M | | 2.5 | Character sheets | done — Bartender, Chevalier Cassian Thal, Bradford Kane |
| 2.6 | Write `writing/README.md` + `YARN-PRIMER.md` | The Cowork session entry point, incl. the YarnCheck caveat (§2.6) | S | | 2.6 | `README.md` + `YARN-PRIMER.md` | done, plus `GLOSSARY.md` and `lore/candidates.md` |
| 2.7 | Move `SC101.yarn`'s header rules into `writing/scenes/sc101-*.md` | leave a one-line pointer in the `.yarn` | S | | 2.7 | SC-101 header rules → scene brief | done — header trimmed to the six rules that bind while editing, rationale moved to the brief |
Phase 2 touches **no Unity asset at all**. It can proceed while the Editor is open and while Validated: EditMode **42/42** (three new), YarnCheck compiles 9 files / 35 nodes, sheets in sync.
Phase 3 is in flight, and it is what unblocks Cowork. Consider doing it first. The drift test was verified to actually fail on drift, not merely to pass.
#### Phase 2 — what changed against the plan
Two things, both discovered during execution.
**The handbook exists.** `docs/skill-system-refactor-plan.md` §2 names it, and it is at
`~/Obsidian-Vaults/obsidian-vault/Projects/Active/NightclubArcadia/` — a 874-line
`[[Mystery Writing Handbook]]`, plus `[[Character Sheet Handbook]]`, `[[Skill System Draft]]`,
`[[Lorebook]]`, `[[Candidate System — Design Explanation]]`, scene specs, and `[[Ground Truth]]`.
So §2.2 became a **digest with pointers** rather than a reconstruction, which is both more
accurate and honest about where the authoring home is. The vault remains that home.
**`[[Ground Truth]]` must never enter this repo.** It is the solution document. The premise of
the game is that the protagonist's identity never resolves, and a copy of the answer in a git
history is exactly how that leaks. This is now stated in `writing/README.md` and `CLAUDE.md` §4.1.
One thing surfaced that is worth acting on independently: `[[000_OpeningSceneTemplate]]` records
SC-101's tone check as **BLOCKED** because the one-page Voice Sheet has never been written — the
scene spec could not honestly certify its own tone field. `writing/STYLE.md` §9 now holds that
sheet with four fields explicitly unset. Filling them is about half an hour of decisions and it
unblocks a check that has been stuck for a while.
### Phase 3 — scene restructure (the risky part) ### Phase 3 — scene restructure (the risky part)
@@ -494,7 +515,10 @@ That turned out to matter — four Unity runs followed, one ending in a `SIGILL`
Slices rather than one lump, because the restructure will want to revert *part* of this later. Slices rather than one lump, because the restructure will want to revert *part* of this later.
**Still to do:** push `main` and the tag to `origin`, and the Editor-UI serialization fix (§0.1). 6. Fixed two wrong expectations in the locomotion math tests (both test bugs, not
production bugs); EditMode is **39/39**. Moved the tag onto that green tree and pushed.
**Still to do:** the Editor-UI serialization fix (§0.1). That is the only open Phase 0 item.
### 5.1 Residual risks after checkpointing ### 5.1 Residual risks after checkpointing
@@ -527,9 +551,10 @@ the world every session.
## 7. Open questions ## 7. Open questions
1. **Does a writing handbook exist outside the repo?** `docs/candidate-system-implementation-plan.md` 1. ~~Does a writing handbook exist outside the repo?~~ **Answered — yes** (Phase 2 notes). It is in the
says it exists but is not checked in. If there is a document somewhere, importing it beats Obsidian vault and is now pointed at rather than duplicated. The open part is whether any of
reconstructing it (Phase 2.2 assumes reconstruction). it should eventually move into the repo wholesale; the current answer is no, because the vault
is reachable from writing sessions and duplication would drift.
2. ~~How did the scene become binary?~~ **Answered** (§0.1): Force Text only converts when the 2. ~~How did the scene become binary?~~ **Answered** (§0.1): Force Text only converts when the
setting changes, so anything that entered binary stays binary. The open part is *how* it setting changes, so anything that entered binary stays binary. The open part is *how* it
first entered binary — most likely created or imported during a Force Binary window. Adding a first entered binary — most likely created or imported during a Force Binary window. Adding a
+44
View File
@@ -0,0 +1,44 @@
#!/usr/bin/env python3
"""Summarise an NUnit results file and exit non-zero if anything failed.
Unity's own docs state there is no common exit-code definition across the
components under test, so the results XML is the authority, not $?.
"""
import sys
import xml.etree.ElementTree as ET
def main(path):
try:
root = ET.parse(path).getroot()
except FileNotFoundError:
print(f"no results at {path} — the run did not get far enough to write one")
return 1
except ET.ParseError as exc:
print(f"could not parse {path}: {exc}")
return 1
total = int(root.get("total") or 0)
passed = int(root.get("passed") or 0)
failed = int(root.get("failed") or 0)
skipped = int(root.get("skipped") or 0)
for case in root.iter("test-case"):
if case.get("result") == "Passed":
continue
print(f"FAIL {case.get('fullname')}")
message = case.find("failure/message")
if message is not None and message.text:
for line in message.text.strip().splitlines()[:6]:
print(f" {line}")
if total == 0:
print("no tests ran")
else:
print(f"{passed}/{total} passed" + (f", {skipped} skipped" if skipped else ""))
return 1 if failed else 0
if __name__ == "__main__":
sys.exit(main(sys.argv[1] if len(sys.argv) > 1 else ".test-results/editmode.xml"))
+277
View File
@@ -0,0 +1,277 @@
#!/usr/bin/env python3
"""Sync the eleven voice sheets between writing/voices/*.md and skill_bible.json.
Direction of truth, per field. This is the whole design; read it before changing
anything here.
PROSE writing/voices/<id>.md -> skill_bible.json (displayName, domain, notes)
MACHINE skill_bible.json -> writing/voices/<id>.md ("Machine fields" block)
A writer edits prose in the markdown and never opens the JSON. An engineer edits
machine fields in the JSON and never hand-writes the markdown table. Neither
direction is ambiguous, so nothing silently wins.
Usage:
sync_voices.py --to-md regenerate every .md from the JSON (initial extraction,
and to refresh the machine block afterwards)
sync_voices.py --to-json fold the markdown prose back into skill_bible.json
sync_voices.py --check verify the two are in sync; exit 1 if not
Wrapped prose is fine: lines inside a section are joined with single spaces, so a
writer may hard-wrap a paragraph without changing what lands in the JSON.
"""
import argparse
import json
import os
import re
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import voicelib
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
JSON_PATH = os.path.join(ROOT, "NightclubArcadia", "Assets", "Skills", "skill_bible.json")
VOICES_DIR = os.path.join(ROOT, "writing", "voices")
GEN_START = "<!-- GENERATED FROM skill_bible.json — do not edit by hand -->"
GEN_END = "<!-- END GENERATED -->"
# markdown heading -> notes field key
SECTIONS = [
("Domain", "domain"),
("What it wants for you", "what it wants for you"),
("What it's wrong about", "what it's wrong about"),
("How it addresses you", "how it addresses you"),
("Register", "register"),
("What it never does", "what it never does"),
("Opposed to", "opposed to"),
("Allied with", "allied with"),
("Domains it must not comment on", "__forbidden"),
]
def machine_block(s):
allied = ", ".join(f"`{a}`" for a in s.get("alliedWith", [])) or "—"
c = s.get("accentColor", {})
return "\n".join([
GEN_START,
"",
"| Field | Value |",
"|---|---|",
f"| id | `{s['id']}` |",
f"| axis | {s.get('axis','—')} |",
f"| opposed to | `{s.get('opposedTo','—')}` |",
f"| allied with | {allied} |",
f"| primary channel | {s.get('primaryChannel','—')} |",
f"| secondary channel | {s.get('secondaryChannel','—')} |",
f"| clue yield | {s.get('clueYield','—')} |",
f"| starting rank | {s.get('startingRank','—')} |",
f"| target firings/hour | {s.get('targetFiringsPerHour','—')} |",
f"| accent colour | rgba({c.get('r')}, {c.get('g')}, {c.get('b')}, {c.get('a')}) |",
"",
GEN_END,
])
def to_md(s):
d = voicelib.parse_notes(s["notes"])
f = d["fields"]
L = [
"---",
f"id: {s['id']}",
"---",
"",
f"# {f['name']}",
"",
"> Voice sheet. **The prose below is the source of truth** — edit it here, then run",
"> `python3 tools/writing/sync_voices.py --to-json`. The machine table is generated",
"> from `skill_bible.json`; changing it here does nothing.",
"",
"## Machine fields",
"",
machine_block(s),
"",
]
for heading, key in SECTIONS:
L.append(f"## {heading}")
L.append("")
L.append(d["forbidden"] if key == "__forbidden" else f[key])
L.append("")
L.append("## Verbal tics")
L.append("")
for n, text in d["tics"]:
L.append(f"{n}. {text}")
L.append("")
L.append("## Voice samples")
L.append("")
for kind in ("success", "failure", "passive"):
L.append(f"### {kind.capitalize()}")
L.append("")
if kind in d["voice_gloss"]:
L.append(f"*{d['voice_gloss'][kind]}*")
L.append("")
L.append(f"> {d['voices'][kind]}")
L.append("")
L.append("## Firing frequency")
L.append("")
L.append(f"{d['firing']} per hour (target).")
L.append("")
return "\n".join(L)
def _join(lines):
return " ".join(x.strip() for x in lines if x.strip())
def from_md(text, skill_id):
"""markdown -> the dict voicelib.emit_notes expects."""
body = re.sub(re.escape(GEN_START) + r".*?" + re.escape(GEN_END), "", text, flags=re.S)
name_m = re.search(r"^# (.+)$", body, re.M)
if not name_m:
raise ValueError(f"{skill_id}: no H1 title")
chunks = {}
for m in re.finditer(r"^##+ (.+?)$\n(.*?)(?=^##+ |\Z)", body, re.M | re.S):
chunks.setdefault(m.group(1).strip(), []).append(m.group(2))
def need(h):
if h not in chunks:
raise ValueError(f"{skill_id}: missing section '## {h}'")
return chunks[h][0]
fields = {"name": name_m.group(1).strip()}
forbidden = None
for heading, key in SECTIONS:
val = _join(need(heading).split("\n"))
if key == "__forbidden":
forbidden = val
else:
fields[key] = val
tics = []
for line in need("Verbal tics").split("\n"):
m = re.match(r"^\s*(\d+)\.\s+(.*)$", line)
if m:
tics.append((int(m.group(1)), m.group(2).strip()))
voices, gloss = {}, {}
for kind in ("Success", "Failure", "Passive"):
sec = need(kind)
q = [l for l in sec.split("\n") if l.strip().startswith(">")]
if not q:
raise ValueError(f"{skill_id}: '### {kind}' has no quoted line")
voices[kind.lower()] = _join([re.sub(r"^\s*>\s?", "", l) for l in q])
g = re.search(r"^\*(.+)\*$", sec.strip(), re.M)
if g:
gloss[kind.lower()] = g.group(1).strip()
fm = re.search(r"(\d+)\s+per hour", need("Firing frequency"))
if not fm:
raise ValueError(f"{skill_id}: could not read firing frequency")
return {
"_header": "SKILL",
"fields": fields,
"tics": tics,
"voices": voices,
"voice_gloss": gloss,
"firing": int(fm.group(1)),
"forbidden": forbidden,
}
def load_json():
with open(JSON_PATH, encoding="utf-8") as fh:
return json.load(fh)
def md_path(skill_id):
return os.path.join(VOICES_DIR, f"{skill_id}.md")
def cmd_to_md(data):
os.makedirs(VOICES_DIR, exist_ok=True)
for s in data["skills"]:
with open(md_path(s["id"]), "w", encoding="utf-8") as fh:
fh.write(to_md(s))
print(f"wrote writing/voices/{s['id']}.md")
def rebuilt(s):
with open(md_path(s["id"]), encoding="utf-8") as fh:
d = from_md(fh.read(), s["id"])
return d, voicelib.emit_notes(d)
def cmd_check(data):
problems = []
for s in data["skills"]:
if not os.path.exists(md_path(s["id"])):
problems.append(f"{s['id']}: writing/voices/{s['id']}.md is missing")
continue
try:
d, notes = rebuilt(s)
except Exception as e:
problems.append(f"{s['id']}: {e}")
continue
if notes != s["notes"]:
problems.append(f"{s['id']}: prose differs from skill_bible.json notes")
if d["fields"]["name"] != s["displayName"]:
problems.append(f"{s['id']}: title differs from displayName")
if d["fields"]["domain"] != s["domain"]:
problems.append(f"{s['id']}: domain differs from the JSON domain field")
if d["firing"] != s.get("targetFiringsPerHour"):
problems.append(
f"{s['id']}: firing frequency {d['firing']} != "
f"targetFiringsPerHour {s.get('targetFiringsPerHour')}")
for p in problems:
print("DRIFT:", p)
if problems:
print(f"\n{len(problems)} problem(s). Run --to-json (prose changed) "
f"or --to-md (machine fields changed).")
return 1
print(f"in sync — {len(data['skills'])} voice sheets")
return 0
def cmd_to_json(data):
changed = []
for s in data["skills"]:
d, notes = rebuilt(s)
if (notes != s["notes"] or d["fields"]["name"] != s["displayName"]
or d["fields"]["domain"] != s["domain"]):
changed.append(s["id"])
s["notes"] = notes
s["displayName"] = d["fields"]["name"]
s["domain"] = d["fields"]["domain"]
s["targetFiringsPerHour"] = d["firing"]
with open(JSON_PATH, "w", encoding="utf-8") as fh:
json.dump(data, fh, indent=2, ensure_ascii=False)
fh.write("\n")
print("updated skill_bible.json" + (f" — changed: {', '.join(changed)}" if changed else " — no prose changes"))
def main():
ap = argparse.ArgumentParser(description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
g = ap.add_mutually_exclusive_group(required=True)
g.add_argument("--to-md", action="store_true")
g.add_argument("--to-json", action="store_true")
g.add_argument("--check", action="store_true")
a = ap.parse_args()
data = load_json()
if a.to_md:
cmd_to_md(data)
elif a.to_json:
cmd_to_json(data)
else:
sys.exit(cmd_check(data))
if __name__ == "__main__":
main()
+120
View File
@@ -0,0 +1,120 @@
"""Parse and re-emit the Skill Bible prose that lives in skill_bible.json.
The `notes` field of each skill is a plain-text sheet with a fixed shape. This
module converts between that string and a structured dict, losslessly, so the
prose can live in writing/voices/*.md and still be folded back into the JSON.
Round-tripping is the whole contract: notes -> dict -> notes must be identity
for every skill in the bible, and check_roundtrip() asserts exactly that.
"""
import re
PROSE_KEYS = [
"name",
"domain",
"what it wants for you",
"what it's wrong about",
"how it addresses you",
"register",
]
# "verbal tics" is handled separately (it carries bullets)
TAIL_KEYS = ["what it never does", "opposed to", "allied with"]
VOICE_RE = re.compile(r'^(SUCCESS|FAILURE|PASSIVE) VOICE(?: — (.*?))?: (.*)$')
FIRING_RE = re.compile(r'^Firing frequency target \(per hour\): (\d+)$')
FORBID_RE = re.compile(r'^Domains it must NOT comment on: (.*)$')
BULLET_RE = re.compile(r'^\* \((\d+)\) (.*)$')
def parse_notes(notes):
"""notes string -> dict. Raises on anything unrecognised."""
out = {"fields": {}, "tics": [], "voices": {}, "voice_gloss": {}}
lines = notes.split("\n")
i = 0
if lines[i].strip() != "SKILL":
raise ValueError("expected a leading SKILL line")
out["_header"] = lines[i]
i += 1
while i < len(lines):
line = lines[i]
if line.strip() == "":
i += 1
continue
m = BULLET_RE.match(line)
if m:
out["tics"].append((int(m.group(1)), m.group(2)))
i += 1
continue
m = VOICE_RE.match(line)
if m:
kind = m.group(1).lower()
out["voices"][kind] = m.group(3)
if m.group(2):
out["voice_gloss"][kind] = m.group(2)
i += 1
continue
m = FIRING_RE.match(line)
if m:
out["firing"] = int(m.group(1))
i += 1
continue
m = FORBID_RE.match(line)
if m:
out["forbidden"] = m.group(1)
i += 1
continue
m = re.match(r"^([a-z][a-z '\-]*): ?(.*)$", line)
if m and m.group(1) in PROSE_KEYS + TAIL_KEYS + ["verbal tics"]:
out["fields"][m.group(1)] = m.group(2)
i += 1
continue
raise ValueError(f"unrecognised line: {line!r}")
return out
def emit_notes(d):
"""dict -> notes string. Inverse of parse_notes."""
L = [d.get("_header", "SKILL")]
for k in PROSE_KEYS:
L.append(f"{k}: {d['fields'][k]}")
L.append("verbal tics:")
for n, text in d["tics"]:
L.append(f"* ({n}) {text}")
for k in TAIL_KEYS:
L.append(f"{k}: {d['fields'][k]}")
L.append("")
for kind in ("success", "failure", "passive"):
gloss = d["voice_gloss"].get(kind)
label = f"{kind.upper()} VOICE"
if gloss:
L.append(f"{label} — {gloss}: {d['voices'][kind]}")
else:
L.append(f"{label}: {d['voices'][kind]}")
L.append("")
L.append(f"Firing frequency target (per hour): {d['firing']}")
L.append(f"Domains it must NOT comment on: {d['forbidden']}")
return "\n".join(L)
def check_roundtrip(skills):
"""Assert notes -> dict -> notes is identity for every skill."""
bad = []
for s in skills:
try:
again = emit_notes(parse_notes(s["notes"]))
except Exception as e:
bad.append((s["id"], f"parse error: {e}"))
continue
if again != s["notes"]:
bad.append((s["id"], "round-trip differs"))
return bad
+55
View File
@@ -0,0 +1,55 @@
# Glossary
In-world and project terms that come up while writing. World history, factions and the timeline
live in the Obsidian vault — `[[Lorebook]]`, `[[Timeline notes]]`,
`[[Divergence Point Analysis]]` — and this file deliberately does not duplicate them. It covers
the vocabulary you need to read a `.yarn` file and a design note without stopping.
## The project's own terms
**Voice** — one of the eleven skills. A character in the protagonist's head, not a stat. See `voices/`.
**Candidate** — one of three live readings of who the protagonist is: the Made Asset, the
Journalist, the Inheritor. They are not mutually exclusive and **never resolve**.
**Lean** — `$self_lean_<candidate>`. A counter of how far play has tilted toward one reading.
Tracks *belief*, not truth, which is why a wrong deduction still moves it.
**Clue** — a registry entry in `Assets/Candidates/candidates.json`. Each candidate has exactly
four: one object, one testimony, one document, one intuition.
**Trace channel** — where a clue physically comes from: physical, testimonial, behavioural,
documentary. Used to keep acquisition routes genuinely independent.
**Wrong Truth** — a failed check that yields a confident, coherent, false conclusion, stated
with no hedge in the prose. The workhorse failure of this game.
**Colour check / gate check** — a check written for texture versus one that controls access to
a route. 80–90% should be colour.
**Bottleneck** — a point every playthrough must pass. Clues required to pass one need multiple
independent routes.
**Detour / jump** — Yarn's two ways to move between nodes; the first returns, the second does not.
**Node group** — several nodes sharing a `title:`, with `when:` conditions selecting between them.
**Thread 2 / Thread 9** — two lore threads designed never to resolve. Do not map candidate
material onto them.
**Fugue** — the protagonist's amnesia. Dissociative, and specifically about their own identity
rather than an external event. The indeterminacy is the design, not a puzzle with a hidden answer.
## The cast so far
| Name | Where | Sheet |
|---|---|---|
| The Bartender | the bar, SC-101 | [`characters/bartender.md`](characters/bartender.md) |
| Chevalier Cassian Thal | the table, SC-101 | [`characters/chevalier-cassian-thal.md`](characters/chevalier-cassian-thal.md) |
| Bradford Kane | the table, SC-101 | [`characters/bradford-kane.md`](characters/bradford-kane.md) |
| Mr. Doss | referenced only, never seen | — |
## Scene ids
`SC101` — The Card at the Desk. The opening; playable end to end.
`SC102` — The figure at the head of the table stands up. A one-line stub.
+96
View File
@@ -0,0 +1,96 @@
# Writing — start here
This directory is the writing surface for **Nightclub Arcadia**. Everything a session needs
to write or revise dialogue lives here or in `Assets/Dialogue/`. You should not need to open
Unity, edit C#, or touch a `.asset` file to write a scene, a character, or a branch. If a
writing task seems to require any of those, that is a pipeline bug — say so rather than
working around it.
## Read in this order
| # | File | What it gives you |
|---|---|---|
| 1 | [`STYLE.md`](STYLE.md) | The register, the five tone moves, the ban list, the rules that govern branching. **Re-read before every session.** |
| 2 | [`YARN-PRIMER.md`](YARN-PRIMER.md) | The one page of Yarn syntax you actually need. |
| 3 | [`voices/`](voices/) | The eleven skill voices, one sheet each. Who they are and how they talk. |
| 4 | [`characters/`](characters/) | The named NPCs. |
| 5 | [`scenes/`](scenes/) | Per-scene briefs — intent, beats, constraints. Not the dialogue. |
| 6 | [`GLOSSARY.md`](GLOSSARY.md) | In-world terms, and where the deep lore lives. |
## Where the words actually go
Playable dialogue lives in **`NightclubArcadia/Assets/Dialogue/`**, not here:
```
Assets/Dialogue/
├── Common.yarn every <<declare>>, project-wide. Never played. Add new flags here.
├── Commentary.yarn passive skill barks, one node per (context, voice)
├── Scenes/ SC101, SC102, Debug
├── Characters/ Bartender, Bradford Kane, Chevalier Cassian Thal
└── Objects/ Chair
```
A new `.yarn` file anywhere under `Assets/Dialogue/` is picked up automatically — the Yarn
project globs `**/*.yarn`. **Adding a scene or a character needs no registration step.**
This directory holds the *context*; `Assets/Dialogue/` holds the *content*. Keep it that way:
never paste dialogue into a sheet here, and never paste a character bio into a `.yarn` file.
## Check your work before handing it back
From the repo root:
```bash
cd tools/YarnCheck && dotnet run -- ../../NightclubArcadia/Assets/Dialogue
```
That compiles every Yarn file and reports errors with line numbers. It needs only the .NET 9
SDK — no Unity, no licence, no Editor. Run it after any dialogue change.
You can also *play* a node from the terminal, choosing options by number:
```bash
dotnet run -- ../../NightclubArcadia/Assets/Dialogue Bartender_Talk 2 2 0 0
```
Leftover picks restart the node, which models the player walking away and coming back.
> **One thing that will confuse you.** YarnCheck stubs the engine's commands, so `<<check>>`
> never runs and `$check_result` is always `false`. **Every check-gated branch will show you
> its failure side.** That is the harness, not a bug in your writing. To read the success
> prose, read the file.
If you edited a voice sheet in `voices/`, also run:
```bash
python3 tools/writing/sync_voices.py --check
```
## What is yours, and what is not
**Yours** — edit freely: everything in `writing/`, every `.yarn` file, the `<<declare>>` lines
in `Common.yarn`, and the prose fields of `Assets/Candidates/candidates.json`.
**Not yours** — ask an engineer: any `.cs` file, anything under `Assets/Editor/`, any
`.asset` / `.prefab` / `.unity` / `.meta` file, and `ProjectSettings/`. The *implementations*
of Yarn commands are code; *using* them is writing.
## The deeper design material
The full design documents live in Obsidian, not in this repo, and remain the authoring home
for design work:
`~/Obsidian-Vaults/obsidian-vault/Projects/Active/NightclubArcadia/`
- `[[Mystery Writing Handbook]]` — the full reference. `STYLE.md` is a dialogue-facing digest of it.
- `[[Skill System Draft]]` — the Skill Bible. `voices/` is generated from the shipped subset.
- `[[Candidate System — Design Explanation]]` — the three identity readings.
- `[[Lorebook]]`, `[[Timeline notes]]`, `[[Divergence Point Analysis]]` — world and history.
- `[[Character Sheet Handbook]]` — the full character schema. `characters/_TEMPLATE.md` is its
dialogue-facing subset.
> **`[[Ground Truth]]` is the solution document. Do not copy it, quote it, or summarise it
> into this repo — not into a sheet, not into a comment, not into a commit message.** The
> game's central premise is that the protagonist's identity never resolves; a copy of the
> answer sitting in a git history is how that leaks. If you need to know whether something
> contradicts the solution, ask, and keep the answer out of the files.
+271
View File
@@ -0,0 +1,271 @@
# Style — the register and the rules
Re-read this before every writing session. It is the anchor against drift, which is the
characteristic failure of a solo writer working across a year.
This is a **dialogue-facing digest**. The full argument for each rule is in
`[[Mystery Writing Handbook]]` in the Obsidian vault; section numbers below point into it.
Where this file and the handbook disagree, the handbook wins — and this file should be fixed.
---
## 1. The register, in one paragraph
Second person, present tense, unreliable. The narration is a committee — eleven voices with
opinions, some of them wrong — and the player is inside the argument rather than being told
its result. Concrete over abstract, always. Roughly seventy percent plain, sincere prose, so
that the flourishes land when they come. Sentimental underneath the cynicism; that is what
makes the cynicism bearable.
## 2. The five tone moves (§6.4)
Learn the moves, use your own words. Do not imitate Disco Elysium's prose — imitate its method.
1. **Concrete over abstract.** Never "the room felt neglected." Name the object that proves it.
The failure mode of introspective writing is abstraction; the fix is always a physical particular.
2. **Bathos with a return trip.** Rise to something genuinely grand, puncture it with the mundane —
*then come back and mean it anyway*. The puncture alone is just irony, and irony alone is cheap.
The return is what makes it humane. This is the most-imitated and least-understood DE move.
3. **Mock, then love.** Every character gets ridiculed by some voice in your head, and every
character then gets one moment where the ridicule is revealed as inadequate to them. No
character exists only as a joke.
4. **The world speaks through failure.** Broken things describe the society that broke them.
Describe what the rent did to the stairwell instead of explaining the political economy.
5. **Second person, present tense, unreliable.** "You" and "now" produce intimacy and complicity.
### The ban list
- **Quirk with no cost.** A voice that is only funny is decoration.
- **Cynicism with no warmth.**
- **Everything is a bit.** Straight, plain, sincere sentences are what make the flourishes work.
- **Trauma as texture.** If suffering is described, someone in the text takes it seriously.
- **Explaining the joke, or the theme.** If the thematic statement appears verbatim in dialogue, cut it.
### Length discipline
| Kind of line | Length |
|---|---|
| Passive skill line | 1–3 sentences |
| Success text | 2–5 sentences |
| Opening frame | 2–4 sentences |
If you are writing a paragraph, you are writing an essay, and the player will skim it — which
trains them to skim everything else. Long passages are earned at high skill ranks, nowhere else.
---
## 3. How voices behave
A skill is a **character**, not a stat. It wants something for you, and it is wrong about
something. Both halves matter: the wrongness is what makes it a voice rather than a hint system.
- **Voices advocate; they do not report.** A line is that voice's own biased reading, even when
it happens to be right. No voice ever states a candidate identity as settled fact.
- **Respect the forbidden domains.** Each sheet in `voices/` ends with "domains it must not
comment on." PROVENANCE does not discuss appetite. This is characterisation, not bookkeeping.
- **Opposed pairs are a writing engine.** Fire both halves of a pair with contradictory readings
and you get friction for free. You never have to invent conflict; the cast contains it.
- **Cap introductions at three voices per scene.** An opening is many players' first contact with
the system, and fewer, stronger first impressions beat a crowded debut.
*(From `[[000_OpeningSceneTemplate]]` §3. SC-101 deliberately breaks this with four — one per
pair, because each candidate needs its intuition channel present from the start. That is a
logged, scene-specific exception. Do not copy it as precedent, and do not "correct" SC-101 down
to three.)*
- **Passives carry the personality.** Roughly 60–70% of all skill text should be passive. They
cost the player nothing and are the main delivery system for character.
---
## 4. Checks (§4.4)
Two kinds, and knowing which you are writing is the whole discipline:
| | **Colour check** | **Gate check** |
|---|---|---|
| Purpose | Voice, texture, insight | Controls access to a clue or route |
| Share of all checks | 80–90% | 10–20% |
| Failure produces | Different *content* | Different *route* |
| Redundancy required | None | Always ≥2 independent routes |
> **A failed gate never removes content. It replaces one route with another.**
**The two-outcome test — apply before writing any check.** Write the one-line summary of the
success and the one-line summary of the failure. If the failure summary is *"the player doesn't
get the thing"*, delete the check.
Other rules that bind:
- **Never roll for what a competent detective would just do.** If failing is boring, don't roll.
Roll only where *both* outcomes are content you want to write.
- **Rate-limit active checks** to roughly one per 3–5 minutes of play. Prose rhythm dies under
constant dice.
- **Use the band names,** not raw numbers: `Trivial` 8, `Routine` 11, `Hard` 14, `Specialist` 17,
`BuildDefining` 20. No in-between values.
### The five productive failures (§4.5)
Never write a failure that means "nothing happens." Every failed check produces one of:
| Type | What happens | Best for |
|---|---|---|
| **Wrong Truth** | A confident, coherent, *false* conclusion | Reason/perception checks |
| **Cost** | You get it, and pay — reputation, a relationship, a secret, time | Social checks |
| **Detour** | This route closes, an uglier one opens | Gate checks |
| **Character** | You learn nothing about the case and something about yourself | Self checks |
| **Delayed** | Noted now, resurfaces later at a worse moment | Act transitions |
Rough distribution across the game: 30% Wrong Truth, 25% Cost, 20% Detour, 15% Character,
10% Delayed. Wrong Truth is the workhorse of a mystery and is badly underused in most games.
### The Wrong Truth rule — the one that is easiest to get wrong
**A voice that fails does not signal that it failed.** It states its wrong conclusion with
exactly the same confidence, cadence and structure as a correct one. The player learns it was
wrong through contradiction, later.
The honest version of the trick: the *roll* is visibly failed in the UI. The player knows a
roll failed; they do not know which part of what follows is contaminated. **The UI banner is
the only tell. Never put a hedge, a wobble, or a wink in the prose.**
Compare the two PROVENANCE samples in `voices/provenance.md` — same cadence, same calm, one
unearned verb. That is the target.
---
## 5. Branching shapes (§2.7)
Three shapes. Default to the first.
**A. Hub-and-spoke — ~80% of conversations.** Topics are spokes that return to a hub.
Reconvergence is structural, so you get it for free, and cost is linear in topics rather than
exponential. `Chair.yarn` is the worked example in this project.
**B. Short branching tree — ~15%, for confrontations.** Depth ≤ 3. Always reconverge inside the
scene. Track the outcome flag, not the path.
**C. True divergence — 3–5 moments in the entire game.** Endings, the culprit confrontation, one
or two irreversible choices. Budget these explicitly.
**The 3-deep cap.** No conditional nested more than three levels. If you need four, you have a
state that should be a flag rather than a path.
### Node naming
Existing conventions in this project, which new content should match:
| Pattern | Used for |
|---|---|
| `<Character>_Talk` | a character's entry node (`Bartender_Talk`) |
| `SC###_Hook_<Subject>` | a scene beat or sub-conversation |
| `Commentary_<Context>_<voice_id>` | a passive bark |
---
## 6. Flags and variables
**Every variable must be `<<declare>>`d in `Common.yarn`.** That is what turns `$reputaton`
into a compile error instead of a silently-created second variable. Adding a flag is a writing
action — you do not need an engineer.
Families that are load-bearing, two of them lint-enforced against the candidate registry:
| Family | Meaning | Enforced |
|---|---|---|
| `$self_lean_<candidate_id>` | identity lean | yes — id must exist in `candidates.json` |
| `$found_<clue_id>` | clue coverage | yes — id must exist in `candidates.json` |
| `$visited_<location_id>` | first arrival at a location | convention |
| `$errand_<errand_id>` | errand reached a state that matters | convention |
| `$seen_<scene_id>` | scene witnessed | convention |
| `$spoke_to_<character>` | first conversation happened | convention |
| `$check_*` | written by `<<check>>` | **never `<<set>>` by hand** |
### The candidate rules — these are hard constraints
The protagonist's identity has three live readings and **never resolves**. Three integers track
belief, not truth.
1. **Never compare one lean against another.** Not in Yarn, not in prose, not in a debug line.
Comparing a lean to a *constant* is fine and intended. `$self_lean_a > $self_lean_b` must
not exist anywhere.
2. **No ground-truth field.** Nothing named `isTrue`, `actualIdentity`, `canonical`, or `weight`.
3. **Clue availability is exploration-gated, never skill-gated.** An `unlockFlag` names a
`$visited_*` or `$errand_*` variable. A clue-bearing node never sits behind a `skill_rank(` guard.
4. **Evidence balance.** Each candidate carries exactly one object, one testimony, one document,
and one intuition clue. Do not stack types, or trust becomes an artefact of imbalance.
5. **Lean is belief, so a Wrong Truth still writes lean.** Being wrong moves the needle. That is
the point.
### Two threads that never resolve
The project has two permanently unresolved lore threads, referred to as **Thread 2** and
**Thread 9**. Candidate material must stay structurally separate from them: do not resolve
them, do not map a candidate clue onto them. If you find yourself needing to know what they
contain in order to write a line, you are writing the wrong line.
---
## 7. Flow control
`<<detour>>` returns to the caller. `<<jump>>` does not, and clears the return stack.
- A node started directly by an interactable has nothing waiting on it, so its branches
`<<jump>>`, and each destination calls `<<enter_environment>>` itself.
- A sub-conversation that must resume its caller uses `<<detour>>` — and **never** `<<jump>>`
inside it, which would strand the caller forever.
- A menu that loops uses `<<jump>>` back to its own hub, which replaces the current node and
pushes nothing.
Nodes sharing a `title:` form a **node group**; Yarn runs the most specific variation whose
`when:` conditions pass. Prefer adding a variation over growing an `<<if>>` chain.
---
## 8. Writing order for a scene (§5.5)
1. Fill the scene brief header — purpose and critical outputs. **Stop.** Confirm the clue routes
are registered in `Assets/Candidates/candidates.json`.
2. Write the beats as one-line summaries.
3. Write the checks table — *both* outcomes as summaries, before any prose.
4. Now write prose, in this order: opening frame → success texts → failure texts → passives → barks.
5. Update clue `status` in `candidates.json`.
Do not implement in engine until the act is drafted. Implementing mid-draft is the biggest time
sink in solo narrative work, because every structural revision then costs double.
---
## 9. The voice sheet
Five sentences to be proud of, five to cut, three adjectives, one sentence on what the game
feels about its world. This is the anchor §6.5 asks for and it is cheaper than re-reading your
own draft.
**Three adjectives for the register:** *(unset — decide these and stop leaving the field open)*
**What the game feels about its world:** *(unset)*
**Five sentences to be proud of** — provisional, taken from shipped SC-101 and the Skill Bible,
to be replaced with chosen ones:
> The mahogany doors are too heavy for the hinges someone recently, badly, tightened — you feel
> the extra half-second of resistance before either side gives.
> Someone left a card with your name on it at the registration desk three hours before you
> decided to come. You don't remember deciding.
> Cigar smoke, spilled aperitif, and under it — cold, sharp — the ammonia bite of a floor mopped
> in a hurry, love. Someone's trying to make this room smell like money. It smells like panic
> with good cologne on top.
> A line that begins nowhere is a line somebody drew.
> Her hands are wrong for that coat. It's somebody's good coat, and it isn't hers.
**Five to cut:** *(unset — write these next session; the cut list is the more useful half,
because it names the specific temptations this project keeps giving in to)*
> This section is deliberately incomplete. `[[NightclubArcadia]]` has carried "Write the one-page
> Voice Sheet" as an open action for a while, and `[[000_OpeningSceneTemplate]]` records tone
> checks as **BLOCKED** on it — the SC-101 spec could not honestly certify its own tone field.
> Filling the four unset fields above unblocks that. It is a half-hour of decisions, not a
> writing project.
+149
View File
@@ -0,0 +1,149 @@
# Yarn, in one page
Everything below is used somewhere in `Assets/Dialogue/`. Nothing else is needed to write a
scene. Full language docs: <https://docs.yarnspinner.dev>.
## A file
```
// Comments start with two slashes. Use them — this project keeps its design
// reasoning in file headers, and that is the record of why things are the way
// they are. Do not strip them.
title: Bartender_Talk
---
Bartender: Ah, {$player_alias}, back again?
Narrator: What does he mean? "Back again?"
===
```
`title:` names the node. `---` ends the header, `===` ends the node. One file can hold many
nodes. A `position:` line may appear in the header — that is the graph editor's coordinates,
not something you write by hand.
## Who is speaking
The text before the first colon is the speaker.
```
Narrator: The mahogany doors are too heavy for the hinges.
Bartender: What can I get ya?
PROVENANCE: Nineteen sixty-nine, the licence.
```
Skill voices are spoken in **UPPERCASE**, exactly as they appear in `voices/`. `Narrator:` is
the room and the body. A named character uses their display name.
## Player choices
```
-> Back? I have never been here.
<<set $revealed_fugue_to_bartender = true>>
Narrator: The bartender squints with a critical look.
-> Yes. I'll take the usual.
Narrator: He doesn't even flinch.
```
Indentation is what nests the consequence under the option. Options are presented together;
whichever is chosen runs its indented block.
## Conditions
```
<<if $spoke_to_bartender>>
Bartender: Ah, still hazy? A drink?
<<elseif $reputation > 10>>
Bartender: On the house.
<<else>>
Bartender: And you are?
<<endif>>
```
Comparison words also work: `eq`, `neq`, `gt`, `lt`, `gte`, `lte`, `and`, `or`, `not`.
## Variables
Every variable must first be declared in `Common.yarn`:
```
<<declare $spoke_to_bartender = false as bool>>
<<declare $reputation = 0 as number>>
<<declare $player_name = "Vesper" as string>>
```
Then set and read it anywhere:
```
<<set $spoke_to_bartender = true>>
<<set $self_lean_made_asset += 1>>
Bartender: Ah, {$player_alias}.
```
`{$variable}` interpolates into a line. **If you skip the `<<declare>>`, the compiler cannot
catch your typos** — that is the entire reason `Common.yarn` exists.
## Moving between nodes
```
<<detour Chevalier_Cassian_Thal_Talk>> // goes there, comes BACK here
<<jump SC101_Hook_Menu_Chair_Interaction>> // goes there, never returns
<<stop>> // ends the conversation immediately
```
Getting this wrong is the most common structural bug in this project. See `STYLE.md` §7 —
and never `<<jump>>` out of a node you were `<<detour>>`ed into.
## Node groups — variations without an if-chain
Several nodes may share one `title:`. Yarn runs the most specific variation whose `when:`
conditions pass:
```
title: Bartender_Talk
when: $reputation > 10
---
Bartender: Your money's no good here.
===
```
Callers just `<<detour Bartender_Talk>>` and do not care which variation ran. Adding a new
situation later means adding a node, not editing a growing `<<if>>`.
## The commands this game adds
| Syntax | What it does |
|---|---|
| `<<check <voice> <Band>>>` | Roll. Bands: `Trivial` `Routine` `Hard` `Specialist` `BuildDefining`. Writes `$check_result` and the other `$check_*` variables. |
| `<<skill_mod <source> <voice> <n>>>` | Temporary modifier. `source` is a bucket key, e.g. `scene`, `drunk`. |
| `<<clear_skill_mods <source>>>` | Drops a bucket. |
| `<<enter_environment>>` | Hands control back to the world. Ends the dialogue cleanly. |
And two functions:
| Syntax | What it returns |
|---|---|
| `skill_rank(<voice>)` | the player's rank in that voice |
| `top_skill(a, b, …)` | the highest of the named voices — **returns its FIRST argument on a tie**, so argument order is a design decision |
A check in practice:
```
<<check provenance Hard>>
<<if $check_result>>
PROVENANCE: Basel? Makes total sense.
<<else>>
PROVENANCE: This is probably related to Switzerland.
<<endif>>
```
Note that the failure branch is written with the same confidence as the success branch. That is
the Wrong Truth rule, and it is not optional — `STYLE.md` §4.
## Checking your work
```bash
cd tools/YarnCheck && dotnet run -- ../../NightclubArcadia/Assets/Dialogue
```
Remember that this harness never runs `<<check>>`, so `$check_result` is always `false` and you
will only ever see failure branches when playing through it.
+63
View File
@@ -0,0 +1,63 @@
---
id: <kebab-case-id>
name: <exact string used as the Yarn speaker prefix>
chr: CHR-### # the vault sheet this projects from, if one exists
yarn_file: Assets/Dialogue/Characters/<File>.yarn
status: planned # planned | drafted | in-engine | tested
scenes: [SC101]
---
# <Name>
> **This is the dialogue-facing sheet.** The full character record — placement in the Lorebook,
> faction row, the two truths, sensitivity check, continuity hooks — lives in the vault at
> `[[Character Sheet Handbook]]`, one file per character. Fill that one *first* for any figure
> who touches real history or a faction. This sheet exists so a writing session can pick the
> character up and write them without loading all of it.
## Who they are
One paragraph. What they want *tonight*, in this room — not their life goal.
## How they speak
Register in three adjectives. Sentence length. Do they contract? Do they use the player's name,
and which form — `{$player_name}`, `{$player_name_full}`, or `{$player_alias}`? Anything a
reader could imitate.
## Verbal tics
At most two. More than two is a costume, not a voice.
## What they never say or do
The negative constraints. Usually more useful than the positive ones.
## What they know
One row per thing the player can learn from them. "Reveals when" names the actual condition;
"records" names the flag that remembers it.
| They know | True? | Reveals when | Records |
|---|---|---|---|
| | | | |
## What they are wrong about
Where their confidence outruns their information. This is what makes them a source of Wrong
Truths rather than an oracle.
## Their read on the protagonist
Which candidate reading, if any, they push — and what happens if the player agrees or refuses.
Remember they advocate; they never state an identity as settled fact.
## One line that is 100% them
Written now, before a scene needs it.
> "..."
## Open threads
What is unwritten, unresolved, or deliberately left open. Link the vault note if there is one.
+79
View File
@@ -0,0 +1,79 @@
---
id: bartender
name: Bartender
chr: —
yarn_file: Assets/Dialogue/Characters/Bartender.yarn
status: drafted
scenes: [SC101]
---
# The Bartender
## Who they are
He is behind the bar at a conference that is pretending to be a party, and he has been behind
it long enough to have opinions he will not offer. He recognises the protagonist. He is certain
he has served them before, with Mr. Doss, a few days ago — and he says so casually, the way you
mention the weather, without any idea that he has just detonated something. What he wants
tonight is an ordinary shift. He is not going to get one.
FACEWORK reads him as a watcher: a man who tends the bar *and* observes, and reports back. That
reading is FACEWORK's, and FACEWORK advocates rather than reports — it may well be wrong. Do
not resolve it in his prose.
## How they speak
Warm, clipped, incurious on the surface. Short sentences. Contracts freely — "What can I get
ya?" He uses `{$player_alias}`, the club name, never the real one. That detail is load-bearing:
he knows the protagonist by a name the protagonist does not remember choosing.
## Verbal tics
1. Opens with "Ah," — recognition offered before it is earned.
2. Names the drink rather than the person: "One Estate coming right up."
## What they never say or do
He never asks why the protagonist does not remember. He notices the strangeness, files it, and
pours. He never raises the matter of Doss himself — he answers about him, and only when asked.
## What they know
| They know | True? | Reveals when | Records |
|---|---|---|---|
| The protagonist has been here before | believed, unverified | first conversation, unprompted | `$spoke_to_bartender` |
| They were with Mr. Doss "a few days ago" | believed, unverified | if the player denies having been here | `$looking_for_doss` |
| Their usual drink is the Estate | believed | on ordering, or "what can you recommend" | `$had_the_estate_drink` |
## What they are wrong about
Possibly nothing. Possibly the entire identification. He is confident and casual, which is
exactly the register a Wrong Truth wears — except this one is his, not a voice's. Whether the
protagonist was ever here is not settled by him saying so, and the writing must not let his
certainty function as proof.
## Their read on the protagonist
He pushes the **Made Asset** reading without meaning to — someone known here, under a name they
do not remember, in company they cannot account for. Revealing the fugue to him sets
`$revealed_fugue_to_bartender` and adds to `$self_lean_made_asset`. Claiming "the usual" instead
adds to `$self_lean_inheritor` — a person with a standing order is a person with a past here.
Note the drink beat writes lean in **both directions**: agreeing the Estate tastes familiar adds
to the Inheritor lean, denying it subtracts. It is the one place a player can actively push a
lean down, and it only counts on the first glass.
## One line that is 100% them
> "I could have sworn you are {$player_alias}, weren't you with Mr. Doss a few days ago?"
## Open threads
`SC101_Hook_Questions_Bartender_Talk` is **placeholder text** — literally "Question 1 / Answer
1". It is a working hub-and-spoke loop with nothing in it. This is the single largest piece of
unwritten dialogue in the shipped scene, and the natural home for testimony-channel clues,
which the candidate registry currently lists as `Planned` for all three candidates.
Mr. Doss never appears. He is referenced by the Bartender and by Chevalier Cassian Thal, who
calls him "your friend" — two independent sources treating the protagonist's connection to him
as established fact.
+70
View File
@@ -0,0 +1,70 @@
---
id: bradford-kane
name: Bradford Kane
chr: —
yarn_file: Assets/Dialogue/Characters/Bradford Kane.yarn
status: planned
scenes: [SC101]
---
# Bradford Kane
> **Effectively unwritten.** `Bradford_Kane_Talk` contains one line — `<<set
> $spoke_to_bradford_kane = true>>` — and nothing else. The chair menu already offers him as an
> option in every variation, so a player can introduce themselves to him and receive silence.
> This is the most visible gap in SC-101.
## Who they are
*Unwritten.* What exists: he is the gentleman on the protagonist's **right** at the table, the
one seated further from the head than Chevalier Cassian Thal. That is the whole of it.
The structural role is available and worth taking deliberately: the chair scene currently has
one talker and one silence, and the menu variations (`Left_Not_Right`, `Right_Not_Left`, `Both`)
are already built to track both conversations independently. The architecture is waiting for him.
## How they speak
*Unwritten.* One constraint worth honouring: he should not be a second Chevalier. Cassian Thal
is courteous, archaic and institutional. If Kane is also old money at ease, the table has one
voice twice. The name reads American against Thal's continental title — that contrast is free
and probably should be used.
## Verbal tics
*Unwritten.* Maximum two.
## What they never say or do
*Unwritten.*
## What they know
| They know | True? | Reveals when | Records |
|---|---|---|---|
| — | — | — | `$spoke_to_bradford_kane` (set, currently unused by any branch) |
The candidate registry lists **testimony** clues as `Planned` for all three candidates, with no
`sceneId`. Kane is the obvious carrier for at least one: he is already placed, already
reachable, and already has a flag recording that the player met him.
## What they are wrong about
*Unwritten.*
## Their read on the protagonist
*Unwritten.* Note the design constraint before choosing one: Chevalier Cassian Thal already
implements the "mirror the leading lean back at the player" mechanic. Kane should not repeat it.
A contrast would be stronger — a figure who reads the protagonist as one specific thing and
does not update, or one who declines to guess at all.
## One line that is 100% them
*Unwritten. Write this first — it is the cheapest way to find out who he is.*
## Open threads
Everything. Before drafting, fill the vault character sheet (`[[Character Sheet Handbook]]`) —
§1 placement and §2 the two truths — because he does not yet have a faction row, and writing him
before that is exactly the failure mode that document exists to prevent.
@@ -0,0 +1,88 @@
---
id: chevalier-cassian-thal
name: Chevalier Cassian Thal
chr: —
yarn_file: Assets/Dialogue/Characters/Chevalier Cassian Thal.yarn
status: drafted
scenes: [SC101]
---
# Chevalier Cassian Thal
## Who they are
A knight, of Basel and Cyprus, seated at the table nearer the head than the protagonist is. He
introduces himself with a bow and a half-open fist to the forehead — an old form, performed
without irony. Old money, and comfortable in it. He is here as part of something ("the Knight's
compromise", "our friends of the Vaselian Concordat") and he speaks about it as though everyone
at the table already knows, because in his world everyone does.
He is the scene's mirror: whatever the protagonist has been leaning toward, he names it back at
them, gently, and waits. He is rarely wrong in matters like these, as he will tell you.
## How they speak
Courteous, archaic, warm. Slightly too familiar too quickly — "old chap", "my boy" — which reads
as class rather than affection. He uses `{$player_name_full}`, the formal form, when he is being
precise. He laughs easily and often, including at things that are not jokes.
## Verbal tics
1. Slips into the institutional "we" and "us" without noticing, then does not correct it.
2. Deflects with courtesy rather than refusal — "I am of no right to reveal this."
## What they never say or do
He never threatens and never withholds coldly; every evasion is dressed as politeness. He does
not name the Concordat's business outright, and he never breaks the fiction that the protagonist
already belongs at this table.
## What they know
| They know | True? | Reveals when | Records |
|---|---|---|---|
| He is of Basel and Cyprus | true | on introduction | `$spoke_to_chevalier_cassian_thal` |
| Cyprus connects to something he won't name | true | `<<check provenance Hard>>` succeeds, then the player inquires | `$inquired_about_cyprus` |
| Mr. Doss can explain the Cyprus connection | believed | on inquiring about Cyprus | `$looking_for_doss` |
| Something is about to happen at the table | true | after the protagonist declares a reading | `$declared_candidate_to_chevalier_cassian_thal` |
## What they are wrong about
He is certain he knows what the protagonist is. He is working from whatever the protagonist has
been projecting — which is to say from the lean, which is belief rather than truth. His
confidence is sincere and is not evidence. When he says "I am rarely wrong in matters like
these", that is characterisation, not a hint from the author.
## Their read on the protagonist
He is the game's first mirror mechanic. `SC101_Asks_Candidate_Chevalier_Cassian_Thal_Talk`
computes `top_skill(...)` over the three leans and asks the matching question:
| Leading reading | What he asks |
|---|---|
| Made Asset | whether they observe on behalf of the Vaselian Concordat |
| Journalist | whether he will read his answers in tomorrow's paper |
| Inheritor | whether they are here to settle a parent's debts |
Agreeing reinforces that lean. Denying adds to *both other* leans — a refusal is not neutral, it
is a push toward the alternatives. Denial routes to `SC101_Deny_Candidate`, which recomputes the
winner and, if it has not changed, offers the player the chance to reverse; if it has changed,
he simply asks the new question. The player can be walked around this loop.
`made_asset` is passed first to `top_skill`, which returns its first argument on a tie — so an
even score reads as Made Asset. That bias is deliberate.
## One line that is 100% them
> "Well, then let us hope the ... others follow the Knight's compromise."
## Open threads
The Atlantean cross on the place card (`$saw_knights_atlantean_cross_on_place_card`, found via a
`Hard` PROVENANCE check) is never connected to him in dialogue, though he is a knight and the
symbol is a knight's. That connection is available and unwritten.
His faction, the Vaselian Concordat, and "the Knight's compromise" are named but not explained.
Before writing more of him, confirm his faction row against `[[Lorebook]]` §2 — the vault's
`[[Character Sheet Handbook]]` exists specifically because figures drifting from the faction
tables is a logged, repeated failure in this project.
+81
View File
@@ -0,0 +1,81 @@
# The three readings
The protagonist's amnesia is a dissociative fugue, and what is walled off is their own identity
rather than an external event.
**The design is ontological, not epistemic.** There is no single hidden fact of the matter that
the game is withholding and will eventually reveal. The three readings below can overlap and
partially coexist. The player "discovers" an identity by choosing which evidence to trust, and
lean accumulates from play rather than from one declare-your-identity choice at the end.
This is the constraint most likely to be broken by accident, because almost every instinct a
mystery writer has runs the other way. There is no answer. Do not write toward one.
## The candidates
Registry: `Assets/Candidates/candidates.json`. Adding a fourth means a JSON entry, one
`<<declare>>`, and content — never editing a list of three in code.
### The Made Asset — `made_asset`, Reason axis
> The PC was trained, conditioned, or activated by one of the factions for a role near the
> central conference.
Its intuition is fluency: parsing something coded or ritual *before* consciously trying to.
CONFLUENCE carries it.
### The Journalist — `journalist`, Social axis
> The PC came for a specific person, not a story; "journalist" is a cover identity.
Its intuition is a reaction that lands wrong and cannot yet be explained — a flinch that is not
a stranger's flinch. FACEWORK carries it.
### The Inheritor — `inheritor`, Self axis
> This was never the PC's own story; a parent or elder relative had standing or a debt with a
> faction, which passed without full consent.
Its intuition is the body knowing an etiquette the mind never learned — correcting a place
setting by a rule you were never taught. STANDING ORDER carries it.
## Evidence balance
Each candidate carries **exactly one of each type**: one object, one testimony, one document,
one intuition. Never stack types, or trust becomes an artefact of imbalance rather than of play.
Current state — the three intuitions are authored in SC-101; **the other nine clues are all
`Planned` with no scene**:
| | Object | Testimony | Document | Intuition |
|---|---|---|---|---|
| Made Asset | planned | planned | planned | **SC101** (CONFLUENCE) |
| Journalist | planned | planned | planned | **SC101** (FACEWORK) |
| Inheritor | planned | planned | planned | **SC101** (STANDING ORDER) |
Each planned clue already has its unlock flag reserved — `$visited_back_office`,
`$errand_door_list`, `$visited_archives`, and so on. Those flags name the locations and errands
the game still needs.
## Rules that bind
1. **Never compare one lean against another.** Not in Yarn, not in prose, not in a debug line.
Comparing a lean against a *constant* is fine and intended. There is no winner, no
`$dominant_candidate`, no ranking.
2. **No ground-truth field anywhere** — nothing named `isTrue`, `actualIdentity`, `canonical`,
or `weight`, in any file or in save data. Persistence is three integers and some booleans,
and contains no answer.
3. **Clue availability is exploration-gated, never skill-gated.** An `unlockFlag` names a
`$visited_*` or `$errand_*` variable. A clue-bearing node never sits behind `skill_rank(`.
4. **Discovery order must be player-steerable**, so no candidate is reliably surfaced first.
5. **Voices advocate for a reading**, so trust in it tracks which part of the protagonist wants
it to be true. No voice states a candidate as settled fact.
6. **Lean is belief, not truth** — a Wrong Truth still writes lean. Being wrong moves the needle.
7. **Keep clear of Thread 2 and Thread 9.** Those two lore threads never resolve; do not map any
candidate clue onto them.
## Where the rest lives
The full design argument is `[[Candidate System — Design Explanation]]` in the vault. The
implementation plans are `docs/candidate-system-plan.md` and
`docs/candidate-system-implementation-plan.md`.
+86
View File
@@ -0,0 +1,86 @@
---
id: SC###
title: <title>
act: I
status: outlined # outlined | drafted | revised | in-engine | tested
yarn_file: Assets/Dialogue/Scenes/SC###.yarn
location:
reenterable: no
---
# SC-### — <title>
> One scene, one file, ideally one screen of spec. If this brief does not fit on a page, the
> scene is doing too much — split it. That discipline is what lets one writer hold a sixty-scene
> game in their head.
>
> This is the **brief**, not the dialogue. The words live in the `.yarn` file.
## Purpose
One line: what has changed by the end.
## Cast
Speaking characters, and which voices are prominent. **Cap voice introductions at three.**
## Entry conditions
Flags required. "None" is a good answer.
## Critical outputs
Things every build must be able to obtain. Each needs ≥2 independent routes — and independent
means different trace channels, not two checks in the same conversation.
| Clue id | Routes |
|---|---|
| | |
## Optional outputs
Missable by design. One route is fine.
## Shape
`hub-and-spoke` | `short tree` | `divergent`. Default to the first.
## Opening frame
2–4 sentences of establishing prose. Sensory, specific, and including one concrete detail that
does not serve the plot.
## Beats
3–6. Each beat is one exchange or one discovery.
1.
## Checks
Write **both** outcomes as summaries before writing any prose. If the failure summary is "the
player doesn't get the thing", delete the check.
| # | Voice | Colour/Gate | DC band | Success → | Failure type | Failure → |
|---|---|---|---|---|---|---|
| | | | | | | |
## Branch points
| id | The choice | Reconverges at | Persistent effect |
|---|---|---|---|
| | | | |
## Exit states
Keep to ≤3. More than three means this is a hub, not a scene.
## Flags
**Sets:**
**Reads:**
## Constraints specific to this scene
Anything a later editor must not "fix". Deliberate exceptions to a general rule go here, with
the reason, so they survive review.
@@ -0,0 +1,135 @@
---
id: SC101
title: The Card at the Desk
act: I
status: in-engine
yarn_file: Assets/Dialogue/Scenes/SC101.yarn
location: The conference hall — registration desk, the bar, the table
reenterable: yes
---
# SC-101 — The Card at the Desk
The opening. Playable end to end, and it exits into SC-102, which is still a one-line stub.
An opening scene is not a normal node in the sandbox. It has no entry conditions and almost
nothing to gate. Its job is to sell the register in one sitting — the voice-committee narration,
the tone, the world's texture of disrepair, and one open question the player carries into Act I.
## Purpose
Establish that the protagonist does not know who they are, that other people appear to, and that
this was arranged before they decided to come.
## Cast
**Speaking:** Narrator, the Bartender, Chevalier Cassian Thal, Bradford Kane (silent — unwritten).
**Voices introduced:** CONFLUENCE (Reason), FACEWORK (Social), STANDING ORDER (Self),
HOUSE POUR (Body). Also appearing: PROVENANCE, AMNESTY, THE FLOAT.
## Entry conditions
None.
## Critical outputs
| Clue id | Routes |
|---|---|
| `made_asset_intuition` | CONFLUENCE hook at the desk (`$visited_desk`) |
| `journalist_intuition` | FACEWORK hook at the desk (`$visited_desk`) |
| `inheritor_intuition` | STANDING ORDER hook at the desk (`$visited_desk`) |
All three are **single-route**, which is acceptable only because they are intuitions rather than
gates: they fire passively, with no roll, so no build can miss them. The object, testimony and
document clues for all three candidates are still `Planned` with no `sceneId` — see the registry
in `Assets/Candidates/candidates.json`.
## Optional outputs
- The Atlantean cross on the place card — `Hard` PROVENANCE, one route, missable by design.
- The Cyprus connection — `Hard` PROVENANCE with Chevalier Cassian Thal, then an inquiry.
- Mr. Doss, surfaced from either the Bartender or the Chevalier — two independent routes.
- The Estate drink, and whether it tastes like the protagonist's own past.
## Shape
Hub-and-spoke throughout. The chair menu (`SC101_Hook_Menu_Chair_Interaction`) is the hub and
re-evaluates which variation shows after every sub-conversation returns.
## Opening frame
> The mahogany doors are too heavy for the hinges someone recently, badly, tightened — you feel
> the extra half-second of resistance before either side gives. Beyond them: a hall built for
> four hundred people politely disagreeing about tariffs, hosting perhaps sixty, none of whom
> look like they've read the programme.
## Beats
1. Arrival at the desk. A card with the protagonist's name, left three hours before they decided
to come. Pure orientation, no plot delivery.
2. Four voices introduce themselves, one per pair, each reading the room differently.
3. The bar. The Bartender recognises someone the protagonist does not remember being.
4. The table. The place card, and a symbol that does not belong in Switzerland.
5. Two seated gentlemen. One of them mirrors back whatever the protagonist has been projecting.
6. Exit into SC-102 once a reading has been declared.
## Checks
| # | Voice | Colour/Gate | DC band | Success → | Failure type | Failure → |
|---|---|---|---|---|---|---|
| 1 | PROVENANCE | colour | Hard | the cross is identified as not-Swiss, sets the flag | Wrong Truth | "This is probably related to Switzerland." Same calm, no hedge. |
| 2 | PROVENANCE | colour | Hard | Basel reads as old money, opens the Cyprus inquiry | Wrong Truth | the inquiry never opens; nothing signals that it existed |
Both are colour, not gates: failure changes what the protagonist believes, never what they can
reach. The desk hooks are **check-free by design** — a roll there would produce a pass/fail state
that reads as evidence about identity, which this scene must not deliver.
## Branch points
| id | The choice | Reconverges at | Persistent effect |
|---|---|---|---|
| B1 | Admit the fugue to the Bartender, or claim "the usual" | bar conversation end | `$revealed_fugue_to_bartender`; lean to Made Asset or Inheritor |
| B2 | Whether the Estate tastes familiar | drink node end | ±1 Inheritor lean, first glass only |
| B3 | Accept or deny the Chevalier's reading | `SC101_Deny_Candidate` loop | `$declared_candidate_to_chevalier_cassian_thal`; lean |
## Flags
**Sets:** `$seen_sc_101`, `$visited_desk`, `$found_*_intuition` (×3), `$spoke_to_bartender`,
`$revealed_fugue_to_bartender`, `$looking_for_doss`, `$had_the_estate_drink`,
`$sat_down_at_table`, `$saw_knights_atlantean_cross_on_place_card`,
`$spoke_to_chevalier_cassian_thal`, `$spoke_to_bradford_kane`, `$inquired_about_cyprus`,
`$declared_candidate_to_chevalier_cassian_thal`, `$self_lean_*`
**Reads:** all of the above, plus `$player_name`, `$player_name_full`, `$player_alias`
## Constraints specific to this scene
These are deliberate. Do not "fix" them.
1. **Four voice introductions, against the cap of three.** One per pair — Self, Body, Social,
Reason — because each candidate carries one intuition from a different voice-pair, and cutting
to three would drop a candidate's intuition channel from its earliest appearance. HOUSE POUR
is the non-lean control and the one to cut if the cap is ever enforced strictly. This is a
logged exception for SC-101 only; do not copy it as precedent elsewhere.
2. **Evidence balance.** Each candidate gets exactly one of each evidence type. Never stack
types, or trust becomes an artefact of imbalance rather than of play.
3. **Beat order is fixed.** Hooks fire in sequence from `SC101_Desk`: STANDING ORDER → HOUSE POUR
→ FACEWORK → CONFLUENCE. Each stays an independently authored node. Never `<<if>>`-guard a
hook on another hook having fired, on any `$self_lean_*`, or on `skill_rank(...)`.
4. **The passive pattern for clue-bearing hooks.** One voice per hook, from the candidate's
attached pair. The line is that character's *argument*, never a report. Exactly one
`$self_lean_*` write, with `$found_<clue_id>` set alongside it.
5. **The body of the scene stays neutral.** No lean, no candidate attachment outside the hooks.
6. **The Chevalier's tie bias.** `top_skill` receives `made_asset` first and returns its first
argument on a tie, so an even score reads as Made Asset. Deliberate, not an accident of
argument order.
## Open work
- `SC101_Hook_Questions_Bartender_Talk` is placeholder text ("Question 1 / Answer 1"). It is a
working loop with nothing in it, and the natural home for the missing testimony clues.
- Bradford Kane is reachable and silent.
- The Atlantean cross is never connected to the knight who is sitting right there.
- Tone could not be certified against a voice sheet when this scene was specced, because one did
not exist. See `STYLE.md` §9 — four fields there still need deciding.
+62
View File
@@ -0,0 +1,62 @@
# The eleven voices
One sheet per skill. A skill in this game is a **character**, not a stat: it wants something for
you, and it is wrong about something. Both halves matter — the wrongness is what makes it a
voice instead of a hint system.
## These files are generated — and they are still the source of truth for the prose
Each sheet has two halves, with truth flowing in opposite directions:
| Half | Direction | Who edits it |
|---|---|---|
| The **prose** — domain, what it wants, what it's wrong about, register, tics, voice samples | `.md` → `skill_bible.json` | **you** |
| The **machine fields** table | `skill_bible.json` → `.md` | an engineer, in the JSON |
So: edit the prose here, freely. Then run, from the repo root:
```bash
python3 tools/writing/sync_voices.py --to-json
```
That folds your words into `Assets/Skills/skill_bible.json`, which Unity turns into the
`SkillDefinition` assets the game reads. Never edit the JSON prose directly — the markdown wins,
and your JSON edit would be overwritten the next time anyone syncs.
To check without changing anything:
```bash
python3 tools/writing/sync_voices.py --check
```
The EditMode suite runs the same check (`VoiceSheetSyncTests`), so drift fails the build rather
than quietly shipping a voice that no longer matches its sheet.
Hard-wrapping a paragraph is fine — lines within a section are rejoined on sync.
## The cast
Four opposed pairs plus three specialists. Opposed pairs are a writing engine: fire both halves
with contradictory readings and the scene generates its own friction.
| Pair / group | Voice | Voice | The argument |
|---|---|---|---|
| Reason | [PROVENANCE](provenance.md) | [CONFLUENCE](confluence.md) | Is the world legible? |
| Body | [HOUSE POUR](house_pour.md) | [THE LONG SHIFT](long_shift.md) | What do we owe the flesh? |
| Social | [FACEWORK](facework.md) | [PLACEMENT](placement.md) | Is understanding others care, or leverage? |
| Self | [AMNESTY](amnesty.md) | [STANDING ORDER](standing_order.md) | Should we keep doing this? |
| Specialist | [UNDISCLOSED](undisclosed.md) | [THE FLOAT](the_float.md) | — |
| Specialist | [ROOM TONE](room_tone.md) | | — |
**Budget scene outputs against eight, not eleven.** CONFLUENCE, AMNESTY and STANDING ORDER
generate almost no clues by design — they are the interior register and the deduction engine.
The clue-producing cast is the other eight.
## Writing a voice well
- It **advocates**, it does not report. Even when it is right, the line is its own biased reading.
- Respect its forbidden domains. Each sheet ends with the domains that voice must not comment on.
PROVENANCE does not discuss appetite. That is characterisation, not bookkeeping.
- A failing voice sounds exactly like a succeeding one. See `../STYLE.md` §4.
- Passive lines are 1–3 sentences and carry most of the personality — aim for 60–70% of all
skill text to be passive.
+87
View File
@@ -0,0 +1,87 @@
---
id: amnesty
---
# AMNESTY
> Voice sheet. **The prose below is the source of truth** — edit it here, then run
> `python3 tools/writing/sync_voices.py --to-json`. The machine table is generated
> from `skill_bible.json`; changing it here does nothing.
## Machine fields
<!-- GENERATED FROM skill_bible.json — do not edit by hand -->
| Field | Value |
|---|---|
| id | `amnesty` |
| axis | Self |
| opposed to | `standing_order` |
| allied with | `house_pour`, `facework` |
| primary channel | Behavioural |
| secondary channel | None |
| clue yield | Low |
| starting rank | 1 |
| target firings/hour | 4 |
| accent colour | rgba(0.72, 0.88, 0.72, 1) |
<!-- END GENERATED -->
## Domain
Relief. Letting go, forgiving, putting a thing down. Also, professionally: recognising when other people have decided to forget something, and by what method they arranged it.
## What it wants for you
Peace for you, tonight, at whatever price tomorrow ends up charging.
## What it's wrong about
It believes forgetting is the same as being forgiven. And it cannot tell your peace from somebody else's advantage — every offer of rest it makes is sincere; some of them are also somebody's plan, and AMNESTY has never once checked whose.
## How it addresses you
Second person, soft, constant use of [pc], the way somebody talks you down off something.
## Register
Kind, tired, absolving.
## What it never does
Lie to you. Press a second time.
## Opposed to
STANDING ORDER
## Allied with
HOUSE POUR, FACEWORK
## Domains it must not comment on
Tactics. Numbers. Other people's guilt — AMNESTY only ever absolves you, and its silence about everyone else is the most frightening thing about it.
## Verbal tics
1. Opens with "It's alright."
2. Offers you an hour. "Give it an hour, [pc]."
## Voice samples
### Success
> "Nobody in this building remembers the fire and three of them were here for it. That isn't damage, [pc]. That's maintenance. Somebody has been keeping this room forgetful."
### Failure
> "It's alright. Nobody is looking for this any more — the people who wanted it are dead or old or somewhere warm. Put it down."
### Passive
> "It's alright. Whatever this room used to be, it's a room where people dance now. That counts for something. It counted for somebody."
## Firing frequency
4 per hour (target).
+91
View File
@@ -0,0 +1,91 @@
---
id: confluence
---
# CONFLUENCE
> Voice sheet. **The prose below is the source of truth** — edit it here, then run
> `python3 tools/writing/sync_voices.py --to-json`. The machine table is generated
> from `skill_bible.json`; changing it here does nothing.
## Machine fields
<!-- GENERATED FROM skill_bible.json — do not edit by hand -->
| Field | Value |
|---|---|
| id | `confluence` |
| axis | Reason |
| opposed to | `provenance` |
| allied with | `undisclosed`, `house_pour` |
| primary channel | Behavioural |
| secondary channel | Testimonial |
| clue yield | Low |
| starting rank | 1 |
| target firings/hour | 9 |
| accent colour | rgba(0.55, 0.68, 0.92, 1) |
<!-- END GENERATED -->
## Domain
Synthesis across distance. Connecting a thing in this room to a thing forty years and a continent away; the shape a long pattern makes; the sense that tonight is a late chapter.
## What it wants for you
For you to be one of the few people alive who can see the shape — and to be right about it out loud, in front of somebody who matters.
## What it's wrong about
It cannot tell authorship from opportunism. If a party benefited, CONFLUENCE concludes that party arranged it. It has no working concept of somebody *reading* an event they did not cause and simply being early — which is how nearly everything in this world is actually done.
## How it addresses you
Second person sliding into first person plural. Leans in. Uses [pc], often twice in a sentence.
## Register
Exhilarated, generous, sleepless.
## What it never does
Concede a coincidence. Ask what would disprove it.
## Opposed to
PROVENANCE
## Allied with
UNDISCLOSED, HOUSE POUR
## Domains it must not comment on
The specifics of money (THE FLOAT's jurisdiction). Your body, ever — pain and fatigue are beneath its notice and that is characterising.
## Verbal tics
1. "Which means—"
2. Counts its steps out loud: "One. Two. Three, and three is the one."
## Voice samples
### Success
*the connection is real and nobody else in the room has made it*
> "One: the room changes hands. Two: the same month, the deliveries stop. Three: nobody has ever asked why a cellar this size under a room this small. Which means the cellar is the older thing and the club is the explanation for it."
### Failure
*identical structure, identical confidence, an inference sitting where an observation should be*
> "Two of them came out of it better off. Which means two of them arranged it, [pc], and the third is the one they're going to leave holding it."
### Passive
> "Every room like this one has a door that only opens from inside. That's not a conspiracy, that's just what rooms are. Which means somebody learned it early and never had to teach it to anybody."
## Firing frequency
9 per hour (target).
+87
View File
@@ -0,0 +1,87 @@
---
id: facework
---
# FACEWORK
> Voice sheet. **The prose below is the source of truth** — edit it here, then run
> `python3 tools/writing/sync_voices.py --to-json`. The machine table is generated
> from `skill_bible.json`; changing it here does nothing.
## Machine fields
<!-- GENERATED FROM skill_bible.json — do not edit by hand -->
| Field | Value |
|---|---|
| id | `facework` |
| axis | Social |
| opposed to | `placement` |
| allied with | `house_pour`, `room_tone` |
| primary channel | Testimonial |
| secondary channel | Behavioural |
| clue yield | High |
| starting rank | 1 |
| target firings/hour | 10 |
| accent colour | rgba(0.72, 0.52, 0.88, 1) |
<!-- END GENERATED -->
## Domain
Reading individuals. Hesitation, rehearsal, the account with a hole in it, whose routine changed this week, who in a room of two is afraid of the other.
## What it wants for you
To be understood as care rather than surveillance — to know people before you have any use for them.
## What it's wrong about
It can only read one face at a time. It believes a crowd is a sum of persons, so it will confidently report the mood of forty people from the three nearest, and it is wrong about rooms roughly as often as it is right about persons. Nobody has ever told it this.
## How it addresses you
Second person, quiet, close. Uses [pc] when it wants you to be gentle with somebody.
## Register
Attentive, tender, precise.
## What it never does
Mock anyone. Report a whole room as a single thing — when it does, it is failing, and that is the tell.
## Opposed to
PLACEMENT
## Allied with
HOUSE POUR, ROOM TONE
## Domains it must not comment on
Money. Machinery. The chronology of events it did not personally witness.
## Verbal tics
1. Describes hands before faces.
2. Ends on a question it does not expect you to answer.
## Voice samples
### Success
> "He gave you the year without being asked for it. People hand you the year when they have rehearsed the year. What else has he practised?"
### Failure
> "The three by the pillar: bored, bored, impatient. The room's flat tonight, [pc]. Nothing is going to happen in here."
### Passive
> "Her hands are wrong for that coat. It's somebody's good coat, and it isn't hers."
## Firing frequency
10 per hour (target).

Some files were not shown because too many files have changed in this diff Show More