public override void InitEquipment(SkillAsset.SkillRunner runner, ItemAsset.ItemObject item) { base.InitEquipment(runner, item); if (null != mGlideObj) { mAnimator = mGlideObj.GetComponent <Animator>(); } mPCM = runner.GetComponent <PhysicsCharacterMotor>(); }
public void SafeCheckVelocity(PhysicsCharacterMotor rigidbody) { Vector3 pos = rigidbody.transform.position; if (pos.y < 0) { rigidbody.transform.position = pos - pos.y * Vector3.up; return; } if (IsPosInGenerating(ref pos)) { rigidbody.FreezeGravity = true; } else //if(!rigidbody.grounded) { rigidbody.FreezeGravity = false; float upRayLen = 1500.0f; float dnRayLen = 400.0f; int vfterrainLayer = Pathea.Layer.VFVoxelTerrain; RaycastHit hit; if (Physics.Raycast(pos + Vector3.up * upRayLen, Vector3.down, out hit, upRayLen - 0.1f, 1 << vfterrainLayer)) { // Add check if part of player is under terrain, may cause player jump up out of cave if (pos.y >= hit.point.y - 1.5f || !Physics.Raycast(pos + Vector3.up, Vector3.down, dnRayLen, 1 << vfterrainLayer)) { VFVoxel voxel = VFVoxelTerrain.self.Voxels.SafeRead((int)pos.x, (int)pos.y, (int)pos.z); if (0 != voxel.Type && voxel.Volume > 127) { voxel = VFVoxelTerrain.self.Voxels.SafeRead((int)pos.x, (int)pos.y - 1, (int)pos.z); if (0 != voxel.Type && voxel.Volume > 127) { Debug.Log("PlayerFallenCheckFix"); rigidbody.transform.position = hit.point; } } } } } }
void UpdateUserPos() { Vector3 StartPos = mLinePosList[mCurrentMoveIndex]; Vector3 EndPos = mLinePosList[mCurrentMoveIndex + 1]; Vector3 Dir = EndPos - StartPos; mOffsetPos = mSkillRunner.transform.position - mGunMuzzle[mCurrentIndex].End.position; float MoveDis = mPushSpeed * Time.fixedDeltaTime; mCurrentMoveDis += MoveDis; PhysicsCharacterMotor pcM = mSkillRunner.GetComponent <PhysicsCharacterMotor>(); if (null != pcM) { if (!pcM.GetComponent <Rigidbody>().isKinematic) { pcM.GetComponent <Rigidbody>().velocity = Vector3.zero; } mClimpOffset -= Time.fixedDeltaTime; if (mClimpOffset < 0f && pcM.grounded) { mSkillRunner.transform.position = EndPos; mState = HookGunState.Null; for (int i = 0; i < mLineList.Count; i++) { mLineList[i].localPosition = Vector3.zero; } mHook.transform.localPosition = Vector3.zero; Invoke("EndClimb", 0.2f); if (Vector3.Distance(EndPos, mHook.position) < 1f) { Ray ray = new Ray(mHook.position + 0.5f * Vector3.up, mSkillRunner.transform.forward); if (!Physics.Raycast(ray, 0.5f)) { mSkillRunner.transform.position = mHook.position + 0.5f * (Vector3.up + mSkillRunner.transform.forward); } } else { Ray ray = new Ray(mSkillRunner.transform.position + 0.5f * Vector3.up, mSkillRunner.transform.forward); if (!Physics.Raycast(ray, 0.5f)) { mSkillRunner.transform.position = mSkillRunner.transform.position + 0.5f * (Vector3.up + mSkillRunner.transform.forward); } } return; } } if (mCurrentMoveDis > Dir.magnitude) { if (mCurrentMoveIndex == mLinePosList.Count - 2) // endMove { mSkillRunner.transform.position = EndPos; mState = HookGunState.Null; for (int i = 0; i < mLineList.Count; i++) { mLineList[i].localPosition = Vector3.zero; } mHook.transform.localPosition = Vector3.zero; Invoke("EndClimb", 0.2f); Ray ray = new Ray(mHook.position + 0.5f * Vector3.up, mSkillRunner.transform.forward); if (!Physics.Raycast(ray, 0.5f)) { mSkillRunner.transform.position = mHook.position + 0.5f * (Vector3.up + mSkillRunner.transform.forward); } return; } else { mCurrentMoveDis -= Dir.magnitude; mCurrentMoveIndex++; StartPos = mLinePosList[mCurrentMoveIndex]; EndPos = mLinePosList[mCurrentMoveIndex + 1]; Dir = EndPos - StartPos; } } mSkillRunner.transform.position = StartPos + Dir.normalized * mCurrentMoveDis + mOffsetPos; for (int i = 0; i < mLineList.Count; i++) { if (i < mCurrentMoveIndex + 1) { mLineList[i].position = mGunMuzzle[mCurrentIndex].End.position; } else { mLineList[i].position = mLinePosList[i]; } } }