Working on quests, moved to CineMachine for camera and started to build out areas, started combat system
This commit is contained in:
@@ -23,3 +23,8 @@ MonoBehaviour:
|
||||
portrayalSprites: []
|
||||
overrideDefaultGibberishAudio: 0
|
||||
gibberishAudioClips: []
|
||||
- characterName: GoblinCampGuard
|
||||
iconsSprites: []
|
||||
portrayalSprites: []
|
||||
overrideDefaultGibberishAudio: 0
|
||||
gibberishAudioClips: []
|
||||
|
||||
845
Assets/Dialogue/GoblinCampGuard.asset
Normal file
845
Assets/Dialogue/GoblinCampGuard.asset
Normal file
@@ -0,0 +1,845 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-5480557833331767576
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e5800231a05eaae43b00503881229245, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: games.okitoki.EasyTalk::EasyTalk.Localization.TranslationLibrary
|
||||
originalLanguage: en
|
||||
translationSets:
|
||||
- counter: 16
|
||||
languageCode: en
|
||||
translations:
|
||||
- id: 0
|
||||
language: en
|
||||
text: GoblinCampGuard
|
||||
- id: 1
|
||||
language: en
|
||||
text: '''ello human and welcome to our impenatrable fort!'
|
||||
- id: 2
|
||||
language: en
|
||||
text: Dun even try 'n' find a way inta 'ere, is super secure!
|
||||
- id: 3
|
||||
language: en
|
||||
text: '''ello ''uman and welcome to our impenatrable fort!'
|
||||
- id: 4
|
||||
language: en
|
||||
text: No, dun look at that 'uman!
|
||||
- id: 5
|
||||
language: en
|
||||
text: Ah com on...
|
||||
- id: 6
|
||||
language: en
|
||||
text: Go away 'uman! Now sad.
|
||||
- id: 7
|
||||
language: en
|
||||
text: '"Sneak" into the goblin camp.'
|
||||
- id: 8
|
||||
language: en
|
||||
text: Walk away, it is not even worth your time.
|
||||
- id: 9
|
||||
language: en
|
||||
text: Player
|
||||
- id: 10
|
||||
language: en
|
||||
text: Time to pay for your crimes!
|
||||
- id: 11
|
||||
language: en
|
||||
text: I have come on behalf of the farmer to drive you from here.
|
||||
- id: 12
|
||||
language: en
|
||||
text: Uuuuh, wot 'uman sayin'?
|
||||
- id: 13
|
||||
language: en
|
||||
text: Farmer is nice 'uman outside trees, gobs like 'im and leave farmer alone.
|
||||
- id: 14
|
||||
language: en
|
||||
text: I am going to enjoy this...
|
||||
- id: 15
|
||||
language: en
|
||||
text: OOOOOOI! Go away 'uman!
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 65aaff45f3a1d794180acfe1b86e7406, type: 3}
|
||||
m_Name: GoblinCampGuard
|
||||
m_EditorClassIdentifier: games.okitoki.EasyTalk::EasyTalk.Nodes.Dialogue
|
||||
version: 1.7.5
|
||||
nodes:
|
||||
- rid: 2559183962979173149
|
||||
- rid: 2559183962979173150
|
||||
- rid: 2559183962979173151
|
||||
- rid: 2559183962979173152
|
||||
- rid: 2559183962979173153
|
||||
- rid: 2559183962979173154
|
||||
- rid: 2559183962979173155
|
||||
- rid: 2559183962979173156
|
||||
- rid: 2559183962979173157
|
||||
- rid: 2559183962979173158
|
||||
- rid: 2559183962979173159
|
||||
- rid: 2559183962979173160
|
||||
- rid: 2559183962979173161
|
||||
- rid: 2559183962979173162
|
||||
- rid: 2559183962979173163
|
||||
- rid: 2559183962979173164
|
||||
- rid: 2559183962979173165
|
||||
- rid: 2559183962979173166
|
||||
- rid: 2559183962979173167
|
||||
- rid: 2559183962979173168
|
||||
translationLibrary: {fileID: -5480557833331767576}
|
||||
maxID: 3709
|
||||
references:
|
||||
version: 2
|
||||
RefIds:
|
||||
- rid: 2559183962979173149
|
||||
type: {class: ConversationNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 6
|
||||
name: CONVERSATION
|
||||
nodeType: 3
|
||||
inputs:
|
||||
- id: 7
|
||||
attachedIds: ee0b0000
|
||||
ownerId: 6
|
||||
connectionType: 1
|
||||
outputs:
|
||||
- id: 8
|
||||
attachedIds: 16070000
|
||||
ownerId: 6
|
||||
connectionType: 1
|
||||
width: 268
|
||||
height: 170
|
||||
xPosition: 439.60144
|
||||
yPosition: 350.9394
|
||||
items:
|
||||
- rid: 2559183962979173169
|
||||
- rid: 2559183962979173170
|
||||
characterName: Player
|
||||
icon:
|
||||
- rid: 2559183962979173150
|
||||
type: {class: ConversationNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 9
|
||||
name: CONVERSATION
|
||||
nodeType: 3
|
||||
inputs:
|
||||
- id: 10
|
||||
attachedIds: ef0b0000
|
||||
ownerId: 9
|
||||
connectionType: 1
|
||||
outputs:
|
||||
- id: 11
|
||||
attachedIds: 2f000000
|
||||
ownerId: 9
|
||||
connectionType: 1
|
||||
width: 268
|
||||
height: 170
|
||||
xPosition: 466.80145
|
||||
yPosition: -37.26063
|
||||
items:
|
||||
- rid: 2559183962979173171
|
||||
- rid: 2559183962979173172
|
||||
characterName: GoblinCampGuard
|
||||
icon:
|
||||
- rid: 2559183962979173151
|
||||
type: {class: TriggerScriptNode, ns: EasyTalk.Nodes.Logic, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 46
|
||||
name: TRIGGER
|
||||
nodeType: 8
|
||||
inputs:
|
||||
- id: 47
|
||||
attachedIds: 0b000000
|
||||
ownerId: 46
|
||||
connectionType: 1
|
||||
- id: 48
|
||||
attachedIds:
|
||||
ownerId: 46
|
||||
connectionType: 5
|
||||
- id: 49
|
||||
attachedIds:
|
||||
ownerId: 46
|
||||
connectionType: 9
|
||||
- id: 50
|
||||
attachedIds:
|
||||
ownerId: 46
|
||||
connectionType: 9
|
||||
- id: 51
|
||||
attachedIds:
|
||||
ownerId: 46
|
||||
connectionType: 9
|
||||
outputs:
|
||||
- id: 52
|
||||
attachedIds:
|
||||
ownerId: 46
|
||||
connectionType: 9
|
||||
- id: 53
|
||||
attachedIds: b0010000
|
||||
ownerId: 46
|
||||
connectionType: 1
|
||||
width: 220
|
||||
height: 320
|
||||
xPosition: 832.4014
|
||||
yPosition: -72.86067
|
||||
triggeredClassName: CameraManager
|
||||
triggeredMethodName: SwitchTo
|
||||
methodSignature: SwitchTo(string)
|
||||
parameterTypes:
|
||||
- string
|
||||
parameterValues:
|
||||
- GoblinCamp
|
||||
triggerType: 0
|
||||
objectTagOrName:
|
||||
- rid: 2559183962979173152
|
||||
type: {class: TriggerScriptNode, ns: EasyTalk.Nodes.Logic, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 115
|
||||
name: TRIGGER
|
||||
nodeType: 8
|
||||
inputs:
|
||||
- id: 116
|
||||
attachedIds: 17070000
|
||||
ownerId: 115
|
||||
connectionType: 1
|
||||
- id: 117
|
||||
attachedIds:
|
||||
ownerId: 115
|
||||
connectionType: 5
|
||||
- id: 118
|
||||
attachedIds:
|
||||
ownerId: 115
|
||||
connectionType: 9
|
||||
- id: 119
|
||||
attachedIds:
|
||||
ownerId: 115
|
||||
connectionType: 9
|
||||
- id: 120
|
||||
attachedIds:
|
||||
ownerId: 115
|
||||
connectionType: 9
|
||||
outputs:
|
||||
- id: 121
|
||||
attachedIds:
|
||||
ownerId: 115
|
||||
connectionType: 2
|
||||
- id: 122
|
||||
attachedIds: 0e090000
|
||||
ownerId: 115
|
||||
connectionType: 1
|
||||
width: 220
|
||||
height: 320
|
||||
xPosition: 1145.8014
|
||||
yPosition: 360.3894
|
||||
triggeredClassName: QuestManager
|
||||
triggeredMethodName: CompleteQuest
|
||||
methodSignature: CompleteQuest(string):bool
|
||||
parameterTypes:
|
||||
- string
|
||||
parameterValues:
|
||||
- 1
|
||||
triggerType: 0
|
||||
objectTagOrName:
|
||||
- rid: 2559183962979173153
|
||||
type: {class: WaitNode, ns: EasyTalk.Nodes.Flow, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 431
|
||||
name: WAIT
|
||||
nodeType: 34
|
||||
inputs:
|
||||
- id: 432
|
||||
attachedIds: 35000000
|
||||
ownerId: 431
|
||||
connectionType: 1
|
||||
outputs:
|
||||
- id: 433
|
||||
attachedIds: d4050000
|
||||
ownerId: 431
|
||||
connectionType: 1
|
||||
width: 110
|
||||
height: 75
|
||||
xPosition: 1113.1306
|
||||
yPosition: 108.54551
|
||||
waitTime: 4
|
||||
- rid: 2559183962979173154
|
||||
type: {class: ConversationNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 561
|
||||
name: CONVERSATION
|
||||
nodeType: 3
|
||||
inputs:
|
||||
- id: 562
|
||||
attachedIds: da050000
|
||||
ownerId: 561
|
||||
connectionType: 1
|
||||
outputs:
|
||||
- id: 563
|
||||
attachedIds: 59020000
|
||||
ownerId: 561
|
||||
connectionType: 1
|
||||
width: 268
|
||||
height: 200
|
||||
xPosition: 1552.8007
|
||||
yPosition: 30.112488
|
||||
items:
|
||||
- rid: 2559183962979173173
|
||||
- rid: 2559183962979173174
|
||||
- rid: 2559183962979173175
|
||||
characterName: GoblinCampGuard
|
||||
icon:
|
||||
- rid: 2559183962979173155
|
||||
type: {class: OptionNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 600
|
||||
name: OPTION
|
||||
nodeType: 4
|
||||
inputs:
|
||||
- id: 601
|
||||
attachedIds: 33020000
|
||||
ownerId: 600
|
||||
connectionType: 1
|
||||
- id: 602
|
||||
attachedIds:
|
||||
ownerId: 600
|
||||
connectionType: 7
|
||||
- id: 604
|
||||
attachedIds:
|
||||
ownerId: 600
|
||||
connectionType: 7
|
||||
outputs:
|
||||
- id: 603
|
||||
attachedIds: 9f030000
|
||||
ownerId: 600
|
||||
connectionType: 1
|
||||
- id: 605
|
||||
attachedIds: 6a020000
|
||||
ownerId: 600
|
||||
connectionType: 1
|
||||
width: 228
|
||||
height: 194
|
||||
xPosition: 1866.8007
|
||||
yPosition: 45.112488
|
||||
items:
|
||||
- rid: 2559183962979173176
|
||||
- rid: 2559183962979173177
|
||||
- rid: 2559183962979173156
|
||||
type: {class: TriggerScriptNode, ns: EasyTalk.Nodes.Logic, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 617
|
||||
name: TRIGGER
|
||||
nodeType: 8
|
||||
inputs:
|
||||
- id: 618
|
||||
attachedIds: 5d020000
|
||||
ownerId: 617
|
||||
connectionType: 1
|
||||
- id: 619
|
||||
attachedIds:
|
||||
ownerId: 617
|
||||
connectionType: 5
|
||||
- id: 620
|
||||
attachedIds:
|
||||
ownerId: 617
|
||||
connectionType: 9
|
||||
- id: 621
|
||||
attachedIds:
|
||||
ownerId: 617
|
||||
connectionType: 9
|
||||
- id: 622
|
||||
attachedIds:
|
||||
ownerId: 617
|
||||
connectionType: 9
|
||||
outputs:
|
||||
- id: 623
|
||||
attachedIds:
|
||||
ownerId: 617
|
||||
connectionType: 2
|
||||
- id: 624
|
||||
attachedIds: bd040000
|
||||
ownerId: 617
|
||||
connectionType: 1
|
||||
width: 220
|
||||
height: 320
|
||||
xPosition: 2171.8008
|
||||
yPosition: 219.11249
|
||||
triggeredClassName: QuestManager
|
||||
triggeredMethodName: FailQuest
|
||||
methodSignature: FailQuest(string):bool
|
||||
parameterTypes:
|
||||
- string
|
||||
parameterValues:
|
||||
- 1
|
||||
triggerType: 0
|
||||
objectTagOrName:
|
||||
- rid: 2559183962979173157
|
||||
type: {class: TriggerScriptNode, ns: EasyTalk.Nodes.Logic, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 926
|
||||
name: TRIGGER
|
||||
nodeType: 8
|
||||
inputs:
|
||||
- id: 927
|
||||
attachedIds: 5b020000
|
||||
ownerId: 926
|
||||
connectionType: 1
|
||||
- id: 928
|
||||
attachedIds:
|
||||
ownerId: 926
|
||||
connectionType: 5
|
||||
- id: 929
|
||||
attachedIds:
|
||||
ownerId: 926
|
||||
connectionType: 9
|
||||
- id: 930
|
||||
attachedIds:
|
||||
ownerId: 926
|
||||
connectionType: 9
|
||||
- id: 931
|
||||
attachedIds:
|
||||
ownerId: 926
|
||||
connectionType: 9
|
||||
outputs:
|
||||
- id: 932
|
||||
attachedIds:
|
||||
ownerId: 926
|
||||
connectionType: 2
|
||||
- id: 933
|
||||
attachedIds: bd040000
|
||||
ownerId: 926
|
||||
connectionType: 1
|
||||
width: 220
|
||||
height: 320
|
||||
xPosition: 2175.8008
|
||||
yPosition: -143.88751
|
||||
triggeredClassName: QuestManager
|
||||
triggeredMethodName: StartQuest
|
||||
methodSignature: StartQuest(string):bool
|
||||
parameterTypes:
|
||||
- string
|
||||
parameterValues:
|
||||
- 1
|
||||
triggerType: 0
|
||||
objectTagOrName:
|
||||
- rid: 2559183962979173158
|
||||
type: {class: ExitNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 1212
|
||||
name: EXIT
|
||||
nodeType: 2
|
||||
inputs:
|
||||
- id: 1213
|
||||
attachedIds: 70020000a5030000
|
||||
ownerId: 1212
|
||||
connectionType: 1
|
||||
outputs: []
|
||||
width: 110
|
||||
height: 75
|
||||
xPosition: 2585.8008
|
||||
yPosition: 171.61249
|
||||
exitPointName:
|
||||
- rid: 2559183962979173159
|
||||
type: {class: TriggerScriptNode, ns: EasyTalk.Nodes.Logic, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 1491
|
||||
name: TRIGGER
|
||||
nodeType: 8
|
||||
inputs:
|
||||
- id: 1492
|
||||
attachedIds: b1010000
|
||||
ownerId: 1491
|
||||
connectionType: 1
|
||||
- id: 1493
|
||||
attachedIds:
|
||||
ownerId: 1491
|
||||
connectionType: 5
|
||||
- id: 1494
|
||||
attachedIds:
|
||||
ownerId: 1491
|
||||
connectionType: 9
|
||||
- id: 1495
|
||||
attachedIds:
|
||||
ownerId: 1491
|
||||
connectionType: 9
|
||||
- id: 1496
|
||||
attachedIds:
|
||||
ownerId: 1491
|
||||
connectionType: 9
|
||||
outputs:
|
||||
- id: 1497
|
||||
attachedIds:
|
||||
ownerId: 1491
|
||||
connectionType: 9
|
||||
- id: 1498
|
||||
attachedIds: 32020000
|
||||
ownerId: 1491
|
||||
connectionType: 1
|
||||
width: 220
|
||||
height: 320
|
||||
xPosition: 1301.3369
|
||||
yPosition: 12.786354
|
||||
triggeredClassName: CameraManager
|
||||
triggeredMethodName: SwitchTo
|
||||
methodSignature: SwitchTo(string)
|
||||
parameterTypes:
|
||||
- string
|
||||
parameterValues:
|
||||
- MainCamera
|
||||
triggerType: 0
|
||||
objectTagOrName:
|
||||
- rid: 2559183962979173160
|
||||
type: {class: ConversationNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 1813
|
||||
name: CONVERSATION
|
||||
nodeType: 3
|
||||
inputs:
|
||||
- id: 1814
|
||||
attachedIds: 08000000
|
||||
ownerId: 1813
|
||||
connectionType: 1
|
||||
outputs:
|
||||
- id: 1815
|
||||
attachedIds: 74000000
|
||||
ownerId: 1813
|
||||
connectionType: 1
|
||||
width: 268
|
||||
height: 170
|
||||
xPosition: 794.60986
|
||||
yPosition: 391.98926
|
||||
items:
|
||||
- rid: 2559183962979173178
|
||||
- rid: 2559183962979173179
|
||||
characterName: GoblinCampGuard
|
||||
icon:
|
||||
- rid: 2559183962979173161
|
||||
type: {class: TriggerScriptNode, ns: EasyTalk.Nodes.Logic, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 2125
|
||||
name: TRIGGER
|
||||
nodeType: 8
|
||||
inputs:
|
||||
- id: 2126
|
||||
attachedIds: 0f090000
|
||||
ownerId: 2125
|
||||
connectionType: 1
|
||||
- id: 2127
|
||||
attachedIds:
|
||||
ownerId: 2125
|
||||
connectionType: 5
|
||||
- id: 2128
|
||||
attachedIds:
|
||||
ownerId: 2125
|
||||
connectionType: 9
|
||||
- id: 2129
|
||||
attachedIds:
|
||||
ownerId: 2125
|
||||
connectionType: 9
|
||||
- id: 2130
|
||||
attachedIds:
|
||||
ownerId: 2125
|
||||
connectionType: 9
|
||||
outputs:
|
||||
- id: 2131
|
||||
attachedIds:
|
||||
ownerId: 2125
|
||||
connectionType: 2
|
||||
- id: 2132
|
||||
attachedIds: af090000
|
||||
ownerId: 2125
|
||||
connectionType: 1
|
||||
width: 220
|
||||
height: 320
|
||||
xPosition: 1743.3597
|
||||
yPosition: 351.98926
|
||||
triggeredClassName: QuestManager
|
||||
triggeredMethodName: StartQuest
|
||||
methodSignature: StartQuest(string):bool
|
||||
parameterTypes:
|
||||
- string
|
||||
parameterValues:
|
||||
- 2
|
||||
triggerType: 0
|
||||
objectTagOrName:
|
||||
- rid: 2559183962979173162
|
||||
type: {class: ConversationNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 2317
|
||||
name: CONVERSATION
|
||||
nodeType: 3
|
||||
inputs:
|
||||
- id: 2318
|
||||
attachedIds: 7a000000
|
||||
ownerId: 2317
|
||||
connectionType: 1
|
||||
outputs:
|
||||
- id: 2319
|
||||
attachedIds: 4e080000
|
||||
ownerId: 2317
|
||||
connectionType: 1
|
||||
width: 268
|
||||
height: 144
|
||||
xPosition: 1397.1097
|
||||
yPosition: 424.48926
|
||||
items:
|
||||
- rid: 2559183962979173180
|
||||
characterName: Player
|
||||
icon:
|
||||
- rid: 2559183962979173163
|
||||
type: {class: ExitNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 2478
|
||||
name: EXIT
|
||||
nodeType: 2
|
||||
inputs:
|
||||
- id: 2479
|
||||
attachedIds: 54080000
|
||||
ownerId: 2478
|
||||
connectionType: 1
|
||||
outputs: []
|
||||
width: 110
|
||||
height: 75
|
||||
xPosition: 2043.3596
|
||||
yPosition: 536.9892
|
||||
exitPointName:
|
||||
- rid: 2559183962979173164
|
||||
type: {class: EntryNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 2725
|
||||
name: ENTRY
|
||||
nodeType: 1
|
||||
inputs: []
|
||||
outputs:
|
||||
- id: 2726
|
||||
attachedIds: db0a0000
|
||||
ownerId: 2725
|
||||
connectionType: 1
|
||||
width: 110
|
||||
height: 75
|
||||
xPosition: -345.38983
|
||||
yPosition: 175.73926
|
||||
entryPointName: Door
|
||||
- rid: 2559183962979173165
|
||||
type: {class: TriggerScriptNode, ns: EasyTalk.Nodes.Logic, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 2778
|
||||
name: TRIGGER
|
||||
nodeType: 8
|
||||
inputs:
|
||||
- id: 2779
|
||||
attachedIds: a60a0000
|
||||
ownerId: 2778
|
||||
connectionType: 1
|
||||
- id: 2780
|
||||
attachedIds:
|
||||
ownerId: 2778
|
||||
connectionType: 5
|
||||
- id: 2781
|
||||
attachedIds:
|
||||
ownerId: 2778
|
||||
connectionType: 9
|
||||
- id: 2782
|
||||
attachedIds:
|
||||
ownerId: 2778
|
||||
connectionType: 9
|
||||
- id: 2783
|
||||
attachedIds:
|
||||
ownerId: 2778
|
||||
connectionType: 9
|
||||
outputs:
|
||||
- id: 2784
|
||||
attachedIds: ec0b0000eb0b0000
|
||||
ownerId: 2778
|
||||
connectionType: 2
|
||||
- id: 2785
|
||||
attachedIds: ea0b0000
|
||||
ownerId: 2778
|
||||
connectionType: 1
|
||||
width: 220
|
||||
height: 320
|
||||
xPosition: -154.13977
|
||||
yPosition: 123.23929
|
||||
triggeredClassName: QuestManager
|
||||
triggeredMethodName: IsQuestActive
|
||||
methodSignature: IsQuestActive(string):bool
|
||||
parameterTypes:
|
||||
- string
|
||||
parameterValues:
|
||||
- 1
|
||||
triggerType: 0
|
||||
objectTagOrName:
|
||||
- rid: 2559183962979173166
|
||||
type: {class: LogicNode, ns: EasyTalk.Nodes.Logic, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 3049
|
||||
name: BOOL LOGIC
|
||||
nodeType: 20
|
||||
inputs:
|
||||
- id: 3050
|
||||
attachedIds: e10a0000
|
||||
ownerId: 3049
|
||||
connectionType: 1
|
||||
- id: 3051
|
||||
attachedIds: e00a0000
|
||||
ownerId: 3049
|
||||
connectionType: 2
|
||||
- id: 3052
|
||||
attachedIds: e00a0000
|
||||
ownerId: 3049
|
||||
connectionType: 2
|
||||
outputs:
|
||||
- id: 3053
|
||||
attachedIds:
|
||||
ownerId: 3049
|
||||
connectionType: 2
|
||||
- id: 3054
|
||||
attachedIds: 07000000
|
||||
ownerId: 3049
|
||||
connectionType: 10
|
||||
- id: 3055
|
||||
attachedIds: 0a000000
|
||||
ownerId: 3049
|
||||
connectionType: 11
|
||||
width: 160
|
||||
height: 120
|
||||
xPosition: 118.36012
|
||||
yPosition: 331.98926
|
||||
logicOperation: 4
|
||||
- rid: 2559183962979173167
|
||||
type: {class: EntryNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 1169
|
||||
name: ENTRY
|
||||
nodeType: 1
|
||||
inputs: []
|
||||
outputs:
|
||||
- id: 1170
|
||||
attachedIds: 99040000
|
||||
ownerId: 1169
|
||||
connectionType: 1
|
||||
width: 110
|
||||
height: 75
|
||||
xPosition: -415.1557
|
||||
yPosition: -434.8136
|
||||
entryPointName: Wall
|
||||
- rid: 2559183962979173168
|
||||
type: {class: ConversationNode, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
nodeId: 1176
|
||||
name: CONVERSATION
|
||||
nodeType: 3
|
||||
inputs:
|
||||
- id: 1177
|
||||
attachedIds: 92040000
|
||||
ownerId: 1176
|
||||
connectionType: 1
|
||||
outputs:
|
||||
- id: 1178
|
||||
attachedIds:
|
||||
ownerId: 1176
|
||||
connectionType: 1
|
||||
width: 268
|
||||
height: 140
|
||||
xPosition: -214.15575
|
||||
yPosition: -433.5636
|
||||
items:
|
||||
- rid: 2559183962979173181
|
||||
characterName: GoblinCampGuard
|
||||
icon:
|
||||
- rid: 2559183962979173169
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: Time to pay for your crimes!
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173170
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: I have come on behalf of the farmer to drive you from here.
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173171
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: '''ello ''uman and welcome to our impenatrable fort!'
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173172
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: Dun even try 'n' find a way inta 'ere, is super secure!
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173173
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: No, dun look at that 'uman!
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173174
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: Ah com on...
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173175
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: Go away 'uman! Now sad.
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173176
|
||||
type: {class: OptionItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: '"Sneak" into the goblin camp.'
|
||||
- rid: 2559183962979173177
|
||||
type: {class: OptionItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: Walk away, it is not even worth your time.
|
||||
- rid: 2559183962979173178
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: Uuuuh, wot 'uman sayin'?
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173179
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: Farmer is nice 'uman outside trees, gobs like 'im and leave farmer
|
||||
alone.
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173180
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: I am going to enjoy this...
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
- rid: 2559183962979173181
|
||||
type: {class: ConversationItem, ns: EasyTalk.Nodes.Common, asm: games.okitoki.EasyTalk}
|
||||
data:
|
||||
text: OOOOOOI! Go away 'uman!
|
||||
audioClip: {fileID: 0}
|
||||
audioClipFile:
|
||||
audioAssetID: 0
|
||||
8
Assets/Dialogue/GoblinCampGuard.asset.meta
Normal file
8
Assets/Dialogue/GoblinCampGuard.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 94b1d13c155755a419788f6943d1541c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 82fc15035885a7f44b4f1d3b74e51bf6
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c868f6d508a1bc241bc0cddce1355984
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: df5e4280c3c2f7340a18d133ae4eae84
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 17ee63f882d6be2449ebecf4610c42be
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4db65af7a2c77044db19761e180cdcbd
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 147755e7df36cbb42af0aaa29e1d77db
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c7cb5eee6412d294ba27acae4e256b57
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ca47119cfdd3a3e469e22f529bd1b47b
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aadf96e6ff3ec4c45817e3c80fd07b3a
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c5fc3d5b230344a4cb0909e00f095977
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1f97c4058121bb747a4da3ff2f4aa3b6
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 20a9bf0e11ca65149a1dbda4e717a94e
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c211f61a8b5d48b44bad6bdbd52a171a
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
5404
Assets/Prefabs/Enemy.prefab
Normal file
5404
Assets/Prefabs/Enemy.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/Enemy.prefab.meta
Normal file
7
Assets/Prefabs/Enemy.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3c7624b3fef3a424890d75535897fd16
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
5350
Assets/Prefabs/NPC.prefab
Normal file
5350
Assets/Prefabs/NPC.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/NPC.prefab.meta
Normal file
7
Assets/Prefabs/NPC.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7e60f5f8f00164b43864848c893e5357
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
18388
Assets/Scenes/Farm.unity
18388
Assets/Scenes/Farm.unity
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,6 +1,8 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
using UnityEngine.AI;
|
||||
using EasyTalk.Controller;
|
||||
using EasyTalk.Nodes;
|
||||
|
||||
public abstract class Character : MonoBehaviour
|
||||
{
|
||||
@@ -34,6 +36,22 @@ public abstract class Character : MonoBehaviour
|
||||
[SerializeField]
|
||||
protected int MaxHp = 10;
|
||||
|
||||
[Header("Dialogue")]
|
||||
public bool hasDialogue = false;
|
||||
[Tooltip("The Dialogue asset for this character. Will be loaded into the central DialogueController.")]
|
||||
public Dialogue dialogue;
|
||||
[Tooltip("Optional: Entry point name for starting dialogue. Leave empty to use default entry point.")]
|
||||
public string dialogueEntryPoint = "";
|
||||
[Tooltip("Name of the GameObject with the central DialogueController. Leave empty to auto-find.")]
|
||||
public string dialogueManagerName = "Manager";
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField]
|
||||
protected bool enableDebugLogs = false;
|
||||
|
||||
// Cache the central DialogueController
|
||||
protected static DialogueController centralDialogueController;
|
||||
|
||||
[Header("Components")]
|
||||
// Optional movement controller reference, assign in inspector if used
|
||||
public NavMeshMovementController MovementController;
|
||||
@@ -219,6 +237,174 @@ public abstract class Character : MonoBehaviour
|
||||
SetFloatIfExists(paramHeadVertical, vertical);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Make character look at a target with head rotation, body rotation when clamped
|
||||
/// </summary>
|
||||
public void LookAtTarget(Transform target)
|
||||
{
|
||||
if (target == null) return;
|
||||
|
||||
Vector3 directionToTarget = target.position - transform.position;
|
||||
directionToTarget.y = 0; // Keep on horizontal plane
|
||||
|
||||
if (directionToTarget.sqrMagnitude < 0.01f) return;
|
||||
|
||||
// Calculate angle to target
|
||||
float angleToTarget = Vector3.SignedAngle(transform.forward, directionToTarget, Vector3.up);
|
||||
|
||||
// Head rotation limits (before body needs to rotate)
|
||||
const float headHorizontalLimit = 60f;
|
||||
|
||||
if (Mathf.Abs(angleToTarget) > headHorizontalLimit)
|
||||
{
|
||||
// Rotate body to face target
|
||||
Quaternion targetRotation = Quaternion.LookRotation(directionToTarget);
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 5f);
|
||||
|
||||
// Reset head to neutral when body rotates
|
||||
SetHeadLook(0f, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Just rotate head
|
||||
float normalizedAngle = angleToTarget / headHorizontalLimit; // -1 to 1
|
||||
SetHeadLook(normalizedAngle, 0f);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when player interacts with this character. Override to add custom behavior.
|
||||
/// </summary>
|
||||
public virtual void OnInteract(GameObject player)
|
||||
{
|
||||
Log($"Interacting with {gameObject.name}");
|
||||
|
||||
// Look at player
|
||||
if (player != null)
|
||||
{
|
||||
LookAtTarget(player.transform);
|
||||
|
||||
// Make player look at this character
|
||||
Character playerChar = player.GetComponent<Character>();
|
||||
if (playerChar != null)
|
||||
{
|
||||
playerChar.LookAtTarget(transform);
|
||||
}
|
||||
}
|
||||
|
||||
if (hasDialogue)
|
||||
{
|
||||
ShowDialogue();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Display dialogue for this character using EasyTalk with centralized DialogueController
|
||||
/// </summary>
|
||||
/// <param name="entryPoint">Optional entry point override. If null/empty, uses dialogueEntryPoint field.</param>
|
||||
protected virtual void ShowDialogue(string entryPoint = null)
|
||||
{
|
||||
// Find the central DialogueController if not cached
|
||||
if (centralDialogueController == null)
|
||||
{
|
||||
centralDialogueController = FindCentralDialogueController();
|
||||
}
|
||||
|
||||
// Check if we have both a controller and dialogue asset
|
||||
if (centralDialogueController != null && dialogue != null)
|
||||
{
|
||||
// Load this character's dialogue into the central controller
|
||||
centralDialogueController.ChangeDialogue(dialogue);
|
||||
|
||||
// Use provided entry point, fallback to field, then default
|
||||
string targetEntryPoint = !string.IsNullOrEmpty(entryPoint) ? entryPoint : dialogueEntryPoint;
|
||||
|
||||
// Play dialogue with optional entry point
|
||||
if (!string.IsNullOrEmpty(targetEntryPoint))
|
||||
{
|
||||
centralDialogueController.PlayDialogue(targetEntryPoint);
|
||||
Log($"{gameObject.name}: Starting EasyTalk dialogue at entry point '{targetEntryPoint}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
centralDialogueController.PlayDialogue();
|
||||
Log($"{gameObject.name}: Starting EasyTalk dialogue");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Warnings for missing components
|
||||
if (centralDialogueController == null)
|
||||
{
|
||||
Debug.LogWarning($"No central DialogueController found. Make sure there's a DialogueController on a GameObject named '{dialogueManagerName}'.", gameObject);
|
||||
}
|
||||
if (dialogue == null)
|
||||
{
|
||||
Debug.LogWarning($"No Dialogue asset assigned to {gameObject.name}. Assign a Dialogue asset in the inspector.", gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public wrapper for UnityEvents or other triggers
|
||||
/// </summary>
|
||||
/// <param name="entryPoint">Optional entry point name. If empty, uses default dialogueEntryPoint.</param>
|
||||
public virtual void StartDialogue(string entryPoint = "")
|
||||
{
|
||||
// Look at player if available
|
||||
if (Player.current != null)
|
||||
{
|
||||
LookAtTarget(Player.current.transform);
|
||||
|
||||
// Make player look at this character
|
||||
Player.current.LookAtTarget(transform);
|
||||
}
|
||||
|
||||
ShowDialogue(entryPoint);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Finds the central DialogueController in the scene
|
||||
/// </summary>
|
||||
protected DialogueController FindCentralDialogueController()
|
||||
{
|
||||
// First, try to find by the specified manager name
|
||||
if (!string.IsNullOrEmpty(dialogueManagerName))
|
||||
{
|
||||
GameObject manager = GameObject.Find(dialogueManagerName);
|
||||
if (manager != null)
|
||||
{
|
||||
DialogueController controller = manager.GetComponent<DialogueController>();
|
||||
if (controller != null)
|
||||
{
|
||||
Log($"Found central DialogueController on '{dialogueManagerName}'");
|
||||
return controller;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: search for any DialogueController in the scene
|
||||
DialogueController foundController = FindAnyObjectByType<DialogueController>();
|
||||
if (foundController != null)
|
||||
{
|
||||
Log($"Found DialogueController via FindAnyObjectByType on '{foundController.gameObject.name}'");
|
||||
return foundController;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Debug logging utility
|
||||
/// </summary>
|
||||
protected void Log(string message)
|
||||
{
|
||||
if (enableDebugLogs)
|
||||
{
|
||||
Debug.Log($"[{GetType().Name}] {message}", gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyStaticAnimatorParams()
|
||||
{
|
||||
if (animator == null) return;
|
||||
@@ -322,6 +508,9 @@ public abstract class Character : MonoBehaviour
|
||||
yield return new WaitForSeconds(attackHoldSeconds);
|
||||
}
|
||||
SetBoolIfExists(paramShoot, false);
|
||||
|
||||
// Wait one frame for animator to process the Shoot_b = false transition
|
||||
yield return null;
|
||||
|
||||
if (restoreWeaponAfterAttack)
|
||||
{
|
||||
|
||||
@@ -19,6 +19,7 @@ public class ClickToMoveInputSystem : MonoBehaviour
|
||||
Vector2 pointerScreenPos;
|
||||
PlayerInteractionController cachedInteraction;
|
||||
NavMeshMovementController cachedMovement;
|
||||
PlayerCombatController cachedCombat;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
@@ -46,11 +47,13 @@ public class ClickToMoveInputSystem : MonoBehaviour
|
||||
{
|
||||
cachedInteraction = null;
|
||||
cachedMovement = null;
|
||||
cachedCombat = null;
|
||||
return;
|
||||
}
|
||||
|
||||
cachedInteraction = Player.current.GetComponent<PlayerInteractionController>();
|
||||
cachedMovement = Player.current.MovementController;
|
||||
cachedCombat = Player.current.GetComponent<PlayerCombatController>();
|
||||
if (cachedMovement == null)
|
||||
{
|
||||
cachedMovement = Player.current.GetComponent<NavMeshMovementController>();
|
||||
@@ -77,6 +80,16 @@ public class ClickToMoveInputSystem : MonoBehaviour
|
||||
return cachedMovement;
|
||||
}
|
||||
|
||||
PlayerCombatController GetCombat()
|
||||
{
|
||||
if (Player.current == null) return null;
|
||||
if (cachedCombat == null || cachedCombat.gameObject != Player.current.gameObject)
|
||||
{
|
||||
CachePlayerReferences();
|
||||
}
|
||||
return cachedCombat;
|
||||
}
|
||||
|
||||
void Log(string message)
|
||||
{
|
||||
if (enableDebugLogs)
|
||||
@@ -189,10 +202,35 @@ public class ClickToMoveInputSystem : MonoBehaviour
|
||||
// First check if right-clicking on a building to interact with it
|
||||
if (Physics.Raycast(ray, out RaycastHit hit, 500f, selectionLayers))
|
||||
{
|
||||
// Check for enemy combat target first
|
||||
var enemy = hit.collider.GetComponentInParent<Enemy>();
|
||||
if (enemy != null)
|
||||
{
|
||||
var combat = GetCombat();
|
||||
if (combat != null)
|
||||
{
|
||||
combat.SetTargetEnemy(enemy);
|
||||
Log($"Set combat target: {enemy.enemyName}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback: move to enemy and look at them
|
||||
var movement = GetMovement();
|
||||
if (movement != null)
|
||||
{
|
||||
movement.MoveToAndLookAt(enemy.transform.position, enemy.transform.position);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for NPC interaction first
|
||||
var npc = hit.collider.GetComponentInParent<NPC>();
|
||||
if (npc != null)
|
||||
{
|
||||
var combat = GetCombat();
|
||||
if (combat != null) combat.ClearCombatTarget();
|
||||
|
||||
var interaction = GetInteraction();
|
||||
if (interaction != null)
|
||||
{
|
||||
@@ -215,6 +253,9 @@ public class ClickToMoveInputSystem : MonoBehaviour
|
||||
var building = hit.collider.GetComponentInParent<Building>();
|
||||
if (building != null)
|
||||
{
|
||||
var combat = GetCombat();
|
||||
if (combat != null) combat.ClearCombatTarget();
|
||||
|
||||
// If building can be entered and has an entry point, move to the door
|
||||
if (building.canEnter && building.entryPoint != null)
|
||||
{
|
||||
@@ -252,6 +293,9 @@ public class ClickToMoveInputSystem : MonoBehaviour
|
||||
var interactiveObject = hit.collider.GetComponentInParent<IInteractiveObject>();
|
||||
if (interactiveObject != null)
|
||||
{
|
||||
var combat = GetCombat();
|
||||
if (combat != null) combat.ClearCombatTarget();
|
||||
|
||||
var interaction = GetInteraction();
|
||||
if (interaction != null)
|
||||
{
|
||||
@@ -277,6 +321,9 @@ public class ClickToMoveInputSystem : MonoBehaviour
|
||||
// If not an interactive object, check for movement destination
|
||||
if (Physics.Raycast(ray, out RaycastHit groundHit, 500f, movementLayers))
|
||||
{
|
||||
var combat = GetCombat();
|
||||
if (combat != null) combat.ClearCombatTarget();
|
||||
|
||||
var movement = GetMovement();
|
||||
if (movement != null)
|
||||
{
|
||||
|
||||
102
Assets/Scripts/Enemy.cs
Normal file
102
Assets/Scripts/Enemy.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class Enemy : Character
|
||||
{
|
||||
[Header("Enemy Settings")]
|
||||
public string enemyName = "Enemy";
|
||||
public int contactDamage = 1;
|
||||
public float aggroRange = 6f;
|
||||
public float attackRange = 1.5f;
|
||||
public float attackCooldown = 1f;
|
||||
public bool autoAcquirePlayer = true;
|
||||
|
||||
|
||||
|
||||
private float nextAttackTime = 0f;
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
base.Update();
|
||||
UpdateTargetAndCombat();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when player interacts with this enemy
|
||||
/// </summary>
|
||||
public override void OnInteract(GameObject player)
|
||||
{
|
||||
// Call base implementation (handles look-at and dialogue)
|
||||
base.OnInteract(player);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void UpdateTargetAndCombat()
|
||||
{
|
||||
if (autoAcquirePlayer && target == null)
|
||||
{
|
||||
TryAcquirePlayer();
|
||||
}
|
||||
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float distance = Vector3.Distance(transform.position, target.transform.position);
|
||||
if (distance > aggroRange)
|
||||
{
|
||||
target = null;
|
||||
if (MovementController != null)
|
||||
{
|
||||
MovementController.Stop();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (MovementController != null)
|
||||
{
|
||||
if (distance > attackRange)
|
||||
{
|
||||
MovementController.MoveTo(target.transform.position);
|
||||
}
|
||||
else
|
||||
{
|
||||
MovementController.Stop();
|
||||
MovementController.SetLookTarget(target.transform.position);
|
||||
}
|
||||
}
|
||||
|
||||
if (distance <= attackRange && Time.time >= nextAttackTime)
|
||||
{
|
||||
nextAttackTime = Time.time + attackCooldown;
|
||||
TriggerAttack();
|
||||
target.TakeDamage(contactDamage);
|
||||
}
|
||||
}
|
||||
|
||||
private void TryAcquirePlayer()
|
||||
{
|
||||
if (Player.current == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float distance = Vector3.Distance(transform.position, Player.current.transform.position);
|
||||
if (distance <= aggroRange)
|
||||
{
|
||||
SetTarget(Player.current);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
// Draw aggro range
|
||||
Gizmos.color = Color.yellow;
|
||||
Gizmos.DrawWireSphere(transform.position, aggroRange);
|
||||
|
||||
// Draw attack range
|
||||
Gizmos.color = Color.red;
|
||||
Gizmos.DrawWireSphere(transform.position, attackRange);
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/Enemy.cs.meta
Normal file
2
Assets/Scripts/Enemy.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7dbaebd502c3bf048a421cc649730492
|
||||
8
Assets/Scripts/Managers.meta
Normal file
8
Assets/Scripts/Managers.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: af098d5ef0d53294e888e6362c26dbae
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
180
Assets/Scripts/Managers/CameraManager.cs
Normal file
180
Assets/Scripts/Managers/CameraManager.cs
Normal file
@@ -0,0 +1,180 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Unity.Cinemachine;
|
||||
|
||||
public class CameraManager : MonoBehaviour
|
||||
{
|
||||
public static CameraManager Instance { get; private set; }
|
||||
|
||||
[System.Serializable]
|
||||
public class CameraEntry
|
||||
{
|
||||
public string id;
|
||||
public CinemachineVirtualCameraBase camera;
|
||||
public int activePriority = 20;
|
||||
public int inactivePriority = 10;
|
||||
}
|
||||
|
||||
[Header("Setup")]
|
||||
public bool dontDestroyOnLoad = true;
|
||||
public bool disableInactiveCameras = false;
|
||||
public CinemachineBrain brain;
|
||||
|
||||
[Header("Cameras")]
|
||||
public List<CameraEntry> cameras = new List<CameraEntry>();
|
||||
|
||||
private readonly Dictionary<string, CameraEntry> cameraLookup = new Dictionary<string, CameraEntry>();
|
||||
private CameraEntry current;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance != null && Instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
|
||||
Instance = this;
|
||||
if (dontDestroyOnLoad)
|
||||
{
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
|
||||
RebuildLookup();
|
||||
if (brain == null)
|
||||
{
|
||||
brain = FindAnyObjectByType<CinemachineBrain>();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
for (int i = 0; i < cameras.Count; i++)
|
||||
{
|
||||
CameraEntry entry = cameras[i];
|
||||
if (entry != null && string.IsNullOrEmpty(entry.id) && entry.camera != null)
|
||||
{
|
||||
entry.id = entry.camera.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RebuildLookup()
|
||||
{
|
||||
cameraLookup.Clear();
|
||||
foreach (CameraEntry entry in cameras)
|
||||
{
|
||||
if (entry == null || entry.camera == null || string.IsNullOrEmpty(entry.id))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!cameraLookup.ContainsKey(entry.id))
|
||||
{
|
||||
cameraLookup.Add(entry.id, entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SwitchTo(string id)
|
||||
{
|
||||
if (string.IsNullOrEmpty(id)) return;
|
||||
if (!cameraLookup.TryGetValue(id, out CameraEntry entry) || entry.camera == null)
|
||||
{
|
||||
Debug.LogWarning($"CameraManager: No camera registered with id '{id}'.", gameObject);
|
||||
return;
|
||||
}
|
||||
|
||||
SwitchTo(entry.camera);
|
||||
}
|
||||
|
||||
public void SwitchTo(CinemachineVirtualCameraBase targetCamera)
|
||||
{
|
||||
if (targetCamera == null) return;
|
||||
|
||||
foreach (CameraEntry entry in cameras)
|
||||
{
|
||||
if (entry == null || entry.camera == null) continue;
|
||||
|
||||
bool isActive = entry.camera == targetCamera;
|
||||
entry.camera.Priority = isActive ? entry.activePriority : entry.inactivePriority;
|
||||
|
||||
if (disableInactiveCameras)
|
||||
{
|
||||
entry.camera.gameObject.SetActive(isActive);
|
||||
}
|
||||
|
||||
if (isActive)
|
||||
{
|
||||
current = entry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public CinemachineVirtualCameraBase GetActiveCamera()
|
||||
{
|
||||
return current != null ? current.camera : null;
|
||||
}
|
||||
|
||||
public void SetFollow(Transform followTarget)
|
||||
{
|
||||
CinemachineVirtualCameraBase cam = GetActiveCamera();
|
||||
if (cam != null)
|
||||
{
|
||||
cam.Follow = followTarget;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetLookAt(Transform lookTarget)
|
||||
{
|
||||
CinemachineVirtualCameraBase cam = GetActiveCamera();
|
||||
if (cam != null)
|
||||
{
|
||||
cam.LookAt = lookTarget;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetDefaultBlend(string style, float time)
|
||||
{
|
||||
if (brain == null)
|
||||
{
|
||||
brain = FindAnyObjectByType<CinemachineBrain>();
|
||||
}
|
||||
|
||||
if (brain != null && System.Enum.TryParse<CinemachineBlendDefinition.Styles>(style, out var blendStyle))
|
||||
{
|
||||
brain.DefaultBlend = new CinemachineBlendDefinition(blendStyle, time);
|
||||
}
|
||||
}
|
||||
|
||||
public void RegisterCamera(string id, CinemachineVirtualCameraBase cam, int activePriority = 20, int inactivePriority = 10)
|
||||
{
|
||||
if (cam == null || string.IsNullOrEmpty(id)) return;
|
||||
|
||||
CameraEntry entry = new CameraEntry
|
||||
{
|
||||
id = id,
|
||||
camera = cam,
|
||||
activePriority = activePriority,
|
||||
inactivePriority = inactivePriority
|
||||
};
|
||||
|
||||
cameras.Add(entry);
|
||||
RebuildLookup();
|
||||
}
|
||||
|
||||
public void UnregisterCamera(string id)
|
||||
{
|
||||
if (string.IsNullOrEmpty(id)) return;
|
||||
|
||||
for (int i = cameras.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (cameras[i] != null && cameras[i].id == id)
|
||||
{
|
||||
cameras.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
RebuildLookup();
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/Managers/CameraManager.cs.meta
Normal file
2
Assets/Scripts/Managers/CameraManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 301957f69b431174f9fb965be9b869db
|
||||
@@ -1,6 +1,4 @@
|
||||
using UnityEngine;
|
||||
using EasyTalk.Controller;
|
||||
using EasyTalk.Nodes;
|
||||
|
||||
public enum NPCType
|
||||
{
|
||||
@@ -18,27 +16,11 @@ public class NPC : Character
|
||||
public string npcName = "NPC";
|
||||
public NPCType npcType = NPCType.Villager;
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField]
|
||||
private bool enableDebugLogs = false;
|
||||
|
||||
[Header("Interaction Capabilities")]
|
||||
public bool hasDialogue = true;
|
||||
public bool isQuestGiver = false;
|
||||
public bool isMerchant = false;
|
||||
public bool isTrainer = false;
|
||||
|
||||
[Header("EasyTalk Integration")]
|
||||
[Tooltip("The Dialogue asset for this NPC. Will be loaded into the central DialogueController.")]
|
||||
public Dialogue dialogue;
|
||||
[Tooltip("Optional: Entry point name for starting dialogue. Leave empty to use default entry point.")]
|
||||
public string dialogueEntryPoint = "";
|
||||
[Tooltip("Name of the GameObject with the central DialogueController. Leave empty to auto-find.")]
|
||||
public string dialogueManagerName = "Manager";
|
||||
|
||||
// Cache the central DialogueController
|
||||
private static DialogueController centralDialogueController;
|
||||
|
||||
[Header("Fallback Dialogue (if no EasyTalk)")]
|
||||
[TextArea(3, 10)]
|
||||
public string greetingText = "Hello, traveler!";
|
||||
@@ -58,15 +40,12 @@ public class NPC : Character
|
||||
/// <summary>
|
||||
/// Called when player interacts with this NPC
|
||||
/// </summary>
|
||||
public virtual void OnInteract(GameObject player)
|
||||
public override void OnInteract(GameObject player)
|
||||
{
|
||||
Log($"Interacting with {npcName} ({npcType})");
|
||||
|
||||
if (hasDialogue)
|
||||
{
|
||||
ShowDialogue();
|
||||
}
|
||||
// Call base implementation (handles look-at and dialogue)
|
||||
base.OnInteract(player);
|
||||
|
||||
// NPC-specific interactions
|
||||
if (isQuestGiver && !string.IsNullOrEmpty(questId))
|
||||
{
|
||||
//OfferQuest(player);
|
||||
@@ -84,80 +63,18 @@ public class NPC : Character
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Display dialogue for this NPC using EasyTalk with centralized DialogueController
|
||||
/// Override to add NPC-specific dialogue fallback
|
||||
/// </summary>
|
||||
protected virtual void ShowDialogue()
|
||||
protected override void ShowDialogue(string entryPoint = null)
|
||||
{
|
||||
// Find the central DialogueController if not cached
|
||||
if (centralDialogueController == null)
|
||||
base.ShowDialogue(entryPoint);
|
||||
|
||||
// Fallback to simple greeting if no dialogue was shown
|
||||
if (centralDialogueController == null || dialogue == null)
|
||||
{
|
||||
centralDialogueController = FindCentralDialogueController();
|
||||
}
|
||||
|
||||
// Check if we have both a controller and dialogue asset
|
||||
if (centralDialogueController != null && dialogue != null)
|
||||
{
|
||||
// Load this NPC's dialogue into the central controller
|
||||
centralDialogueController.ChangeDialogue(dialogue);
|
||||
|
||||
// Play dialogue with optional entry point
|
||||
if (!string.IsNullOrEmpty(dialogueEntryPoint))
|
||||
{
|
||||
centralDialogueController.PlayDialogue(dialogueEntryPoint);
|
||||
Log($"{npcName}: Starting EasyTalk dialogue at entry point '{dialogueEntryPoint}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
centralDialogueController.PlayDialogue();
|
||||
Log($"{npcName}: Starting EasyTalk dialogue");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback to simple greeting if no EasyTalk setup
|
||||
if (centralDialogueController == null)
|
||||
{
|
||||
Debug.LogWarning($"No central DialogueController found. Make sure there's a DialogueController on a GameObject named '{dialogueManagerName}'.", gameObject);
|
||||
}
|
||||
if (dialogue == null)
|
||||
{
|
||||
Debug.LogWarning($"No Dialogue asset assigned to {npcName}. Assign a Dialogue asset in the inspector.", gameObject);
|
||||
}
|
||||
|
||||
Log($"{npcName}: {greetingText}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Finds the central DialogueController in the scene
|
||||
/// </summary>
|
||||
private DialogueController FindCentralDialogueController()
|
||||
{
|
||||
// First, try to find by the specified manager name
|
||||
if (!string.IsNullOrEmpty(dialogueManagerName))
|
||||
{
|
||||
GameObject manager = GameObject.Find(dialogueManagerName);
|
||||
if (manager != null)
|
||||
{
|
||||
DialogueController controller = manager.GetComponent<DialogueController>();
|
||||
if (controller != null)
|
||||
{
|
||||
Log($"Found central DialogueController on '{dialogueManagerName}'");
|
||||
return controller;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: search for any DialogueController in the scene
|
||||
DialogueController foundController = FindAnyObjectByType<DialogueController>();
|
||||
if (foundController != null)
|
||||
{
|
||||
Log($"Found DialogueController via FindAnyObjectByType on '{foundController.gameObject.name}'");
|
||||
return foundController;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Offer quest to the player
|
||||
@@ -277,12 +194,4 @@ public class NPC : Character
|
||||
// NPCs might drop loot, give quest credit, etc.
|
||||
base.Die();
|
||||
}
|
||||
|
||||
private void Log(string message)
|
||||
{
|
||||
if (enableDebugLogs)
|
||||
{
|
||||
Debug.Log(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ using UnityEngine.AI;
|
||||
public class NavMeshMovementController : MonoBehaviour
|
||||
{
|
||||
[Header("Movement")]
|
||||
public float stopDistanceTolerance = 0.1f;
|
||||
public float stopDistanceTolerance = 0.5f;
|
||||
|
||||
[Header("Rotation")]
|
||||
public bool enableSmartRotation = true;
|
||||
@@ -53,9 +53,13 @@ public class NavMeshMovementController : MonoBehaviour
|
||||
}
|
||||
|
||||
// Auto-stop when reaching destination
|
||||
if (!agent.pathPending && agent.remainingDistance <= agent.stoppingDistance + stopDistanceTolerance)
|
||||
if (!agent.pathPending && agent.hasPath)
|
||||
{
|
||||
agent.isStopped = true;
|
||||
if (agent.remainingDistance <= agent.stoppingDistance + stopDistanceTolerance)
|
||||
{
|
||||
agent.isStopped = true;
|
||||
agent.velocity = Vector3.zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,8 +4,10 @@ public class Player : Character
|
||||
{
|
||||
public static Player current { get; private set; }
|
||||
|
||||
void Awake()
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake(); // IMPORTANT: Initialize animator and parameters
|
||||
|
||||
if (current != null && current != this)
|
||||
{
|
||||
Debug.LogWarning("Multiple Player instances detected. Destroying duplicate.", gameObject);
|
||||
|
||||
131
Assets/Scripts/PlayerCombatController.cs
Normal file
131
Assets/Scripts/PlayerCombatController.cs
Normal file
@@ -0,0 +1,131 @@
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Basic player combat controller: right-click an enemy to chase and attack in range.
|
||||
/// </summary>
|
||||
public class PlayerCombatController : MonoBehaviour
|
||||
{
|
||||
[Header("Combat")]
|
||||
public int attackDamage = 1;
|
||||
public float attackRange = 1.5f;
|
||||
public float attackCooldown = 0.6f;
|
||||
[Tooltip("Maximum chase distance. Clear target if enemy gets farther than this.")]
|
||||
public float maxChaseDistance = 20f;
|
||||
|
||||
[Header("Movement")]
|
||||
public bool useMovementController = true;
|
||||
|
||||
[Header("Debug")]
|
||||
public bool enableDebugLogs = false;
|
||||
|
||||
private Enemy targetEnemy;
|
||||
private float nextAttackTime = 0f;
|
||||
private NavMeshMovementController movementController;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
movementController = GetComponent<NavMeshMovementController>();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (targetEnemy == null) return;
|
||||
|
||||
if (targetEnemy.GetCurrentHP() <= 0)
|
||||
{
|
||||
Log("Target enemy is dead, clearing combat target");
|
||||
ClearCombatTarget();
|
||||
return;
|
||||
}
|
||||
|
||||
float distance = Vector3.Distance(transform.position, targetEnemy.transform.position);
|
||||
|
||||
// Auto-clear if enemy goes out of chase range
|
||||
if (distance > maxChaseDistance)
|
||||
{
|
||||
Log($"Enemy out of chase range (distance: {distance:F2}, max: {maxChaseDistance:F2}), clearing target");
|
||||
ClearCombatTarget();
|
||||
return;
|
||||
}
|
||||
|
||||
if (useMovementController && movementController != null)
|
||||
{
|
||||
if (distance > attackRange)
|
||||
{
|
||||
Log($"Moving to enemy (distance: {distance:F2} > attackRange: {attackRange})");
|
||||
movementController.MoveTo(targetEnemy.transform.position);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log($"In attack range, stopping (distance: {distance:F2})");
|
||||
movementController.Stop();
|
||||
movementController.SetLookTarget(targetEnemy.transform.position);
|
||||
}
|
||||
}
|
||||
|
||||
if (distance <= attackRange && Time.time >= nextAttackTime)
|
||||
{
|
||||
Log($"ATTACKING! Distance: {distance:F2}, Cooldown ready: {Time.time >= nextAttackTime}");
|
||||
nextAttackTime = Time.time + attackCooldown;
|
||||
|
||||
Character character = GetComponent<Character>();
|
||||
if (character != null)
|
||||
{
|
||||
character.TriggerAttack();
|
||||
}
|
||||
|
||||
targetEnemy.TakeDamage(attackDamage);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTargetEnemy(Enemy enemy)
|
||||
{
|
||||
if (enemy == null) return;
|
||||
|
||||
Log($"Setting target: {enemy.enemyName}");
|
||||
targetEnemy = enemy;
|
||||
nextAttackTime = Time.time;
|
||||
|
||||
// Set weapon type to Melee for combat
|
||||
Character character = GetComponent<Character>();
|
||||
if (character != null)
|
||||
{
|
||||
character.SetWeaponType(Character.WeaponType.Melee);
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearCombatTarget()
|
||||
{
|
||||
if (targetEnemy != null)
|
||||
Log($"Clearing target: {targetEnemy.enemyName}");
|
||||
targetEnemy = null;
|
||||
|
||||
// Return to idle weapon state
|
||||
Character character = GetComponent<Character>();
|
||||
if (character != null)
|
||||
{
|
||||
character.SetWeaponType(Character.WeaponType.None);
|
||||
}
|
||||
}
|
||||
|
||||
public Enemy GetTargetEnemy() => targetEnemy;
|
||||
|
||||
private void Log(string message)
|
||||
{
|
||||
if (enableDebugLogs)
|
||||
{
|
||||
Debug.Log($"[PlayerCombat] {message}", gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
// Draw attack range
|
||||
Gizmos.color = Color.red;
|
||||
Gizmos.DrawWireSphere(transform.position, attackRange);
|
||||
|
||||
// Draw max chase distance
|
||||
Gizmos.color = Color.yellow;
|
||||
Gizmos.DrawWireSphere(transform.position, maxChaseDistance);
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/PlayerCombatController.cs.meta
Normal file
2
Assets/Scripts/PlayerCombatController.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 82ad2efd495c74c448c1a7ccf06710dd
|
||||
@@ -31,6 +31,8 @@ public class QuestTrigger : MonoBehaviour
|
||||
{
|
||||
OnTriggerEnter,
|
||||
OnCollisionEnter,
|
||||
OnItemPickup,
|
||||
OnDeath,
|
||||
Manual
|
||||
}
|
||||
|
||||
@@ -50,12 +52,34 @@ public class QuestTrigger : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Call when an item is picked up (from item pickup scripts)
|
||||
/// </summary>
|
||||
public void OnItemPickup(GameObject picker)
|
||||
{
|
||||
if (triggerType == TriggerType.OnItemPickup)
|
||||
{
|
||||
TryTrigger(picker);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Call when a target dies (from enemy death scripts)
|
||||
/// </summary>
|
||||
public void OnDeath(GameObject deadObject)
|
||||
{
|
||||
if (triggerType == TriggerType.OnDeath)
|
||||
{
|
||||
TryTrigger(deadObject);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Manually trigger quest progress (call from other scripts)
|
||||
/// </summary>
|
||||
public void ManualTrigger(GameObject triggerer = null)
|
||||
{
|
||||
if (triggerType == TriggerType.Manual || triggerType == TriggerType.OnTriggerEnter)
|
||||
if (triggerType == TriggerType.Manual)
|
||||
{
|
||||
TryTrigger(triggerer);
|
||||
}
|
||||
|
||||
107
Assets/Scripts/TriggerEvents.cs
Normal file
107
Assets/Scripts/TriggerEvents.cs
Normal file
@@ -0,0 +1,107 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(Collider))]
|
||||
public class TriggerEvents : MonoBehaviour
|
||||
{
|
||||
[Header("Trigger Conditions")]
|
||||
[Tooltip("Only trigger once for all events")]
|
||||
public bool triggerOnce = true;
|
||||
[Tooltip("Destroy this GameObject after triggering")]
|
||||
public bool destroyAfterTrigger = false;
|
||||
[Tooltip("Stop player movement when triggered")]
|
||||
public bool stopPlayerMovement = true;
|
||||
[Tooltip("Tag required to trigger (leave empty to ignore)")]
|
||||
public string requiredTag = "Player";
|
||||
[Tooltip("Layer mask required to trigger")]
|
||||
public LayerMask requiredLayers = ~0;
|
||||
|
||||
[Header("Events")]
|
||||
public UnityEvent onEnter;
|
||||
public UnityEvent onExit;
|
||||
public UnityEvent onStay;
|
||||
|
||||
private bool hasTriggered = false;
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
Collider collider = GetComponent<Collider>();
|
||||
if (collider != null)
|
||||
{
|
||||
collider.isTrigger = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (!CanTrigger(other)) return;
|
||||
|
||||
hasTriggered = true;
|
||||
|
||||
// Stop player movement if enabled
|
||||
if (stopPlayerMovement)
|
||||
{
|
||||
StopMovement(other.gameObject);
|
||||
}
|
||||
|
||||
onEnter?.Invoke();
|
||||
|
||||
if (destroyAfterTrigger)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerExit(Collider other)
|
||||
{
|
||||
if (!CanTrigger(other)) return;
|
||||
onExit?.Invoke();
|
||||
}
|
||||
|
||||
private void OnTriggerStay(Collider other)
|
||||
{
|
||||
if (!CanTrigger(other)) return;
|
||||
onStay?.Invoke();
|
||||
}
|
||||
|
||||
private bool CanTrigger(Collider other)
|
||||
{
|
||||
if (other == null) return false;
|
||||
if (triggerOnce && hasTriggered) return false;
|
||||
|
||||
if (!string.IsNullOrEmpty(requiredTag) && !other.CompareTag(requiredTag))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int otherLayerMask = 1 << other.gameObject.layer;
|
||||
if ((requiredLayers.value & otherLayerMask) == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void StopMovement(GameObject target)
|
||||
{
|
||||
if (target == null) return;
|
||||
|
||||
// Try NavMeshMovementController first
|
||||
NavMeshMovementController movementController = target.GetComponent<NavMeshMovementController>();
|
||||
if (movementController != null)
|
||||
{
|
||||
movementController.Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
// Fallback to NavMeshAgent
|
||||
UnityEngine.AI.NavMeshAgent agent = target.GetComponent<UnityEngine.AI.NavMeshAgent>();
|
||||
if (agent != null)
|
||||
{
|
||||
agent.isStopped = true;
|
||||
agent.ResetPath();
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/TriggerEvents.cs.meta
Normal file
2
Assets/Scripts/TriggerEvents.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: de1e15f9e006b534fb3a5261c25bab34
|
||||
@@ -24,6 +24,7 @@ Material:
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
- DepthOnly
|
||||
- SHADOWCASTER
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
@@ -57,7 +58,7 @@ Material:
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Texture: {fileID: 2800000, guid: cf19d52271177d0428e56c9b5bca279a, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
@@ -129,7 +130,7 @@ Material:
|
||||
- _ZWrite: 0
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 0, b: 0, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _Color: {r: 1, g: 0, b: 0, a: 1}
|
||||
- _DiffuseColor: {r: 1, g: 0.47586206, b: 0, a: 1}
|
||||
- _EmissionColor: {r: 60, g: 1.2413799, b: 0, a: 60}
|
||||
- _EmissionColorUI: {r: 1, g: 0.020689664, b: 0, a: 1}
|
||||
|
||||
@@ -64,7 +64,7 @@ Material:
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Texture: {fileID: 2800000, guid: cf19d52271177d0428e56c9b5bca279a, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
|
||||
@@ -64,7 +64,7 @@ Material:
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Texture: {fileID: 2800000, guid: d3de0e72cc53be44384f5a74581eea2b, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
|
||||
@@ -64,7 +64,7 @@ Material:
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Texture: {fileID: 2800000, guid: 98cf3250d96197d4d8188a96526fffc1, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
|
||||
@@ -3348,6 +3348,9 @@ AnimatorStateTransition:
|
||||
- m_ConditionMode: 6
|
||||
m_ConditionEvent: MeleeType_int
|
||||
m_EventTreshold: 2
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: Shoot_b
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: 110240064}
|
||||
m_Solo: 0
|
||||
@@ -5320,6 +5323,9 @@ AnimatorStateTransition:
|
||||
- m_ConditionMode: 6
|
||||
m_ConditionEvent: MeleeType_int
|
||||
m_EventTreshold: 1
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: Shoot_b
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: 110277130}
|
||||
m_Solo: 0
|
||||
@@ -6903,6 +6909,9 @@ AnimatorStateTransition:
|
||||
- m_ConditionMode: 6
|
||||
m_ConditionEvent: MeleeType_int
|
||||
m_EventTreshold: 0
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: Shoot_b
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: 110207262}
|
||||
m_Solo: 0
|
||||
|
||||
Reference in New Issue
Block a user