working on zombie ai
This commit is contained in:
26
Assets/jelycho/Code/Enemies/FindClosestAttackTargetAction.cs
Normal file
26
Assets/jelycho/Code/Enemies/FindClosestAttackTargetAction.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using Unity.Behavior;
|
||||
using UnityEngine;
|
||||
using Action = Unity.Behavior.Action;
|
||||
using Unity.Properties;
|
||||
|
||||
[Serializable, GeneratePropertyBag]
|
||||
[NodeDescription(name: "FindClosestAttackTarget", story: "Agent finds Target", category: "Action", id: "c335cdd99cc546403f5ca3cd5c5e2fa3")]
|
||||
public partial class FindClosestAttackTargetAction : Action
|
||||
{
|
||||
|
||||
protected override Status OnStart()
|
||||
{
|
||||
return Status.Running;
|
||||
}
|
||||
|
||||
protected override Status OnUpdate()
|
||||
{
|
||||
return Status.Success;
|
||||
}
|
||||
|
||||
protected override void OnEnd()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fe9e1ad43b36c214389aa56933a4b4f9
|
||||
@@ -1,5 +1,7 @@
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Animancer;
|
||||
using RebootKit.Engine.AI;
|
||||
using RebootKit.Engine.Extensions;
|
||||
using RebootKit.Engine.Main;
|
||||
using RebootKit.Engine.Network;
|
||||
@@ -9,8 +11,8 @@ using TriInspector;
|
||||
using Unity.Mathematics;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
using UnityEngine.Events;
|
||||
using Logger = RebootKit.Engine.Foundation.Logger;
|
||||
using UnityEvent = UnityEngine.Events.UnityEvent;
|
||||
|
||||
namespace RebootReality.jelycho.Enemies {
|
||||
public class ZombieActorData : IActorData {
|
||||
@@ -58,6 +60,10 @@ namespace RebootReality.jelycho.Enemies {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ZombieBlackboard {
|
||||
public ZombieActor Self;
|
||||
}
|
||||
|
||||
[DeclareBoxGroup("Body parts")]
|
||||
public class ZombieActor : Actor, IKillable {
|
||||
@@ -74,7 +80,7 @@ namespace RebootReality.jelycho.Enemies {
|
||||
Berserk
|
||||
}
|
||||
|
||||
[SerializeField] Animator m_Animator;
|
||||
[SerializeField] AnimancerComponent m_Animancer;
|
||||
|
||||
[SerializeField] NavMeshAgent m_NavAgent;
|
||||
|
||||
@@ -98,12 +104,24 @@ namespace RebootReality.jelycho.Enemies {
|
||||
float m_NextAttackTimer;
|
||||
|
||||
public UnityEvent died = new UnityEvent();
|
||||
|
||||
BehaviourTree m_BehaviourTree;
|
||||
|
||||
//
|
||||
// @MARK: Unity callbacks
|
||||
//
|
||||
void Awake() {
|
||||
SetRagdollLocal(false);
|
||||
|
||||
m_BehaviourTree = new BehaviourTree("Zombie Behaviour");
|
||||
|
||||
var rootSelector = new Selector("Root");
|
||||
m_BehaviourTree.AddChild(rootSelector);
|
||||
|
||||
var attackPlayerSequence = new Sequence("Attack Player",
|
||||
() => m_PlayerTarget != null);
|
||||
rootSelector.AddChild(attackPlayerSequence);
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
@@ -117,7 +135,7 @@ namespace RebootReality.jelycho.Enemies {
|
||||
}
|
||||
|
||||
float velXZ = m_NavAgent.velocity.With(y: 0).magnitude;
|
||||
m_Animator.SetFloat(s_MovementSpeedHash, velXZ);
|
||||
// m_Animator.SetFloat(s_MovementSpeedHash, velXZ);
|
||||
}
|
||||
|
||||
public override void OnServerTick(float deltaTime) {
|
||||
@@ -127,6 +145,9 @@ namespace RebootReality.jelycho.Enemies {
|
||||
s_Logger.Error("Invalid world context");
|
||||
return;
|
||||
}
|
||||
|
||||
m_BehaviourTree.Process(deltaTime);
|
||||
return;
|
||||
|
||||
switch (m_State) {
|
||||
case AIState.Idle: {
|
||||
@@ -190,7 +211,7 @@ namespace RebootReality.jelycho.Enemies {
|
||||
if (distToPlayerSq <= m_MaxAttackDistance * m_MaxAttackDistance) {
|
||||
m_NextAttackTimer -= dt;
|
||||
if (m_NextAttackTimer <= 0.0f) {
|
||||
m_Animator.CrossFade("Attack_0", 0.0f, 0);
|
||||
// m_Animator.CrossFade("Attack_0", 0.0f, 0);
|
||||
m_NextAttackTimer = m_AttackDelay;
|
||||
}
|
||||
|
||||
@@ -284,7 +305,7 @@ namespace RebootReality.jelycho.Enemies {
|
||||
ragdollRigidbody.isKinematic = !active;
|
||||
}
|
||||
|
||||
m_Animator.enabled = !active;
|
||||
m_Animancer.enabled = !active;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
"GUID:f2be1b7392ef6cc4eafd0ee8ac7a090a",
|
||||
"GUID:f0ca7da2c713f5849a8e3326866a5e49",
|
||||
"GUID:7f7d1af65c2641843945d409d28f2e20",
|
||||
"GUID:4c25c05f410a3a447a75c3b0909152ef"
|
||||
"GUID:4c25c05f410a3a447a75c3b0909152ef",
|
||||
"GUID:73907d139b13f8a43b7e3e95c329d30a"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
|
||||
@@ -967,8 +967,8 @@ MonoBehaviour:
|
||||
m_ActorPrefabReference:
|
||||
m_AssetGUID: cc37529a52919b443aa04c484902cb68
|
||||
m_SubObjectName:
|
||||
m_SubObjectGUID:
|
||||
m_SubObjectType:
|
||||
m_SubObjectGUID:
|
||||
m_EditorAssetChanged: 0
|
||||
m_Count: 1
|
||||
m_SpawnPoints: []
|
||||
@@ -1340,8 +1340,8 @@ MonoBehaviour:
|
||||
m_ActorPrefabReference:
|
||||
m_AssetGUID: 0258297780346e648b9fca3bb5f89543
|
||||
m_SubObjectName:
|
||||
m_SubObjectGUID:
|
||||
m_SubObjectType:
|
||||
m_SubObjectGUID:
|
||||
m_EditorAssetChanged: 0
|
||||
m_Count: 1
|
||||
m_SpawnPoints: []
|
||||
@@ -3682,8 +3682,8 @@ MonoBehaviour:
|
||||
m_ActorPrefabReference:
|
||||
m_AssetGUID: 50a5e87baaedf5b46ba52646e8e88b74
|
||||
m_SubObjectName:
|
||||
m_SubObjectGUID:
|
||||
m_SubObjectType:
|
||||
m_SubObjectGUID:
|
||||
m_EditorAssetChanged: 0
|
||||
m_Count: 10
|
||||
m_SpawnPoints: []
|
||||
@@ -6441,7 +6441,7 @@ PrefabInstance:
|
||||
m_Modifications:
|
||||
- target: {fileID: 807751232810720550, guid: 2bc4b78daa0582a41a43d02ae219339a, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 7.63
|
||||
value: 1.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 807751232810720550, guid: 2bc4b78daa0582a41a43d02ae219339a, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
@@ -6449,7 +6449,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 807751232810720550, guid: 2bc4b78daa0582a41a43d02ae219339a, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: -18.03
|
||||
value: 17.32
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 807751232810720550, guid: 2bc4b78daa0582a41a43d02ae219339a, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
|
||||
@@ -60,7 +60,7 @@ MonoBehaviour:
|
||||
syncRotation: 1
|
||||
syncScale: 0
|
||||
m_AttachmentSockets: []
|
||||
m_Animator: {fileID: 9202368008358846522}
|
||||
m_Animancer: {fileID: 1454564773443580898}
|
||||
m_NavAgent: {fileID: 8828257924038919546}
|
||||
m_RootCollider: {fileID: 1135518741664066520}
|
||||
m_RagdollRigidbodies:
|
||||
@@ -600,6 +600,9 @@ PrefabInstance:
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d2e957dad22ca1f4fae5e5e9fd8170c3, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 9202368008358846522}
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d2e957dad22ca1f4fae5e5e9fd8170c3, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 1454564773443580898}
|
||||
- targetCorrespondingSourceObject: {fileID: 1082271958561512970, guid: d2e957dad22ca1f4fae5e5e9fd8170c3, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 4485639414822483688}
|
||||
@@ -1592,7 +1595,7 @@ Animator:
|
||||
m_GameObject: {fileID: 5437166838216447403}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 9000000, guid: e74130c49b009364f90d176af44766be, type: 3}
|
||||
m_Controller: {fileID: 9100000, guid: ed07376a401151c47a47c0dfb496fc99, type: 2}
|
||||
m_Controller: {fileID: 0}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
@@ -1604,6 +1607,21 @@ Animator:
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!114 &1454564773443580898
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5437166838216447403}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0ad50f81b1d25c441943c37a89ba23f6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_Animator: {fileID: 9202368008358846522}
|
||||
_Transitions: {fileID: 0}
|
||||
_ActionOnDisable: 0
|
||||
--- !u!4 &6614165842428853091 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -7169757591262751847, guid: d2e957dad22ca1f4fae5e5e9fd8170c3, type: 3}
|
||||
|
||||
8
Assets/jelycho/core/enemies/Zombie/animancer.meta
Normal file
8
Assets/jelycho/core/enemies/Zombie/animancer.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: abbbab8942b837447b27aaabda26e5ae
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user