/// <summary>[Update]</summary> void Update() { //フラグ計算に使用 bool isOldStay = isStay; isOtherObjectHit = false; if (!isEnabledRaycast) { //フラグ計算に使用 isStay = false; //isEnter Frame? if ((isStay ^ isOldStay) & isStay) { isEnter = true; isExit = false; } //isExit Frame? else if ((isStay ^ isOldStay) & isOldStay) { isEnter = false; isExit = true; } if (!isStay & !isEnter & !isExit) { rayCastResult = null; } //debug only #if UNITY_EDITOR //表示用変数更新 m_dIsStayNow = isStay; m_dIsEnterNow = isEnter; m_dIsExitNow = isExit; m_dIsEnabled = isEnabledRaycast; #endif return; } //呼び出しコスト削減 Transform myTransform = transform; Quaternion rotation = myTransform.rotation; Vector3 lossyScale = myTransform.lossyScale; Vector3 position = myTransform.position; //RaycastHit RaycastHit raycastHit = new RaycastHit(); //center #if UNITY_EDITOR centerPosition = position + myTransform.right * m_center.x + myTransform.up * m_center.y + myTransform.forward * m_center.z; #else if (m_target != null) { centerPosition = position + myTransform.right * m_center.x + myTransform.up * m_center.y + myTransform.forward * m_center.z; } #endif //direction Vector3 direction = GetRaycastDirection(centerPosition); if (m_isDirectionLock && rayCastResult != null) { direction = rayCastResult.direction; } //Raycast isStay = Physics.Raycast(centerPosition, direction, out raycastHit, m_distance, m_raycastLayerMask); //Hit! if (isStay && m_raycastTargetLayerMask.EqualBitsForGameObject(raycastHit.transform.gameObject)) { //result代入 rayCastResult = new RaycastResult(raycastHit.transform, raycastHit.point, raycastHit.normal, direction, 1 << raycastHit.transform.gameObject.layer, raycastHit.distance); } else if (isStay) { isStay = false; isOtherObjectHit = true; //result代入 rayCastResult = new RaycastResult(raycastHit.transform, raycastHit.point, raycastHit.normal, direction, 1 << raycastHit.transform.gameObject.layer, raycastHit.distance); } else { rayCastResult = null; } //isEnter Frame? if ((isStay ^ isOldStay) & isStay) { isEnter = true; isExit = false; } //isExit Frame? else if ((isStay ^ isOldStay) & isOldStay) { isEnter = false; isExit = true; } //isStay Frame else { isEnter = false; isExit = false; } if (((m_isOldDirectionLock ^ isDirectionLock) & isDirectionLock) | !isDirectionLock) { lockDirection = direction; } //debug only #if UNITY_EDITOR //表示用変数更新 m_dIsStayNow = isStay; m_dIsEnterNow = isEnter; m_dIsExitNow = isExit; m_dIsEnabled = isEnabledRaycast; #endif }