public GameObject CameraCenter;
void RotationCamera(){
if(Input.GetMouseButton(1)){
Cam.transform.RotateAround(CameraCenter.transform.position, Cam.transform.up, Input.GetAxis("Mouse X") * 5f);
Cam.transform.RotateAround(CameraCenter.transform.position, Cam.transform.right, Input.GetAxis("Mouse Y") * 5f);
Cam.transform.rotation = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, 0f);
}
}
Start()
с помощью LookAt()
.[SerializeField] private Transform _focus;
[SerializeField] private float rotationSpeed = 1;
[SerializeField] private float moveSpeed = 1;
private void Start(){
//
tramsform.LookAt(_focus);
//
}
private void RotateCamera()
{
if (Input.GetMouseButton(1))
{
float mouseMove = Input.GetAxis("Mouse X") * rotationSpeed;
_focus.Rotate(0, mouseMove, 0); //-mouseMove для инвертирования
Debug.Log("Rotation " + mouseMove.ToString());
}
}
private void MoveCamera()
{
if (Input.GetMouseButton(0))
{
Vector3 mouseMove = new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y")) * moveSpeed;
_focus.Translate(mouseMove, Space.Self); //-mouseMove для инвертирования
Debug.Log("Moving " + mouseMove.ToString());
}
}
Cam.transform.LookAt(CameraCenter.transform); - это код, чтоб направить взгляд камеры на объект. Тогда объект окажется в центре камеры.
вообще для упрощения работы с камерой можно использовать Cinemachine
как в изометрической стратегии
public Camera CameraGeneral;
private float InputMouseScrollDeltaY{ get { return Input.mouseScrollDelta.y; }}
private float CameraScalePrev = 10f, CameraScale = 10f;
private float CameraGeneralScale{ get{ return CameraGeneral.orthographicSize; } set{ CameraGeneral.orthographicSize = value; }}
private void Start(){
CameraGeneralScale = 10f;
}
private void Update(){
ZoomCamera();
RotationCamera();
}
private void ZoomCamera(){
CameraScalePrev -= InputMouseScrollDeltaY; CameraScalePrev = Mathf.Clamp(CameraScalePrev, 2f, 20f);
CameraScale = Mathf.MoveTowards(CameraGeneral.orthographicSize, CameraScalePrev, Time.deltaTime * 30f);
CameraGeneralScale = CameraScale;
}
public GameObject CameraCenter;
private void RotationCamera(){
if(Input.GetMouseButtonDown(2)){ Cursor.visible = false; }
if(Input.GetMouseButton(2)){
CameraGeneral.transform.RotateAround(CameraCenter.transform.position, CameraGeneral.transform.up, Input.GetAxis("Mouse X") * 5f);
CameraGeneral.transform.RotateAround(CameraCenter.transform.position, CameraGeneral.transform.right, -Input.GetAxis("Mouse Y") * 5f);
CameraGeneral.transform.rotation = Quaternion.Euler(CameraGeneral.transform.eulerAngles.x, CameraGeneral.transform.eulerAngles.y, 0f);
}
if(Input.GetMouseButtonUp(2)){ Cursor.visible = true; }
}
Vector3 lastPosView;
private void MoveCamera(){
if(Input.GetMouseButtonDown(0)){ lastPosView = CameraGeneral.ScreenToWorldPoint(Input.mousePosition); }
else if(Input.GetMouseButton(0)){
var newPosView = CameraGeneral.ScreenToWorldPoint(Input.mousePosition);
var cameraMovment = (lastPosView - newPosView);
CameraGeneral.transform.Translate(new Vector3(cameraMovment.x, 0, 0));
CameraGeneral.transform.Translate(new Vector3(0, cameraMovment.y, 0));
lastPosView = CameraGeneral.ScreenToWorldPoint(Input.mousePosition);
}
}
И да, прежде чем скинуть вам решение, я его проверил.это вы о том что в первом посте?
private void RotateCamera()
{
if (Input.GetMouseButton(1))
{
float mouseMove = Input.GetAxis("Mouse X") * rotationSpeed;
_focus.Rotate(0, mouseMove, 0); //-mouseMove для инвертирования
Debug.Log("Rotation " + mouseMove.ToString());
}
}
Vector3 mouseMove = new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y")) * moveSpeed;
и на ваш CameraGeneral.transform.Translate(new Vector3(-InputGetAxisMouseX, -InputGetAxisMouseY, 0f) * (CameraScale / 55f), Space.Self);