Como definir limites de zoom para um objeto inspecionado?
2 participantes
Página 1 de 1
Como definir limites de zoom para um objeto inspecionado?
Criei um script que me permite inspecionar objetos que tenham um mesh collider quando clico nele. Ou seja, eu clico no objeto, ele fica no centro da tela e com o scroll do mouse eu posso aproximar ou afastar ele.
O problema é que se eu aproximar demais o objeto entra no jogador e se eu afastar demais fica ruim de visualizar.
Eu gostaria de saber como estabelecer um limite de distancia maxima e minima para o objeto em relação ao jogador. O script que criei para examinar o objeto é este abaixo:
A parte do "voidAjusteObjeto" é onde tento estabelecer esses limites de distância, mas sem sucesso. Alguém pode me ajuda, por favor? O que faço para estabelecer um limite máximo e mínimo que o objeto pode se aproximar do jogador?
O problema é que se eu aproximar demais o objeto entra no jogador e se eu afastar demais fica ruim de visualizar.
Eu gostaria de saber como estabelecer um limite de distancia maxima e minima para o objeto em relação ao jogador. O script que criei para examinar o objeto é este abaixo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets;
namespace UnityStandardAssets.Characters.FirstPerson
{
public class ExaminarObjetos : MonoBehaviour
{
Camera mainCam;//Camera Object Will Be Placed In Front Of
GameObject clickedObject;//Currently Clicked Object
public GameObject Jogador;
public GameObject Efeitos;
//Holds Original Postion And Rotation So The Object Can Be Replaced Correctly
Vector3 originaPosition;
Vector3 originalRotation;
//If True Allow Rotation Of Object
bool examineMode;
void Start()
{
mainCam = Camera.main;
examineMode = false;
}
private void Update()
{
ClickObject();//Decide What Object To Examine
AjusteObjeto();
TurnObject();//Allows Object To Be Rotated
ExitExamineMode();//Returns Object To Original Postion
}
void ClickObject()
{
if (Input.GetMouseButtonDown(0) && examineMode == false)
{
RaycastHit hit;
Ray ray = mainCam.ScreenPointToRay(Input.mousePosition);
Vector3 PInicial = mainCam.transform.position + (transform.forward * 1.5f);
if (Physics.Raycast(ray, out hit))
{
//ClickedObject Will Be The Object Hit By The Raycast
clickedObject = hit.transform.gameObject;
//Save The Original Postion And Rotation
originaPosition = clickedObject.transform.position;
originalRotation = clickedObject.transform.rotation.eulerAngles;
//Now Move Object In Front Of Camera
clickedObject.transform.position = PInicial;
Debug.Log(Mathf.Abs((clickedObject.transform.position.x) + Mathf.Abs(clickedObject.transform.position.z)) - (Mathf.Abs(PInicial.x) + Mathf.Abs(PInicial.z)));
//Pause The Game
Time.timeScale = 0;
Jogador.GetComponent<FirstPersonController>().enabled = false;
Efeitos.SetActive(true);
//Turn Examine Mode To True
examineMode = true;
}
}
}
void AjusteObjeto()
{
Vector3 Dmaximo = mainCam.transform.position + (transform.forward * 1.5f);
Vector3 Dminimo = mainCam.transform.position + (transform.forward * 0.5f);
Vector3 PInicial = mainCam.transform.position + (transform.forward * 1.5f);
if (Input.GetAxis("Mouse ScrollWheel") > 0 && examineMode)
{
clickedObject.transform.position = clickedObject.transform.position + (transform.forward * 0.05f);
Debug.Log(Mathf.Abs((clickedObject.transform.position.x) + Mathf.Abs(clickedObject.transform.position.z)) - (Mathf.Abs(PInicial.x) + Mathf.Abs(PInicial.z)));
}
if (Input.GetAxis("Mouse ScrollWheel") < 0 && examineMode)
{
clickedObject.transform.position = clickedObject.transform.position - (transform.forward * 0.05f);
Debug.Log(Mathf.Abs((clickedObject.transform.position.x) + Mathf.Abs(clickedObject.transform.position.z)) - (Mathf.Abs(PInicial.x) + Mathf.Abs(PInicial.z)));
}
}
void TurnObject()
{
if (Input.GetMouseButton(2) && examineMode)
{
float rotationSpeed = 15;
float xAxis = Input.GetAxis("Mouse X") * rotationSpeed;
float yAxis = Input.GetAxis("Mouse Y") * rotationSpeed;
clickedObject.transform.Rotate(Vector3.up, -xAxis, Space.World);
clickedObject.transform.Rotate(Vector3.right, yAxis, Space.World);
}
}
void ExitExamineMode()
{
if (Input.GetMouseButtonDown(1) && examineMode)
{
//Reset Object To Original Position
clickedObject.transform.position = originaPosition;
clickedObject.transform.eulerAngles = originalRotation;
//Unpause Game
Time.timeScale = 1;
Jogador.GetComponent<FirstPersonController>().enabled = true;
Efeitos.SetActive(false);
//Return To Normal State
examineMode = false;
}
}
}
}
A parte do "voidAjusteObjeto" é onde tento estabelecer esses limites de distância, mas sem sucesso. Alguém pode me ajuda, por favor? O que faço para estabelecer um limite máximo e mínimo que o objeto pode se aproximar do jogador?
Dariva- Iniciante
- PONTOS : 1428
REPUTAÇÃO : 0
Respeito as regras :
Re: Como definir limites de zoom para um objeto inspecionado?
Você pode usar o Mathf.Clamp
Weslley- Moderador
- PONTOS : 5477
REPUTAÇÃO : 742
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Tópicos semelhantes
» Como faço para mudar a posição de um objeto para perto de outro.
» Como posso definir um código OnTriggerEnter2D para 2 Colliders específicos?
» Como fazer para interagir um objeto com um outro objeto [Estilo Granny]
» Como fazer para um objeto não colidir com um "collider" e o outro objeto si
» Como mover um objeto para outro objeto (Navmesh ?)
» Como posso definir um código OnTriggerEnter2D para 2 Colliders específicos?
» Como fazer para interagir um objeto com um outro objeto [Estilo Granny]
» Como fazer para um objeto não colidir com um "collider" e o outro objeto si
» Como mover um objeto para outro objeto (Navmesh ?)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos