Câmera estar limitada ao tamanho da tela
3 participantes
Página 1 de 1
Câmera estar limitada ao tamanho da tela
Seguinte,
Estou fazendo um joguinho e me deparei com uma situação...
Tenho que usar zoom e planning em uma tela e encontrei na internet um script e dei umas arrumadinhas para adequar ao jogo, mas houve um problema...
Ele faz zoom e planning de boa... tela 1 - https://www.dropbox.com/s/l9vxz6g57b80rat/Tela2.png?dl=0
Mas, a câmera vai além das bordas da tela inicial... tela inicial - https://www.dropbox.com/s/4adiwlvynpw2wm5/Tela1.png?dl=0
A imagem da câmera indo além da tela inicial... câmera além da tela inicial - https://www.dropbox.com/s/a85xis4b3hkskcz/Tela3.png?dl=0
Gostaria de saber se alguém pode me ajudar a arrumar o script para que a câmera fazendo o zoom e o planning, não ultrapassagem a tela inicial proposta.
Desde já, agradeço...
Estou fazendo um joguinho e me deparei com uma situação...
Tenho que usar zoom e planning em uma tela e encontrei na internet um script e dei umas arrumadinhas para adequar ao jogo, mas houve um problema...
Ele faz zoom e planning de boa... tela 1 - https://www.dropbox.com/s/l9vxz6g57b80rat/Tela2.png?dl=0
Mas, a câmera vai além das bordas da tela inicial... tela inicial - https://www.dropbox.com/s/4adiwlvynpw2wm5/Tela1.png?dl=0
A imagem da câmera indo além da tela inicial... câmera além da tela inicial - https://www.dropbox.com/s/a85xis4b3hkskcz/Tela3.png?dl=0
Gostaria de saber se alguém pode me ajudar a arrumar o script para que a câmera fazendo o zoom e o planning, não ultrapassagem a tela inicial proposta.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ZoomInZoomOut : MonoBehaviour
{
Vector3 touchStart;
public float zoomOutMin = 1;
public float zoomOutMax = 8;
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
touchStart = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
if (Input.touchCount == 2)
{
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
float prevMagnitude = (touchZeroPrevPos - touchOnePrevPos).magnitude;
float currentMagnitude = (touchZero.position - touchOne.position).magnitude;
float difference = currentMagnitude - prevMagnitude;
zoom(difference * 0.01f);
}
else if (Input.GetMouseButton(0))
{
Vector3 direction = touchStart - Camera.main.ScreenToWorldPoint(Input.mousePosition);
Camera.main.transform.position += direction;
}
zoom(Input.GetAxis("Mouse ScrollWheel"));
}
void zoom(float increment)
{
Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize - increment, zoomOutMin, zoomOutMax);
}
}
Desde já, agradeço...
joffersoju- Avançado
- PONTOS : 2429
REPUTAÇÃO : 4
Respeito as regras :
Re: Câmera estar limitada ao tamanho da tela
Da pra fazer um "Clamp" na posição com limites dinâmios baseados na aproximação atual da tela, mas para isso, preciso saber melhor como este sistema está configurado, tipo, como foi construída a cena...
Se puder disponibilizar um package para que a gente possa alterar, seria o ideal.
Se puder disponibilizar um package para que a gente possa alterar, seria o ideal.
Re: Câmera estar limitada ao tamanho da tela
Oi Marcos,
O link para acesso ao package da cena é esse https://www.dropbox.com/s/xthk90xyt00z9vh/PackageSchutz.unitypackage?dl=0
Obg...
O link para acesso ao package da cena é esse https://www.dropbox.com/s/xthk90xyt00z9vh/PackageSchutz.unitypackage?dl=0
Obg...
joffersoju- Avançado
- PONTOS : 2429
REPUTAÇÃO : 4
Respeito as regras :
Re: Câmera estar limitada ao tamanho da tela
joffersoju escreveu:Oi Marcos,
O link para acesso ao package da cena é esse https://www.dropbox.com/s/xthk90xyt00z9vh/PackageSchutz.unitypackage?dl=0
Obg...
Possui outro meio de armazenamento? Ou talvez um arquivo menor? Não consigo baixar por que "o arquivo é muito grande" segundo o dropbox
Re: Câmera estar limitada ao tamanho da tela
Oi...
Vou mandar esse do drive... https://drive.google.com/open?id=18VOpeu6_40opDKnnNRN-vH0Whn1N1Rys
Att
Vou mandar esse do drive... https://drive.google.com/open?id=18VOpeu6_40opDKnnNRN-vH0Whn1N1Rys
Att
joffersoju- Avançado
- PONTOS : 2429
REPUTAÇÃO : 4
Respeito as regras :
Re: Câmera estar limitada ao tamanho da tela
Você definiu um limite estático para a movimentação da câmera, mas como seu zoom é baseado na alteração da escala ortográfica da mesma, o limite da movimentação pro zoom minimo é uma, e pro zoom máximo é outra, o que você pode fazer é usar uma regra de três para pegar o valor correto dos limites tendo como base o zoom minimo e o máximo. Dessa forma a movimentação máxima permitida será de acordo com o nível do zoom.
SteveRogers- Instrutor
-
PONTOS : 2598
REPUTAÇÃO : 156
Respeito as regras :
Re: Câmera estar limitada ao tamanho da tela
Com certeza não é o melhor código que já fiz, mas tem algum princípio de funcionamento já:
@@ remova a filiação da sua câmera de quaquer objeto, ou, se ela precisa estar filiada a algum objeto, este objeto deve estar na posição (0, 0, 0)
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ZoomInZoomOut : MonoBehaviour{
Vector3 touchStart;
public float zoomOutMin = 1;
public float zoomOutMax = 8;
public float bordLimit = 5;
public int speed = 10;
void Start(){
transform.position = new Vector3 (0, 0, -10);
Camera.main.orthographicSize = zoomOutMax;
}
// Update is called once per frame
void Update(){
if (Input.GetMouseButtonDown(0)){
touchStart = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
if (Input.touchCount == 2){
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
float prevMagnitude = (touchZeroPrevPos - touchOnePrevPos).magnitude;
float currentMagnitude = (touchZero.position - touchOne.position).magnitude;
float difference = currentMagnitude - prevMagnitude;
zoom(difference * 0.01f);
}
else if (Input.GetMouseButton(0)){
Vector3 direction = touchStart - Camera.main.ScreenToWorldPoint(Input.mousePosition);
Camera.main.transform.position += direction;
}
zoom(Input.GetAxis("Mouse ScrollWheel"));
}
void zoom(float increment){
Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize - increment, zoomOutMin, zoomOutMax);
float horizontal = Input.GetAxis("Horizontal") * speed * Time.deltaTime; // Eixo - X
transform.Translate(horizontal, 0, 0);// Aplicando as mudanças
//Restringir o movimento entre dois valores
float ortographicLimit = Camera.main.orthographicSize - 1;
float absLimit = 1 + Mathf.Abs (ortographicLimit);
float limitX = (1/absLimit)*bordLimit;
if (transform.position.x <= -limitX || transform.position.x >= limitX){
float xPos = Mathf.Clamp(transform.position.x, -limitX, limitX);
transform.position = new Vector3(xPos, transform.position.y, transform.position.z);
}
//
float limitY = (1/Camera.main.orthographicSize)*bordLimit*1.5f;
if (transform.position.y <= -limitY || transform.position.y >= limitY){
float yPos = Mathf.Clamp(transform.position.y, -limitY, limitY);
transform.position = new Vector3(transform.position.x, yPos, transform.position.z);
}
}
}
@@ remova a filiação da sua câmera de quaquer objeto, ou, se ela precisa estar filiada a algum objeto, este objeto deve estar na posição (0, 0, 0)
Re: Câmera estar limitada ao tamanho da tela
Ficou bom demais!!!
Valew Marcos...
Você é fera!!!
Valew Marcos...
Você é fera!!!
joffersoju- Avançado
- PONTOS : 2429
REPUTAÇÃO : 4
Respeito as regras :
![-](https://2img.net/i/empty.gif)
» Organizar GUI menu, para qualquer tamanho de tela no Unity 3D
» Raycast reconhecer qualquer ponto da tela em camera fixa
» Tamanho da câmera
» Tamanho da câmera (2D)
» Como fazer o canvas se ajusta com o tamanho da tela?
» Raycast reconhecer qualquer ponto da tela em camera fixa
» Tamanho da câmera
» Tamanho da câmera (2D)
» Como fazer o canvas se ajusta com o tamanho da tela?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos