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 : 1678
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 : 5729
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Tópicos semelhantes
» definir posição de um objeto
» Preciso de um script para controlar camera em primeira pessoa com limites
» Matrix-Terreno-Limites-Caminho
» Retirar Limites Do HINGE JOINT
» Erro em script que determina limites para camera
» Preciso de um script para controlar camera em primeira pessoa com limites
» Matrix-Terreno-Limites-Caminho
» Retirar Limites Do HINGE JOINT
» Erro em script que determina limites para camera
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos