示例#1
0
 public bool CastSphere(Vector3 origin, float radius, Vector3 direction, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = Physics3D.DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal)
 {
     return(_world.SphereCast(origin, radius, direction, out hitInfo, maxDistance, layerMask, queryTriggerInteraction));
 }
示例#2
0
        protected override void OnSimulate(float dt)
        {
            checkCode += dt;

            transform.position += _velocity * dt;

            if (m_HasTrajectoryOverride && _consumedTrajectoryCorrectionVector.sqrMagnitude <
                _trajectoryCorrectionVector.sqrMagnitude)
            {
                var     correctionLeft      = _trajectoryCorrectionVector - _consumedTrajectoryCorrectionVector;
                float   distanceThisFrame   = (transform.position - m_LastRootPosition).magnitude;
                Vector3 correctionThisFrame =
                    (distanceThisFrame / trajectoryCorrectionDistance) * _trajectoryCorrectionVector;

                correctionThisFrame = Vector3.ClampMagnitude(correctionThisFrame, correctionLeft.magnitude);

                // if (!IsServer)
                //     Debug.Log($"{(float3) correctionThisFrame},{(float3) correctionLeft} {correctionLeft.magnitude}");

                _consumedTrajectoryCorrectionVector += correctionThisFrame;

                if (_consumedTrajectoryCorrectionVector.sqrMagnitude == _trajectoryCorrectionVector.sqrMagnitude)
                {
                    m_HasTrajectoryOverride = false;
                }

                transform.position += correctionThisFrame;
            }
            else
            {
                if (!this.IsServer)
                {
                    GetComponent <MeshRenderer>().enabled = true;
                }
            }

            // Orient towards velocity
            transform.forward = _velocity.normalized;

            // add gravity to the projectile velocity for ballistic effect
            _velocity += Vector3.down * 10f * dt;

            // 碰撞检测
            Vector3 displacementSinceLastFrame = transform.position - m_LastRootPosition;

            RaycastHit[] result = new RaycastHit[1];

            int len = _physicsScene.SphereCast(m_LastRootPosition, 0.1f, displacementSinceLastFrame.normalized, result,
                                               displacementSinceLastFrame.magnitude, Physics.AllLayers, QueryTriggerInteraction.Ignore);

            if (len > 0)
            {
                // uint tick = World.GetExistingSystem<GhostPredictionSystemGroup>().PredictingTick;
                // if (this.IsServer)
                // {
                //     NetDebug.SLog(
                //         $"{tick} 击中物体:{result[0].collider.name} {(float3) result[0].point} {(float3) transform.position} {math.lengthsq((float3) result[0].point)} {checkCode}");
                // }
                // else
                // {
                //     NetDebug.CLog(
                //         $"{tick} 击中物体:{result[0].collider.name} {(float3) result[0].point} {(float3) transform.position}  {math.lengthsq((float3) result[0].point)}  {checkCode}");
                // }

                OnHit(result[0].collider, result[0].point, result[0].normal);
            }

            m_LastRootPosition = transform.position;
        }