Post by pararini on Jul 18, 2020 9:41:52 GMT
hi , we all waiting for the parkour addon from vBrother Lemcore
i create fast a simple solution for detect climb object ,as long as we wait
1. change jumpinput
replace the JumpInput() in vThirdpersonInput
to:
protected virtual void JumpInput()
{
if (jumpInput.GetButtonDown() && JumpConditions() && !GetComponent<vParkourCover>().canParkour)
{
cc.Jump(true);
}
else if(jumpInput.GetButtonDown() && JumpConditions() && GetComponent<vParkourCover>().canParkour)
{
GetComponent<vParkourCover>().CheckInput(true);
}
}
2. add to the Animation Climpup , Stepup,Vault on the vAnimationTag "Parkour"
3.create 5 Empty Gameobjects
4. you can create a cube or something to debug the position
5. play around with the detect distance for the best animation my settings are :
and create the script :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Invector;
using Invector.vCharacterController;
using Invector.vCharacterController.vActions;
[vClassHeader("vParkour/Cover System", iconName = "inputIcon")]
public class vParkourCover : vMonoBehaviour
{
[vEditorToolbar("Settings")]
public GenericInput CoverInput = new GenericInput("Mouse1", false, "LT", true, "LT", false);
public Transform Raycast;
public LayerMask ActionLayer;
public vTagMask ActionTag;
public vTagMask IgnoreTag;
public float RaycastDistance = 1f;
[Header("Current")]
public string animstring = "Vault";
public Vector3 Matchpos;
[Range(0.0f, 1f)]
public float MatchRot;
public float StartMatchTarget;
public float EndMatchTarget;
public AvatarTarget AvatarTarget = AvatarTarget.Body;
public bool disableGravity;
public bool disableCollision;
public float delay;
[Header("Detect")]
public float OverTopDistace;
public float TopDistance;
public float MiddleDistance;
public float FootDistance;
public float FrontDistance;
public Transform OverTop;
public Transform Top;
public Transform Middle;
public Transform Front;
public bool hit;
public bool OverTopValid;
public bool TopValid;
public bool MiddleValid;
public bool FootValid;
public bool FrontValid;
public string CameraState = "";
public Vector3 Target = new Vector3();
public Vector3 m_Target = new Vector3();
[vEditorToolbar("Vault")]
public float Vaultoffset;
public bool canVault;
public string VaultAnim = "Vault";
public Vector3 VaultMatchpos;
[Range(0.0f, 1f)]
public float VaultMatchRot;
public float VaultStartMatchTarget;
public float VaultEndMatchTarget;
public AvatarTarget VaultAvatarTarget = AvatarTarget.Body;
public bool vdisableGravity;
public bool vdisableCollision;
[vEditorToolbar("Climb")]
public float Climboffset;
public bool canClimb;
public string ClimbAnim = "ClimpUp";
public Vector3 ClimbMatchpos;
[Range(0.0f, 1f)]
public float ClimbMatchRot;
public float ClimbStartMatchTarget;
public float ClimbEndMatchTarget;
public AvatarTarget ClimbAvatarTarget = AvatarTarget.Body;
public bool cdisableGravity;
public bool cdisableCollision;
[vEditorToolbar("Stepup")]
public float StepupOffset;
public bool canStepup;
public string StepUpAnim = "Stepup";
public Vector3 StepupMatchpos;
[Range(0.0f, 1f)]
public float StepupMatchRot;
public float StepupStartMatchTarget;
public float StepupEndMatchTarget;
public AvatarTarget StepupAvatarTarget = AvatarTarget.Body;
public bool sdisableGravity;
public bool sdisableCollision;
Ray ray;
Ray OverTopRay;
Ray TopRay;
Ray MiddleRay;
Ray FrontRay;
[HideInInspector] public RaycastHit RayHit;
[HideInInspector] public RaycastHit OverTopHit;
[HideInInspector] public RaycastHit TopHit;
[HideInInspector] public RaycastHit MiddleHit;
[HideInInspector] public RaycastHit FrontHit;
public GameObject DebugCube;
[vEditorToolbar("Debug")]
public bool debug;
public bool canParkour;
bool checkupdate;
bool inParkour;
Animator anim;
vShooterMeleeInput tpc;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
tpc = GetComponent<vShooterMeleeInput>();
}
// Update is called once per frame
void Update()
{
CheckInput();
Detection();
CheckObject();
if (debug)
{
DebugCube.transform.position = Target;
}
EnablePlayerGravityAndCollision();
}
public void CheckInput(bool ccinput = false)
{
if (inParkour)
{
tpc.cc.MatchTarget(Target, new Quaternion(), AvatarTarget,
new MatchTargetWeightMask(Matchpos, MatchRot), StartMatchTarget, EndMatchTarget);
}
if ((ccinput || tpc.cc.isSprinting) && tpc.cc.isGrounded && !tpc.cc.isDead && !tpc.cc.IsAnimatorTag("CustomAction") && !tpc.cc.ragdolled && canParkour && hit)
{
if (canClimb)
{
tpc.cc.StopCharacter();
Raycast.position = m_Target;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
TriggerAnimation(ClimbAnim);
DisablePlayerGravityAndCollision(cdisableGravity, cdisableCollision);
var dir = (transform.position - TopHit.point).normalized;
dir.y = 0;
tpc.cc.RotateToDirection(dir);
AvatarTarget = ClimbAvatarTarget;
Matchpos = ClimbMatchpos;
MatchRot = ClimbMatchRot;
StartMatchTarget = ClimbStartMatchTarget;
EndMatchTarget = ClimbEndMatchTarget;
}
if (canVault)
{
tpc.cc.StopCharacter();
Raycast.position = m_Target;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Vaultoffset;
TriggerAnimation(VaultAnim);
DisablePlayerGravityAndCollision(vdisableGravity, vdisableCollision);
AvatarTarget = VaultAvatarTarget;
Matchpos = VaultMatchpos;
MatchRot = VaultMatchRot;
StartMatchTarget = VaultStartMatchTarget;
EndMatchTarget = VaultEndMatchTarget;
}
if (canStepup)
{
tpc.cc.StopCharacter();
Raycast.position = m_Target;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + StepupOffset;
TriggerAnimation(StepUpAnim);
DisablePlayerGravityAndCollision(sdisableGravity, sdisableCollision);
AvatarTarget = StepupAvatarTarget;
Matchpos = StepupMatchpos;
MatchRot = StepupMatchRot;
StartMatchTarget = StepupStartMatchTarget;
EndMatchTarget = StepupEndMatchTarget;
}
}
if (ccinput == false && !tpc.cc.isGrounded && !tpc.cc.isDead && !tpc.cc.IsAnimatorTag("CustomAction") && !tpc.cc.ragdolled && canParkour)
{
if (canClimb)
{
tpc.cc.StopCharacter();
Raycast.position = m_Target;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
TriggerAnimation(ClimbAnim);
DisablePlayerGravityAndCollision(cdisableGravity, cdisableCollision);
AvatarTarget = ClimbAvatarTarget;
Matchpos = ClimbMatchpos;
MatchRot = ClimbMatchRot;
StartMatchTarget = ClimbStartMatchTarget;
EndMatchTarget = ClimbEndMatchTarget;
}
}
}
public virtual void TriggerAnimation(string anim)
{
tpc.cc.animator.CrossFadeInFixedTime(anim, 0.2f,0); // trigger the action animation clip
if (!string.IsNullOrEmpty(CameraState))
tpc.ChangeCameraState(CameraState, true); // change current camera state to a custom
}
void disabledelay()
{
checkupdate = true;
}
void Detection()
{
if (tpc.cc.IsAnimatorTag("CustomAction")) return;
MiddleRay = new Ray(Middle.position, Middle.forward);
if (Physics.Raycast(MiddleRay, out MiddleHit, MiddleDistance, ActionLayer))
{
if (debug)
{
//Debug.DrawRay(Top.position, Top.forward * TopHit.distance, Color.blue);
Debug.DrawLine(MiddleRay.origin, MiddleHit.point);
}
if (ActionTag.Contains(MiddleHit.collider.gameObject.tag))
{
MiddleValid = true;
}
else
{
MiddleValid = false;
}
}
else
{
MiddleValid = false;
}
OverTopRay = new Ray(OverTop.position, OverTop.forward);
if (Physics.Raycast(OverTopRay, out OverTopHit, OverTopDistace, ActionLayer))
{
if (debug)
{
//Debug.DrawRay(Top.position, Top.forward * TopHit.distance, Color.blue);
Debug.DrawLine(OverTopRay.origin, OverTopHit.point);
}
if (ActionTag.Contains(OverTopHit.collider.gameObject.tag))
{
OverTopValid = true;
}
else
{
OverTopValid = false;
}
}
else
{
OverTopValid = false;
}
TopRay = new Ray(Top.position, Top.forward);
if (Physics.Raycast(TopRay, out TopHit, TopDistance, ActionLayer))
{
if (debug)
{
//Debug.DrawRay(Top.position, Top.forward * TopHit.distance, Color.blue);
Debug.DrawLine(TopRay.origin, TopHit.point);
}
if (ActionTag.Contains(TopHit.collider.gameObject.tag))
{
TopValid = true;
}
else
{
TopValid = false;
}
}
else
{
TopValid = false;
}
FrontRay = new Ray(Front.position, -Front.up);
if (Physics.Raycast(FrontRay, out FrontHit, FrontDistance, ActionLayer))
{
if (debug)
{
//Debug.DrawRay(Top.position, Top.forward * TopHit.distance, Color.blue);
Debug.DrawLine(FrontRay.origin, FrontHit.point);
}
if (ActionTag.Contains(FrontHit.collider.gameObject.tag))
{
FrontValid = true;
}
else
{
FrontValid = false;
}
}
else
{
FrontValid = false;
}
}
public void CheckObject()
{
if (!OverTopValid && !TopValid && !MiddleValid && !FrontValid )
{
canClimb = false;
canVault = false;
canStepup = false;
canParkour = false;
}
if (!OverTopValid && TopValid && MiddleValid && FrontValid) // climb
{
canClimb = true;
canVault = false;
canStepup = false;
canParkour = true;
m_Target = MiddleHit.point;
m_Target.y = MiddleHit.collider.bounds.extents.y + MiddleHit.transform.position.y;
Raycast.position = m_Target;
ray = new Ray(Raycast.position, -Front.up);
if (Physics.Raycast(ray, out RayHit, RaycastDistance, ActionLayer))
{
if (!inParkour)
{
hit = true;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
}
else
{
hit = false;
}
}
else
{
hit = false;
}
}
if (OverTopValid && TopValid && MiddleValid && FrontValid) // climb high
{
//canclimbhigh
canClimb = true;
canVault = false;
canStepup = false;
canParkour = true;
m_Target = MiddleHit.point;
m_Target.y = MiddleHit.collider.bounds.extents.y + MiddleHit.transform.position.y;
Raycast.position = m_Target;
ray = new Ray(Raycast.position, -Front.up);
if (Physics.Raycast(ray, out RayHit, RaycastDistance, ActionLayer))
{
if (!inParkour)
{
hit = true;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
}
else
{
hit = false;
}
}
else
{
hit = false;
}
}
if (!OverTopValid && !TopValid && MiddleValid && !FrontValid) //vault
{
canClimb = false;
canVault = true;
canStepup = false;
canParkour = true;
m_Target = MiddleHit.point;
m_Target.y = MiddleHit.collider.bounds.extents.y + MiddleHit.transform.position.y;
Raycast.position = m_Target;
ray = new Ray(Raycast.position, -Front.up);
if (Physics.Raycast(ray, out RayHit, RaycastDistance, ActionLayer))
{
if (!inParkour)
{
hit = true;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
}
else
{
hit = false;
}
}
else
{
hit = false;
}
}
if (!OverTopValid && !TopValid && MiddleValid && FrontValid)
{
canClimb = false;
canVault = false;
canStepup = true;
canParkour = true;
m_Target = MiddleHit.point;
m_Target.y = MiddleHit.collider.bounds.extents.y + MiddleHit.transform.position.y;
Raycast.position = m_Target;
ray = new Ray(Raycast.position, -Front.up);
if (Physics.Raycast(ray, out RayHit, RaycastDistance, ActionLayer))
{
if (!inParkour)
{
hit = true;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
}
else
{
hit = false;
}
}
else
{
hit = false;
}
} //steupup
}
public virtual void DisablePlayerGravityAndCollision(bool disableGravity ,bool disableCollision)
{
inParkour = true;
Invoke("disabledelay",1f);
if (disableGravity)
{
tpc.cc._rigidbody.useGravity = false;
}
if (disableCollision)
{
tpc.cc._capsuleCollider.isTrigger = true;
}
}
void EnablePlayerGravityAndCollision()
{
if (!tpc.cc.IsAnimatorTag("Parkour") && inParkour && checkupdate)
{
Debug.Log("Enable gravity");
tpc.cc._rigidbody.useGravity = true;
tpc.cc._capsuleCollider.isTrigger = false;
inParkour = false;
checkupdate = false;
}
}
}
i create fast a simple solution for detect climb object ,as long as we wait
1. change jumpinput
replace the JumpInput() in vThirdpersonInput
to:
protected virtual void JumpInput()
{
if (jumpInput.GetButtonDown() && JumpConditions() && !GetComponent<vParkourCover>().canParkour)
{
cc.Jump(true);
}
else if(jumpInput.GetButtonDown() && JumpConditions() && GetComponent<vParkourCover>().canParkour)
{
GetComponent<vParkourCover>().CheckInput(true);
}
}
2. add to the Animation Climpup , Stepup,Vault on the vAnimationTag "Parkour"
3.create 5 Empty Gameobjects
4. you can create a cube or something to debug the position
5. play around with the detect distance for the best animation my settings are :
and create the script :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Invector;
using Invector.vCharacterController;
using Invector.vCharacterController.vActions;
[vClassHeader("vParkour/Cover System", iconName = "inputIcon")]
public class vParkourCover : vMonoBehaviour
{
[vEditorToolbar("Settings")]
public GenericInput CoverInput = new GenericInput("Mouse1", false, "LT", true, "LT", false);
public Transform Raycast;
public LayerMask ActionLayer;
public vTagMask ActionTag;
public vTagMask IgnoreTag;
public float RaycastDistance = 1f;
[Header("Current")]
public string animstring = "Vault";
public Vector3 Matchpos;
[Range(0.0f, 1f)]
public float MatchRot;
public float StartMatchTarget;
public float EndMatchTarget;
public AvatarTarget AvatarTarget = AvatarTarget.Body;
public bool disableGravity;
public bool disableCollision;
public float delay;
[Header("Detect")]
public float OverTopDistace;
public float TopDistance;
public float MiddleDistance;
public float FootDistance;
public float FrontDistance;
public Transform OverTop;
public Transform Top;
public Transform Middle;
public Transform Front;
public bool hit;
public bool OverTopValid;
public bool TopValid;
public bool MiddleValid;
public bool FootValid;
public bool FrontValid;
public string CameraState = "";
public Vector3 Target = new Vector3();
public Vector3 m_Target = new Vector3();
[vEditorToolbar("Vault")]
public float Vaultoffset;
public bool canVault;
public string VaultAnim = "Vault";
public Vector3 VaultMatchpos;
[Range(0.0f, 1f)]
public float VaultMatchRot;
public float VaultStartMatchTarget;
public float VaultEndMatchTarget;
public AvatarTarget VaultAvatarTarget = AvatarTarget.Body;
public bool vdisableGravity;
public bool vdisableCollision;
[vEditorToolbar("Climb")]
public float Climboffset;
public bool canClimb;
public string ClimbAnim = "ClimpUp";
public Vector3 ClimbMatchpos;
[Range(0.0f, 1f)]
public float ClimbMatchRot;
public float ClimbStartMatchTarget;
public float ClimbEndMatchTarget;
public AvatarTarget ClimbAvatarTarget = AvatarTarget.Body;
public bool cdisableGravity;
public bool cdisableCollision;
[vEditorToolbar("Stepup")]
public float StepupOffset;
public bool canStepup;
public string StepUpAnim = "Stepup";
public Vector3 StepupMatchpos;
[Range(0.0f, 1f)]
public float StepupMatchRot;
public float StepupStartMatchTarget;
public float StepupEndMatchTarget;
public AvatarTarget StepupAvatarTarget = AvatarTarget.Body;
public bool sdisableGravity;
public bool sdisableCollision;
Ray ray;
Ray OverTopRay;
Ray TopRay;
Ray MiddleRay;
Ray FrontRay;
[HideInInspector] public RaycastHit RayHit;
[HideInInspector] public RaycastHit OverTopHit;
[HideInInspector] public RaycastHit TopHit;
[HideInInspector] public RaycastHit MiddleHit;
[HideInInspector] public RaycastHit FrontHit;
public GameObject DebugCube;
[vEditorToolbar("Debug")]
public bool debug;
public bool canParkour;
bool checkupdate;
bool inParkour;
Animator anim;
vShooterMeleeInput tpc;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
tpc = GetComponent<vShooterMeleeInput>();
}
// Update is called once per frame
void Update()
{
CheckInput();
Detection();
CheckObject();
if (debug)
{
DebugCube.transform.position = Target;
}
EnablePlayerGravityAndCollision();
}
public void CheckInput(bool ccinput = false)
{
if (inParkour)
{
tpc.cc.MatchTarget(Target, new Quaternion(), AvatarTarget,
new MatchTargetWeightMask(Matchpos, MatchRot), StartMatchTarget, EndMatchTarget);
}
if ((ccinput || tpc.cc.isSprinting) && tpc.cc.isGrounded && !tpc.cc.isDead && !tpc.cc.IsAnimatorTag("CustomAction") && !tpc.cc.ragdolled && canParkour && hit)
{
if (canClimb)
{
tpc.cc.StopCharacter();
Raycast.position = m_Target;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
TriggerAnimation(ClimbAnim);
DisablePlayerGravityAndCollision(cdisableGravity, cdisableCollision);
var dir = (transform.position - TopHit.point).normalized;
dir.y = 0;
tpc.cc.RotateToDirection(dir);
AvatarTarget = ClimbAvatarTarget;
Matchpos = ClimbMatchpos;
MatchRot = ClimbMatchRot;
StartMatchTarget = ClimbStartMatchTarget;
EndMatchTarget = ClimbEndMatchTarget;
}
if (canVault)
{
tpc.cc.StopCharacter();
Raycast.position = m_Target;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Vaultoffset;
TriggerAnimation(VaultAnim);
DisablePlayerGravityAndCollision(vdisableGravity, vdisableCollision);
AvatarTarget = VaultAvatarTarget;
Matchpos = VaultMatchpos;
MatchRot = VaultMatchRot;
StartMatchTarget = VaultStartMatchTarget;
EndMatchTarget = VaultEndMatchTarget;
}
if (canStepup)
{
tpc.cc.StopCharacter();
Raycast.position = m_Target;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + StepupOffset;
TriggerAnimation(StepUpAnim);
DisablePlayerGravityAndCollision(sdisableGravity, sdisableCollision);
AvatarTarget = StepupAvatarTarget;
Matchpos = StepupMatchpos;
MatchRot = StepupMatchRot;
StartMatchTarget = StepupStartMatchTarget;
EndMatchTarget = StepupEndMatchTarget;
}
}
if (ccinput == false && !tpc.cc.isGrounded && !tpc.cc.isDead && !tpc.cc.IsAnimatorTag("CustomAction") && !tpc.cc.ragdolled && canParkour)
{
if (canClimb)
{
tpc.cc.StopCharacter();
Raycast.position = m_Target;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
TriggerAnimation(ClimbAnim);
DisablePlayerGravityAndCollision(cdisableGravity, cdisableCollision);
AvatarTarget = ClimbAvatarTarget;
Matchpos = ClimbMatchpos;
MatchRot = ClimbMatchRot;
StartMatchTarget = ClimbStartMatchTarget;
EndMatchTarget = ClimbEndMatchTarget;
}
}
}
public virtual void TriggerAnimation(string anim)
{
tpc.cc.animator.CrossFadeInFixedTime(anim, 0.2f,0); // trigger the action animation clip
if (!string.IsNullOrEmpty(CameraState))
tpc.ChangeCameraState(CameraState, true); // change current camera state to a custom
}
void disabledelay()
{
checkupdate = true;
}
void Detection()
{
if (tpc.cc.IsAnimatorTag("CustomAction")) return;
MiddleRay = new Ray(Middle.position, Middle.forward);
if (Physics.Raycast(MiddleRay, out MiddleHit, MiddleDistance, ActionLayer))
{
if (debug)
{
//Debug.DrawRay(Top.position, Top.forward * TopHit.distance, Color.blue);
Debug.DrawLine(MiddleRay.origin, MiddleHit.point);
}
if (ActionTag.Contains(MiddleHit.collider.gameObject.tag))
{
MiddleValid = true;
}
else
{
MiddleValid = false;
}
}
else
{
MiddleValid = false;
}
OverTopRay = new Ray(OverTop.position, OverTop.forward);
if (Physics.Raycast(OverTopRay, out OverTopHit, OverTopDistace, ActionLayer))
{
if (debug)
{
//Debug.DrawRay(Top.position, Top.forward * TopHit.distance, Color.blue);
Debug.DrawLine(OverTopRay.origin, OverTopHit.point);
}
if (ActionTag.Contains(OverTopHit.collider.gameObject.tag))
{
OverTopValid = true;
}
else
{
OverTopValid = false;
}
}
else
{
OverTopValid = false;
}
TopRay = new Ray(Top.position, Top.forward);
if (Physics.Raycast(TopRay, out TopHit, TopDistance, ActionLayer))
{
if (debug)
{
//Debug.DrawRay(Top.position, Top.forward * TopHit.distance, Color.blue);
Debug.DrawLine(TopRay.origin, TopHit.point);
}
if (ActionTag.Contains(TopHit.collider.gameObject.tag))
{
TopValid = true;
}
else
{
TopValid = false;
}
}
else
{
TopValid = false;
}
FrontRay = new Ray(Front.position, -Front.up);
if (Physics.Raycast(FrontRay, out FrontHit, FrontDistance, ActionLayer))
{
if (debug)
{
//Debug.DrawRay(Top.position, Top.forward * TopHit.distance, Color.blue);
Debug.DrawLine(FrontRay.origin, FrontHit.point);
}
if (ActionTag.Contains(FrontHit.collider.gameObject.tag))
{
FrontValid = true;
}
else
{
FrontValid = false;
}
}
else
{
FrontValid = false;
}
}
public void CheckObject()
{
if (!OverTopValid && !TopValid && !MiddleValid && !FrontValid )
{
canClimb = false;
canVault = false;
canStepup = false;
canParkour = false;
}
if (!OverTopValid && TopValid && MiddleValid && FrontValid) // climb
{
canClimb = true;
canVault = false;
canStepup = false;
canParkour = true;
m_Target = MiddleHit.point;
m_Target.y = MiddleHit.collider.bounds.extents.y + MiddleHit.transform.position.y;
Raycast.position = m_Target;
ray = new Ray(Raycast.position, -Front.up);
if (Physics.Raycast(ray, out RayHit, RaycastDistance, ActionLayer))
{
if (!inParkour)
{
hit = true;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
}
else
{
hit = false;
}
}
else
{
hit = false;
}
}
if (OverTopValid && TopValid && MiddleValid && FrontValid) // climb high
{
//canclimbhigh
canClimb = true;
canVault = false;
canStepup = false;
canParkour = true;
m_Target = MiddleHit.point;
m_Target.y = MiddleHit.collider.bounds.extents.y + MiddleHit.transform.position.y;
Raycast.position = m_Target;
ray = new Ray(Raycast.position, -Front.up);
if (Physics.Raycast(ray, out RayHit, RaycastDistance, ActionLayer))
{
if (!inParkour)
{
hit = true;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
}
else
{
hit = false;
}
}
else
{
hit = false;
}
}
if (!OverTopValid && !TopValid && MiddleValid && !FrontValid) //vault
{
canClimb = false;
canVault = true;
canStepup = false;
canParkour = true;
m_Target = MiddleHit.point;
m_Target.y = MiddleHit.collider.bounds.extents.y + MiddleHit.transform.position.y;
Raycast.position = m_Target;
ray = new Ray(Raycast.position, -Front.up);
if (Physics.Raycast(ray, out RayHit, RaycastDistance, ActionLayer))
{
if (!inParkour)
{
hit = true;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
}
else
{
hit = false;
}
}
else
{
hit = false;
}
}
if (!OverTopValid && !TopValid && MiddleValid && FrontValid)
{
canClimb = false;
canVault = false;
canStepup = true;
canParkour = true;
m_Target = MiddleHit.point;
m_Target.y = MiddleHit.collider.bounds.extents.y + MiddleHit.transform.position.y;
Raycast.position = m_Target;
ray = new Ray(Raycast.position, -Front.up);
if (Physics.Raycast(ray, out RayHit, RaycastDistance, ActionLayer))
{
if (!inParkour)
{
hit = true;
Target = RayHit.point;
Target.y = RayHit.transform.position.y + Climboffset;
}
else
{
hit = false;
}
}
else
{
hit = false;
}
} //steupup
}
public virtual void DisablePlayerGravityAndCollision(bool disableGravity ,bool disableCollision)
{
inParkour = true;
Invoke("disabledelay",1f);
if (disableGravity)
{
tpc.cc._rigidbody.useGravity = false;
}
if (disableCollision)
{
tpc.cc._capsuleCollider.isTrigger = true;
}
}
void EnablePlayerGravityAndCollision()
{
if (!tpc.cc.IsAnimatorTag("Parkour") && inParkour && checkupdate)
{
Debug.Log("Enable gravity");
tpc.cc._rigidbody.useGravity = true;
tpc.cc._capsuleCollider.isTrigger = false;
inParkour = false;
checkupdate = false;
}
}
}