Я нашел способ лучше, который делает эту работу. Я немного изменил свой метод. Вместо того, чтобы использовать переменную для сохранения предыдущей позиции, я настроил ее так, что если в raycast зарегистрировано попадание, преобразование не произойдет, но если попадание не будет обнаружено, преобразование произойдет. Я также изменил этот код из этого оригинального источника http://wiki.unity3d.com/index.php/MouseCameraControl
if (horizontalTranslation.isActivated())
{
//sets translate to be used for transformation
float translateX = Input.GetAxis(mouseHorizontalAxisName) * horizontalTranslation.sensitivity;
//variables for raycasting
origin = transform.position;
Vector3 eLeft = -GetComponent<Camera>().transform.right;
Vector3 eRight = GetComponent<Camera>().transform.right;
RaycastHit hitLeft;
RaycastHit hitRight;
//raycast sent to right
if (translateX > 0)
{
if (Physics.SphereCast(origin, sphereRadius, eRight, out hitRight, maxDistance, layerMask, QueryTriggerInteraction.UseGlobal))
{
//do nothing if hit is detected
}
else
{
//transform position if no hit detected
transform.Translate(translateX, 0, 0);
}
}
//raycast sent to left
if (translateX < 0)
{
if (Physics.SphereCast(origin, sphereRadius, eLeft, out hitLeft, maxDistance, layerMask, QueryTriggerInteraction.UseGlobal))
{
//transform.Translate(translateX, 0, 0);
}
else
{
transform.Translate(translateX, 0, 0);
}
}
}