Я имел дело с этой проблемой (которая начала происходить без причины) в течение последних 3 дней, и с ужесточением сроков, это сводит меня с ума.
Итак, суть в том, что игрок нажимаети камера перемещается в какое-то место и разблокирует мышь, поэтому игрок может щелкнуть интерактивный (в данном случае дневник).
Что я сделал, чтобы попытаться это исправить:
-Создана сборка разработки, нет ошибок и ничего в output.log
-Повторены все активы
-Запущен новый проект и импортированы туда активы
-Обновлен с Unity с 2018.1 до 2018.3
-Снял скрипт и снова прикрепил его
-Сстроил для разных систем
-Перезапустил Unity и мой компьютер
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DiaryController : MonoBehaviour
{
public Camera mainCam;
public float moveSpeed = 10.0f;
public GameObject cameraObject;
public GameObject targetObject;
private bool movingTowardsTarget = false;
private float lerpSpeed = 0.225f;
public Transform fromRot;
public Transform toRot;
private bool inPosition = false;
public bool onSwitch = false;
public bool freezecamera = false;
public bool freezeplayer = false;
public WheelchairController Mov;
public bool EPressed = false;
public GameObject Crosshair;
public MouseControl myMouseScript;
private bool onDiary = false;
void Start()
{
onDiary = false;
mainCam = Camera.main;
}
// Update is called once per frame
void Update()
{
FreezeCamera();//Checks if the camera has been frozen
FreezePlayer();//Checks if the player has been frozen
if (onSwitch && Input.GetKeyDown(KeyCode.E))
{
CheckPlayer();
EPressed = true;
}
if (onSwitch && movingTowardsTarget)
{
GoToDiary();
Crosshair.SetActive(false);
}
else if (onSwitch && !movingTowardsTarget && EPressed)
{
GoToChair();
Crosshair.SetActive(true);
}
}
void CheckPlayer()
{
if (movingTowardsTarget)
{
movingTowardsTarget = false;
freezecamera = false;
}
else
{
fromRot = fromRot.transform;
toRot = toRot.transform;
// freezecamera = true;
freezeplayer = true;
movingTowardsTarget = true;
}
}
void GoToDiary()
{
StartCoroutine(DelayFreeze());
MoveTowardsTarget(targetObject);
Cursor.visible = true;
Cursor.lockState = CursorLockMode.Confined;
Crosshair.SetActive(false);
freezecamera = true;
freezeplayer = true;
onDiary = true;
}
void GoToChair()
{
StartCoroutine(DelayMov());
MoveTowardsTarget(cameraObject);
freezecamera = false;
Cursor.lockState = CursorLockMode.Locked;
Crosshair.SetActive(true);
onDiary = false;
}
IEnumerator DelayMov()
{
Debug.Log("DelayActivated");
yield return new WaitForSeconds(2);
freezeplayer = false;
}
IEnumerator DelayFreeze()
{
if (!freezeplayer)
{
Debug.Log("DelayActivated");
yield return new WaitForSeconds(1);
freezeplayer = true;
}
}
void MoveTowardsTarget(GameObject target)
{
transform.position = Vector3.MoveTowards(transform.position, target.transform.position, moveSpeed * Time.deltaTime);
transform.rotation = target.transform.rotation;
if (Vector3.Distance(transform.position, target.transform.position) < 0.1)
{
inPosition = true;
Debug.Log("InPosition");
if (inPosition)
{
transform.rotation = target.transform.rotation;
if (Mathf.Abs(fromRot.localEulerAngles.y - toRot.localEulerAngles.y) < 3)
{
transform.rotation = target.transform.rotation;
//movingTowardsTarget = false;
inPosition = false;
Debug.Log("RotatingCamera");
}
}
else
{
transform.rotation = Quaternion.Lerp(fromRot.rotation, toRot.rotation, Time.time * lerpSpeed);
Debug.Log("RotatingCamera2");
}
}
}
void FreezeCamera()
{
if (freezecamera)
{
Debug.Log("CameraFrozen");
myMouseScript.rotationSpeed = 0.0f;
// MouseControl.mouseLookEnabled = false;
ZoomIn.zoomEnable = false;
Crosshair.SetActive(false);
}
else if (!freezecamera)
{
myMouseScript.rotationSpeed = 0.5f;
//MouseControl.mouseLookEnabled = true;
//ZoomIn.zoomEnable = true;
//Crosshair.SetActive(true);
}
}
void FreezePlayer()
{
if (freezeplayer)
{
Debug.Log("PlayerFrozen");
Mov.moveSpeed = 0.0f;
Mov.turnSpeed = 0.0f;
Mov.freeze = true;
}
else if (!freezeplayer)
{
Mov.moveSpeed = 0.4f;
Mov.turnSpeed = 2.5f;
Mov.freeze = false;
}
}
void OnGUI()
{
if (onSwitch)
{
if (!freezeplayer)
{
GUI.Box(new Rect(0, 0, 200, 20), "Press E to open diary");
}
else
{
GUI.Box(new Rect(0, 0, 200, 20), "Press E to close diary");
}
}
}
}
Вот как он ведет себя в редакторе: https://i.gyazo.com/4570740f027b736789ed1ab13488bf44.gif
Вот как он ведет себя в сборке: https://i.gyazo.com/6f1b0485855c24c81abb2278f4361a36.gif