[RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
Tipo, eu gostaria se colocar uma bool verdadeira quando o jogador, ou seja a câmera estivesse olhando para o objeto (ou renderizando ele na câmera).
o que eu tentei:
tentei usando colisores, porem não deu certo já que colisores com is trigger passam das paredes, e se o objeto estiver atraz de uma parede ele estará como se estivesse sendo visto.
também tentei utilizando raycasts, checando um raio entre a câmera e o determinado objeto, porem o raycast só pega um pedacinho de 1 pixel, sendo que eu queria checar uma área maior, e com um uso excessivo dele pode causar lag, estou tentando achar outra opção.
outra coisa, se for possível checar somente o colisor do objeto seria ainda melhor... porem mesh também serve.
isto é basicamente um oclusion culling, porem ao invés de sumir ele ativaria uma bool, ou uma void no script do objeto.
qualquer ideia de como fazer isso ajudaria muito, nem sei por onde começar.
o que eu tentei:
tentei usando colisores, porem não deu certo já que colisores com is trigger passam das paredes, e se o objeto estiver atraz de uma parede ele estará como se estivesse sendo visto.
também tentei utilizando raycasts, checando um raio entre a câmera e o determinado objeto, porem o raycast só pega um pedacinho de 1 pixel, sendo que eu queria checar uma área maior, e com um uso excessivo dele pode causar lag, estou tentando achar outra opção.
outra coisa, se for possível checar somente o colisor do objeto seria ainda melhor... porem mesh também serve.
isto é basicamente um oclusion culling, porem ao invés de sumir ele ativaria uma bool, ou uma void no script do objeto.
qualquer ideia de como fazer isso ajudaria muito, nem sei por onde começar.
Re: [RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
Tente utilizar as voids OnBecameVisible e OnBecameInvisible no objeto.
Mas tenha cuidado... A câmera do editor também é considerada como câmera, então use o 'MaximizeOnPlay' para testar os comandos que você criar.
Mas tenha cuidado... A câmera do editor também é considerada como câmera, então use o 'MaximizeOnPlay' para testar os comandos que você criar.
Re: [RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
funciona, porem com um pequeno problema, ele não detecta quando para de ver.tipo ele detecta so quando sai do campo de visão, porem se um outro objeto ficar entre a minha visão e com este script ele ainda continua true.
http://prntscr.com/n5wlgg
nesta imagem o objeto com scritp esta atraz de uma parede, porem ainda acha que esta sendo visível, mesmo na câmera em tela cheia não detecta quando um objeto se sobrepõe a ele.
teria uma forma de resolver?
- Código:
public class Visible : MonoBehaviour {
public bool Visivel;
private void OnBecameVisible()
{
Visivel = true;
}
private void OnBecameInvisible()
{
Visivel = false;
}
}
http://prntscr.com/n5wlgg
nesta imagem o objeto com scritp esta atraz de uma parede, porem ainda acha que esta sendo visível, mesmo na câmera em tela cheia não detecta quando um objeto se sobrepõe a ele.
teria uma forma de resolver?
Re: [RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
Talvez o comando isVisible do renderer sirva:
https://docs.unity3d.com/ScriptReference/Renderer-isVisible.html
https://docs.unity3d.com/ScriptReference/Renderer-isVisible.html
Re: [RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
Pelo jeito, ele so diz que não esta invisível quando sai a área onde a câmera pode visualizar, talvez para funcionar melhor eu deva colocar oclusion culling, algo assim, já que ele some com os objetos que estão atrás de paredes, ai este script funcione, vou tentar fazer isso dps e digo se funcionou.
porem esse outro código ai também n deu certo, fico na mesma do onbecamevisible.
porem esse outro código ai também n deu certo, fico na mesma do onbecamevisible.
Re: [RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
luiz12345 escreveu:Pelo jeito, ele so diz que não esta invisível quando sai a área onde a câmera pode visualizar, talvez para funcionar melhor eu deva colocar oclusion culling, algo assim, já que ele some com os objetos que estão atrás de paredes, ai este script funcione, vou tentar fazer isso dps e digo se funcionou.
porem esse outro código ai também n deu certo, fico na mesma do onbecamevisible.
Joga este código no objeto... deve funcionar
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Codigo : MonoBehaviour {
public bool visivel;
Renderer rend;
void Start(){
rend = GetComponent<Renderer> ();
}
void Update(){
Vector3 direction = Camera.main.transform.position - transform.position;
direction.Normalize();
if (!Physics.Raycast (transform.position, direction, 1000) && rend.isVisible) {
visivel = true;
}
else {
visivel = false;
}
}
}
Re: [RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
Funcionando perfeitamente. porem tive que adaptar um pouquinho...MarcosSchultz escreveu:luiz12345 escreveu:Pelo jeito, ele so diz que não esta invisível quando sai a área onde a câmera pode visualizar, talvez para funcionar melhor eu deva colocar oclusion culling, algo assim, já que ele some com os objetos que estão atrás de paredes, ai este script funcione, vou tentar fazer isso dps e digo se funcionou.
porem esse outro código ai também n deu certo, fico na mesma do onbecamevisible.
Joga este código no objeto... deve funcionar
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Codigo : MonoBehaviour {
public bool visivel;
Renderer rend;
void Start(){
rend = GetComponent<Renderer> ();
}
void Update(){
Vector3 direction = Camera.main.transform.position - transform.position;
direction.Normalize();
if (!Physics.Raycast (transform.position, direction, 1000) && rend.isVisible) {
visivel = true;
}
else {
visivel = false;
}
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Visible : MonoBehaviour
{
public bool visivel;
public LayerMask Mask;
Renderer rend;
void Start()
{
rend = GetComponent<Renderer>();
}
void Update()[size=13][/size]
{[size=13][/size]
Vector3 direction = Camera.main.transform.position - transform.position;[size=13][/size]
direction.Normalize();
RaycastHit Hit = new RaycastHit();
if (Physics.Raycast(transform.position, direction, out Hit, 1000, Mask, QueryTriggerInteraction.Collide) && rend.isVisible)
{
Debug.DrawLine(transform.position, Hit.point);
if (Hit.transform.gameObject.tag == "Player")
{
visivel = true;
}
else
{
visivel = false;
}
}
else
{
visivel = false;
}
}[size=13][/size]
}
Agorá o código está funcionando perfeitamente. obg pela a ajuda de todos :D
Re: [RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
Opa, eae men...
Tu podes deixar teu código um pouco menor:
Flw, tenha uma boa tarde :D
Tu podes deixar teu código um pouco menor:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Visible : MonoBehaviour {
public LayerMask Mask;
Renderer rend { get { return GetComponent<Renderer>(); } set { rend = value; } }
void Update()
{
//Aqui você vê se ele tá vendo ou não..
Debug.Log(visibleOrNot());
}
public bool visibleOrNot(){
RaycastHit Hit = new RaycastHit();
if (Physics.Raycast(transform.position, (Camera.main.transform.position - transform.position).normalized, out Hit, 1000, Mask, QueryTriggerInteraction.Collide) && rend.isVisible)
if (Hit.transform.gameObject.tag == "Player")
return true;
return false;
}
}
Flw, tenha uma boa tarde :D
NKKF- ProgramadorMaster
- PONTOS : 4753
REPUTAÇÃO : 574
Idade : 19
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Como verificar qual objeto de uma array está mais perto.
» Como saber se um objeto UI (Do Canvas) está em cima de outro?
» [RESOLVIDO] Como saber se um Transform está se movendo?
» [RESOLVIDO] Como saber se um objeto existe ou não na cena
» [RESOLVIDO] Visual Studio - Como saber onde um método está sendo usado
» Como saber se um objeto UI (Do Canvas) está em cima de outro?
» [RESOLVIDO] Como saber se um Transform está se movendo?
» [RESOLVIDO] Como saber se um objeto existe ou não na cena
» [RESOLVIDO] Visual Studio - Como saber onde um método está sendo usado
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos