static object PerformMemberwiseClone(ref object o) { var ins = new UnityEngine.AI.OffMeshLinkData(); ins = (UnityEngine.AI.OffMeshLinkData)o; return(ins); }
IEnumerator CheckOffMeshLink() { do { //Debug.Log(Vector3.Distance(transform.eulerAngles, desiredRotation.eulerAngles)); method = OffMeshLinkMoveMethod.Grounded; yield return(new WaitForEndOfFrame()); }while (quickTurn); yield return(new WaitForEndOfFrame()); UnityEngine.AI.OffMeshLinkData data = agent.currentOffMeshLinkData; UnityEngine.AI.OffMeshLinkType linkType = data.linkType; string offMeshLinkTag = string.Empty; if (data.offMeshLink) { offMeshLinkTag = data.offMeshLink.tag; } switch (linkType) { case UnityEngine.AI.OffMeshLinkType.LinkTypeDropDown: agent.autoTraverseOffMeshLink = false; method = OffMeshLinkMoveMethod.DropDown; break; case UnityEngine.AI.OffMeshLinkType.LinkTypeJumpAcross: agent.autoTraverseOffMeshLink = false; method = OffMeshLinkMoveMethod.JumpAcross; break; case UnityEngine.AI.OffMeshLinkType.LinkTypeManual: switch (offMeshLinkTag) { case "StepUp": agent.autoTraverseOffMeshLink = false; method = OffMeshLinkMoveMethod.Action; break; case "JumpOver": agent.autoTraverseOffMeshLink = false; method = OffMeshLinkMoveMethod.Action; break; case "ClimbUp": agent.autoTraverseOffMeshLink = false; method = OffMeshLinkMoveMethod.Action; break; default: agent.autoTraverseOffMeshLink = false; method = OffMeshLinkMoveMethod.Grounded; break; } break; } }
//Check if we have a parkour in the plotted path. (If so, don't dodge because otherwise the agent breaks.) public virtual bool HaveOffMeshLinkInPath() { UnityEngine.AI.OffMeshLinkData linkData = agent.nextOffMeshLinkData; //print(linkData.endPos); //print(linkData.activated); //print(linkData.offMeshLink); //print(linkData.valid); return(linkData.valid); }
IEnumerator NormalSpeed(UnityEngine.AI.NavMeshAgent agent) { UnityEngine.AI.OffMeshLinkData data = agent.currentOffMeshLinkData; Vector3 endPos = data.endPos + Vector3.up * agent.baseOffset; while (agent.transform.position != endPos) { agent.transform.position = Vector3.MoveTowards(agent.transform.position, endPos, agent.speed * Time.deltaTime); yield return(null); } }
IEnumerator Parabola(UnityEngine.AI.NavMeshAgent agent, float jumpHeight, float jumpDuration) { UnityEngine.AI.OffMeshLinkData data = agent.currentOffMeshLinkData; Vector3 startPos = agent.transform.position; Vector3 endPos = data.endPos + Vector3.up * agent.baseOffset; float normalizedTime = 0.0f; while (normalizedTime < 1.0f) { float yOffset = jumpHeight * 4.0f * (normalizedTime - normalizedTime * normalizedTime); agent.transform.position = Vector3.Lerp(startPos, endPos, normalizedTime) + yOffset * Vector3.up; normalizedTime += Time.deltaTime / jumpDuration; yield return(null); } }
static void WriteBackInstance(CSHotFix.Runtime.Enviorment.AppDomain __domain, StackObject *ptr_of_this_method, IList <object> __mStack, ref UnityEngine.AI.OffMeshLinkData instance_of_this_method) { ptr_of_this_method = ILIntepreter.GetObjectAndResolveReference(ptr_of_this_method); switch (ptr_of_this_method->ObjectType) { case ObjectTypes.Object: { __mStack[ptr_of_this_method->Value] = instance_of_this_method; } break; case ObjectTypes.FieldReference: { var ___obj = __mStack[ptr_of_this_method->Value]; if (___obj is ILTypeInstance) { ((ILTypeInstance)___obj)[ptr_of_this_method->ValueLow] = instance_of_this_method; } else { var t = __domain.GetType(___obj.GetType()) as CLRType; t.SetFieldValue(ptr_of_this_method->ValueLow, ref ___obj, instance_of_this_method); } } break; case ObjectTypes.StaticFieldReference: { var t = __domain.GetType(ptr_of_this_method->Value); if (t is ILType) { ((ILType)t).StaticInstance[ptr_of_this_method->ValueLow] = instance_of_this_method; } else { ((CLRType)t).SetStaticFieldValue(ptr_of_this_method->ValueLow, instance_of_this_method); } } break; case ObjectTypes.ArrayReference: { var instance_of_arrayReference = __mStack[ptr_of_this_method->Value] as UnityEngine.AI.OffMeshLinkData[]; instance_of_arrayReference[ptr_of_this_method->ValueLow] = instance_of_this_method; } break; } }
public GameObject CheckActionObject() { GameObject _object = null; RaycastHit hitInfoAction; Vector3 yOffSet = new Vector3(0f, actionRayHeight, 0f); UnityEngine.AI.OffMeshLinkData data = agent.currentOffMeshLinkData; Ray ray = new Ray(transform.position + yOffSet, new Vector3(data.endPos.x, transform.position.y, data.endPos.z) - transform.position); //Debug.DrawRay(transform.position + yOffSet, ray.direction*distanceOfRayActionTrigger, Color.blue, 0.1f); if (Physics.Raycast(ray, out hitInfoAction, distanceOfRayActionTrigger, actionLayer)) { _object = hitInfoAction.transform.gameObject; } return(_object); }
IEnumerator NormalSpeed(UnityEngine.AI.NavMeshAgent agent) { UnityEngine.AI.OffMeshLinkData data = agent.currentOffMeshLinkData; Vector3 endPos = data.endPos + Vector3.up * agent.baseOffset; while (agent.transform.position != endPos) { //Debug.DrawLine(transform.position, endPos, Color.red); transform.position = Vector3.MoveTowards(transform.position, endPos, 6f * Time.deltaTime); agent.enabled = false; yield return(new WaitForEndOfFrame()); } if (agent.enabled && !agent.autoTraverseOffMeshLink) { agent.CompleteOffMeshLink(); } agent.enabled = true; }
private void DoGetOffMeshLinkData() { UnityEngine.AI.OffMeshLinkData data = agent.currentOffMeshLinkData; if (!activated.IsNone) { activated.Value = data.activated; } if (!endPos.IsNone) { endPos.Value = data.endPos; } if (!linkType.IsNone) { linkType.Value = data.linkType.ToString(); } if (!startPos.IsNone) { startPos.Value = data.startPos; } if (!valid.IsNone) { valid.Value = data.valid; } }
void OnAnimatorMove() { actions = baseLayerInfo.IsTag("CustomAction") || lockMovement; if (Time.timeScale == 0 || agent == null) { return; } if (agent.enabled && !agent.isOnOffMeshLink && agent.updatePosition) { Vector3 velocity = animator.deltaPosition / Time.deltaTime; if (!velocity.IsVectorNaN()) { agent.velocity = velocity; } else { agent.velocity = Vector3.zero; } } if (!_rigidbody.useGravity && !actions && !agent.isOnOffMeshLink) { _rigidbody.velocity = animator.deltaPosition; } if (!agent.updatePosition && !actions) { var point = agent.enabled ? agent.nextPosition : destination; if (Vector3.Distance(transform.position, point) > 0.5f) { desiredRotation = Quaternion.LookRotation(point - transform.position); var rot = Quaternion.Euler(transform.eulerAngles.x, desiredRotation.eulerAngles.y, transform.eulerAngles.z); transform.rotation = Quaternion.RotateTowards(transform.rotation, rot, agent.angularSpeed * Time.deltaTime); } transform.position = animator.rootPosition; return; } // Strafe Movement if (OnStrafeArea && !actions && currentTarget.transform != null && canSeeTarget && currentHealth > 0f) { Vector3 targetDir = currentTarget.transform.position - transform.position; float step = (meleeManager != null && isAttacking) ? attackRotationSpeed * Time.deltaTime : (strafeRotationSpeed * Time.deltaTime); Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F); var rot = Quaternion.LookRotation(newDir); transform.eulerAngles = new Vector3(transform.eulerAngles.x, rot.eulerAngles.y, transform.eulerAngles.z); } // Rotate the Character to the OffMeshLink End else if (agent.isOnOffMeshLink && !actions) { var pos = agent.nextOffMeshLinkData.endPos; targetPos = pos; UnityEngine.AI.OffMeshLinkData data = agent.currentOffMeshLinkData; desiredRotation = Quaternion.LookRotation(new Vector3(data.endPos.x, transform.position.y, data.endPos.z) - transform.position); transform.rotation = Quaternion.RotateTowards(transform.rotation, desiredRotation, (agent.angularSpeed * 2f) * Time.deltaTime); } // Free Movement else if (agent.desiredVelocity.magnitude > 0.1f && !actions && agent.enabled && currentHealth > 0f) { if (meleeManager != null && isAttacking) { desiredRotation = Quaternion.LookRotation(agent.desiredVelocity); transform.rotation = Quaternion.RotateTowards(transform.rotation, desiredRotation, agent.angularSpeed * attackRotationSpeed * Time.deltaTime); } else { desiredRotation = Quaternion.LookRotation(agent.desiredVelocity); transform.rotation = Quaternion.RotateTowards(transform.rotation, desiredRotation, agent.angularSpeed * Time.deltaTime); } } // Use the Animator rotation while doing an Action else if (actions || currentHealth <= 0f || isAttacking) { if (isRolling) { desiredRotation = Quaternion.LookRotation(rollDirection, Vector3.up); transform.rotation = desiredRotation; } else { transform.rotation = animator.rootRotation; } // Use the Animator position while doing an Action if (!agent.enabled) { destination = transform.position; transform.position = animator.rootPosition; } } }
void OnAnimatorMove() { if (agent.enabled) { agent.velocity = animator.deltaPosition / Time.deltaTime; } if (!_rigidbody.useGravity && !actions) { _rigidbody.velocity = animator.deltaPosition; } // Strafe Movement if (OnStrafeArea && !actions && target != null && canSeeTarget() && currentHealth > 0f) { Vector3 targetDir = target.position - transform.position; float step = (meleeManager != null && meleeManager.applyDamage) ? attackRotationSpeed * Time.deltaTime : (strafeRotationSpeed * Time.deltaTime); Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F); var rot = Quaternion.LookRotation(newDir); transform.eulerAngles = new Vector3(transform.eulerAngles.x, rot.eulerAngles.y, transform.eulerAngles.z); } // Rotate the Character to the OffMeshLink End else if (agent.isOnOffMeshLink && !actions) { var pos = agent.nextOffMeshLinkData.endPos; targetPos = pos; UnityEngine.AI.OffMeshLinkData data = agent.currentOffMeshLinkData; desiredRotation = Quaternion.LookRotation(new Vector3(data.endPos.x, transform.position.y, data.endPos.z) - transform.position); transform.rotation = Quaternion.RotateTowards(transform.rotation, desiredRotation, (agent.angularSpeed * 2f) * Time.deltaTime); } // Free Movement else if (agent.desiredVelocity.magnitude > 0.1f && !actions && agent.enabled && currentHealth > 0f) { if (meleeManager != null && meleeManager.applyDamage) { desiredRotation = Quaternion.LookRotation(agent.desiredVelocity); transform.rotation = Quaternion.RotateTowards(transform.rotation, desiredRotation, agent.angularSpeed * attackRotationSpeed * Time.deltaTime); } else { desiredRotation = Quaternion.LookRotation(agent.desiredVelocity); transform.rotation = Quaternion.RotateTowards(transform.rotation, desiredRotation, agent.angularSpeed * Time.deltaTime); } } // Use the Animator rotation while doing an Action else if (actions || currentHealth <= 0f || inAttack) { if (rolling) { desiredRotation = Quaternion.LookRotation(rollDirection - transform.position); transform.rotation = desiredRotation; } else { transform.rotation = animator.rootRotation; } // Use the Animator position while doing an Action if (!agent.enabled) { transform.position = animator.rootPosition; } } }
void DoGetOffMeshLinkData() { if (_agent == null) { return; } if (!_agent.isOnOffMeshLink) { return; } UnityEngine.AI.OffMeshLinkData link = new UnityEngine.AI.OffMeshLinkData(); link = _agent.nextOffMeshLinkData; if (!startPos.IsNone) { startPos.Value = link.startPos; } if (!endPos.IsNone) { endPos.Value = link.endPos; } if (!activated.IsNone) { activated.Value = link.activated; } if (!valid.IsNone) { valid.Value = link.valid; } if (!OffMeshlinkType.IsNone) { switch (link.linkType) { case UnityEngine.AI.OffMeshLinkType.LinkTypeManual: OffMeshlinkType.Value = "manual"; break; case UnityEngine.AI.OffMeshLinkType.LinkTypeDropDown: OffMeshlinkType.Value = "dropDown"; break; case UnityEngine.AI.OffMeshLinkType.LinkTypeJumpAcross: OffMeshlinkType.Value = "jumpAcross"; break; } } if (!costOverride.IsNone) { costOverride.Value = link.offMeshLink.costOverride; } if (!occupied.IsNone) { occupied.Value = link.offMeshLink.occupied; } if (!autoUpdatePositions.IsNone) { autoUpdatePositions.Value = link.offMeshLink.autoUpdatePositions; } if (!navmeshArea.IsNone) { navmeshArea.Value = link.offMeshLink.area; } if (!startGameObject.IsNone) { startGameObject.Value = link.offMeshLink.startTransform.gameObject; } if (!endGameObject.IsNone) { endGameObject.Value = link.offMeshLink.endTransform.gameObject; } }