(Dúvida) Objeto receber posição do Raycast.
+2
Manawydan
rafaelllsd
6 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
(Dúvida) Objeto receber posição do Raycast.
Olá pessoal, estou tentando fazer um sistema para quando Raio colidir com um Objeto o objeto recebe a a posição do Raycast no lugar que colidiu, ou seja, na ponta do Raycast. Não consegui achar um jeito de fazer isso.
Última edição por rafaelllsd em Ter Jan 24, 2017 4:26 am, editado 1 vez(es)
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
Quando voce faz um Raycast e passa o RaycastHit o RaycastHit tem a propriedade point que seria um vetor3 indicando a posicao de impacto, ja tentou utiliza-o?
https://docs.unity3d.com/ScriptReference/RaycastHit-point.html
https://docs.unity3d.com/ScriptReference/RaycastHit-point.html
Re: (Dúvida) Objeto receber posição do Raycast.
Sim, não sei se to fazendo errado, mais eu coloquei para quando o raio atingir o objeto ele recebe Raio.point, mais ele sempre vai na posição onde o raio começa ou seja a no personagem.
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
Voce ta fazendo o Raycast do personagem ate um certo objeto ou do objeto ate o personagem? qualquer coisa tente mudar o começo e o final do Raycast e se possivel poste seu script aki.
Re: (Dúvida) Objeto receber posição do Raycast.
Na verdade o raycast é lançado quando aperta o botão do Mouse, então ele sai do personagem até uma distancia X setada por uma variavel:
- Código:
public float DistanciaPegarObjeto;
public float DistanciaMaxObjeto;
public float DistanciaMinObjeto;
public Vector3 PosObjeto;
void Start () {
DistanciaPegarObjeto = DistanciaMaxObjeto;
}
void Update () {
if (Input.GetMouseButton (0)) {
PegarObjeto ();
}
if (Input.GetAxis ("Mouse ScrollWheel") > 0 && DistanciaPegarObjeto < DistanciaMaxObjeto) {
DistanciaPegarObjeto += 0.5f;
}
if (Input.GetAxis ("Mouse ScrollWheel") < 0 && DistanciaPegarObjeto > DistanciaMinObjeto) {
DistanciaPegarObjeto -= 0.5f;
}
}
void PegarObjeto () {
RaycastHit Raio;
Debug.DrawRay (transform.position, transform.forward * DistanciaPegarObjeto, Color.green);
if (Physics.Raycast (transform.position, transform.forward, out Raio, DistanciaPegarObjeto)) {
if (Raio.collider.gameObject.tag == "Objeto") {
PosObjeto = Raio.point;
Raio.collider.transform.position = Raio.transform.position;
Raio.transform.gameObject.GetComponent<Rigidbody> ().isKinematic = true;
}
}
}
}
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
Oque Aconteceu Comigo uma Vez é que o Raio quando Saia Pegava no meu Próprio Personagem, então eu Coloquei um "StartRayPoint" pro Raio, pra ele Sair daquele Ponto,pq ele tava Colidindo no Corpo do Player! aqui Funcionou!
Re: (Dúvida) Objeto receber posição do Raycast.
Complementando o que o @AndyShow falou voce pode tambem tenta colocar todos os objetos interagiveis em uma certa Layer, e entao fazer o seu raycast apenas dentro da layer definida...
Re: (Dúvida) Objeto receber posição do Raycast.
Eu tentei usar o LayerMask, e usar o StartRayPoint, mais ambos não funcionaram, os objetos sempre vem para o ponto de onde o Raycast esta saindo, e não onde ele está colidindo.
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
Cara eu ja fiz o que eu e você estavamos tentando fazer que nem nesse vídeo,o problema é que tipo a esfera so vai pro ponto do raycast wuando eu clico com o mouse 1 no meu script,ela nao fica sempre na posição queria saber como eu faço isso e pra ela receber a posição do raycast eu so fiz isso:rafaelllsd escreveu:Na verdade o raycast é lançado quando aperta o botão do Mouse, então ele sai do personagem até uma distancia X setada por uma variavel:Criaram outro tópico com a mesma coisa que eu estou tentando fazer, tipo nesse video que colocaram no outro tópico:
- Código:
public float DistanciaPegarObjeto;
public float DistanciaMaxObjeto;
public float DistanciaMinObjeto;
public Vector3 PosObjeto;
void Start () {
DistanciaPegarObjeto = DistanciaMaxObjeto;
}
void Update () {
if (Input.GetMouseButton (0)) {
PegarObjeto ();
}
if (Input.GetAxis ("Mouse ScrollWheel") > 0 && DistanciaPegarObjeto < DistanciaMaxObjeto) {
DistanciaPegarObjeto += 0.5f;
}
if (Input.GetAxis ("Mouse ScrollWheel") < 0 && DistanciaPegarObjeto > DistanciaMinObjeto) {
DistanciaPegarObjeto -= 0.5f;
}
}
void PegarObjeto () {
RaycastHit Raio;
Debug.DrawRay (transform.position, transform.forward * DistanciaPegarObjeto, Color.green);
if (Physics.Raycast (transform.position, transform.forward, out Raio, DistanciaPegarObjeto)) {
if (Raio.collider.gameObject.tag == "Objeto") {
PosObjeto = Raio.point;
Raio.collider.transform.position = Raio.transform.position;
Raio.transform.gameObject.GetComponent<Rigidbody> ().isKinematic = true;
}
}
}
}
(seuobjeto).transform.position = hit.point;
Re: (Dúvida) Objeto receber posição do Raycast.
lucasfera15 escreveu:Cara eu já fiz o que eu e você estavamos tentando fazer que nem nesse vídeo,o problema é que tipo a esfera só vai pro ponto do raycast quando eu clico com o mouse 1 no meu script,ela não fica sempre na posição queria saber como eu faço isso e pra ela receber a posição do raycast eu só fiz isso:rafaelllsd escreveu:Na verdade o raycast é lançado quando aperta o botão do Mouse, então ele sai do personagem até uma distancia X setada por uma variavel:Criaram outro tópico com a mesma coisa que eu estou tentando fazer, tipo nesse video que colocaram no outro tópico:
- Código:
public float DistanciaPegarObjeto;
public float DistanciaMaxObjeto;
public float DistanciaMinObjeto;
public Vector3 PosObjeto;
void Start () {
DistanciaPegarObjeto = DistanciaMaxObjeto;
}
void Update () {
if (Input.GetMouseButton (0)) {
PegarObjeto ();
}
if (Input.GetAxis ("Mouse ScrollWheel") > 0 && DistanciaPegarObjeto < DistanciaMaxObjeto) {
DistanciaPegarObjeto += 0.5f;
}
if (Input.GetAxis ("Mouse ScrollWheel") < 0 && DistanciaPegarObjeto > DistanciaMinObjeto) {
DistanciaPegarObjeto -= 0.5f;
}
}
void PegarObjeto () {
RaycastHit Raio;
Debug.DrawRay (transform.position, transform.forward * DistanciaPegarObjeto, Color.green);
if (Physics.Raycast (transform.position, transform.forward, out Raio, DistanciaPegarObjeto)) {
if (Raio.collider.gameObject.tag == "Objeto") {
PosObjeto = Raio.point;
Raio.collider.transform.position = Raio.transform.position;
Raio.transform.gameObject.GetComponent<Rigidbody> ().isKinematic = true;
}
}
}
}
(seuobjeto).transform.position = hit.point;
Re: (Dúvida) Objeto receber posição do Raycast.
Bem acabei de resolver o problema,agora o objeto vai sempre pro ponto do raycast,mas tem outro problema,a função fica no void update ou seja,ele sempre vai ter 1 frame de atraso para ir para o raycast,mas no vídeo ele não tem esse delay,como resolver isso?
Re: (Dúvida) Objeto receber posição do Raycast.
Tome cuidado cara aqui no fórum temos regras:
3- Não é permitido postar novamente em um tópico mais de duas vezes seguidas. Caso queira adicionar algo, edite o último post ou aguarde 24h.
3- Não é permitido postar novamente em um tópico mais de duas vezes seguidas. Caso queira adicionar algo, edite o último post ou aguarde 24h.
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
lucasfera15 escreveu:Bem acabei de resolver o problema,agora o objeto vai sempre pro ponto do raycast,mas tem outro problema,a função fica no void update ou seja,ele sempre vai ter 1 frame de atraso para ir para o raycast,mas no vídeo ele não tem esse delay,como resolver isso?
não entendi bem o q vc esta tentando fazer mas, o update n tem atraso ele e chamado em cada frame alem disso raycast e muito pesado pra usar em Update vc deve usar em FixedUpdate ou LateUpdate, eu sempre uso em LateUpdate.
mas posta o script pq se n fica dificil de te ajudar
rafaelllsd
ai esta o seu sitema! :D
ele explica isso ai q vc esta tentando fazer!
luKkaSs- MembroAvançado
- PONTOS : 3356
REPUTAÇÃO : 19
Idade : 28
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
Valeu pela dica, mais isso não é o que eu preciso necessariamente, eu só quero manter um bloco já criado no mundo fica na ponta do Raycast Caso eu segure o Botao do Mouse. Mais não sei oque to fazendo de errado o.O
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
rafaelllsd escreveu:Valeu pela dica, mais isso não é o que eu preciso necessariamente, eu só quero manter um bloco já criado no mundo fica na ponta do Raycast Caso eu segure o Botao do Mouse. Mais não sei oque to fazendo de errado o.O
- Código:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
public float DistanciaPegarObjeto;
public float DistanciaMaxObjeto=20;
public float DistanciaMinObjeto=5;
[SerializeField] Transform OBJ;
void Start () {
DistanciaPegarObjeto = DistanciaMaxObjeto;
}
void Update () {
if (Input.GetMouseButton(0))
{
PegarObjeto();
}
else if (OBJ)
{
OBJ.parent = null;
OBJ = null;
}
if (Input.GetAxis ("Mouse ScrollWheel") > 0 && DistanciaPegarObjeto < DistanciaMaxObjeto) {
DistanciaPegarObjeto += 0.5f;
}
if (Input.GetAxis ("Mouse ScrollWheel") < 0 && DistanciaPegarObjeto > DistanciaMinObjeto) {
DistanciaPegarObjeto -= 0.5f;
}
}
void PegarObjeto () {
RaycastHit Raio;
Debug.DrawRay (transform.position, transform.forward * DistanciaPegarObjeto, Color.green);
if (Physics.Raycast (transform.position, transform.forward, out Raio, DistanciaPegarObjeto))
{
if (Raio.collider.CompareTag("Objeto") && !OBJ)
{
OBJ = Raio.transform;
OBJ.parent = transform;
OBJ.GetComponent<Rigidbody> ().isKinematic = true;
}
}
}
}
bom era isso?
luKkaSs- MembroAvançado
- PONTOS : 3356
REPUTAÇÃO : 19
Idade : 28
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
É quase isto, o objeto tem que ficar na ponta do raycast para quando eu Rolar o Scroll Do Mouse ele ir e voltar na posicao do raycast.É tipo o script do Marcos do Amnesia só que com raycast. Porque se eu filiar o objeto no que tem o script ele não vai e volta com o Raycast.
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
rafaelllsd escreveu:É quase isto, o objeto tem que ficar na ponta do raycast para quando eu Rolar o Scroll Do Mouse ele ir e voltar na posicao do raycast.É tipo o script do Marcos do Amnesia só que com raycast. Porque se eu filiar o objeto no que tem o script ele não vai e volta com o Raycast.
Ué, e só calcular a distancia do obj.
olha ai como e fácil.
- Código:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript1 : MonoBehaviour
{
public float DistanciaPegarObjeto;
public float DistanciaMaxObjeto = 20;
public float DistanciaMinObjeto = 5;
[SerializeField] float Sensibilidade = 2; // velocidade pra mover o OBJ.
[SerializeField] Transform OBJ;
void Start()
{
DistanciaPegarObjeto = DistanciaMaxObjeto;
}
void FixedUpdate()
{
if (Input.GetMouseButton(0))
{
PegarObjeto();
}
else if (OBJ)
{
OBJ.GetComponent<Rigidbody>().isKinematic = false;
OBJ.parent = null;
OBJ = null;
}
// else // se quiser otimizar um pouco mais.
if (!OBJ)
{
DistanciaPegarObjeto += Input.GetAxis("Mouse ScrollWheel") * Sensibilidade;
DistanciaPegarObjeto = Mathf.Clamp(DistanciaPegarObjeto, DistanciaMinObjeto, DistanciaMaxObjeto);
}
// if (Input.GetAxis ("Mouse ScrollWheel") > 0 && DistanciaPegarObjeto < DistanciaMaxObjeto) {
// DistanciaPegarObjeto += 0.5f;
// }
// if (Input.GetAxis ("Mouse ScrollWheel") < 0 && DistanciaPegarObjeto > DistanciaMinObjeto) {
// DistanciaPegarObjeto -= 0.5f;
// }
}
void PegarObjeto()
{
if (OBJ)
{
MoverOBJ();
return;
}
RaycastHit Raio;
Debug.DrawRay(transform.position, transform.forward * DistanciaPegarObjeto, Color.green);
if (Physics.Raycast(transform.position, transform.forward, out Raio, DistanciaPegarObjeto))
{
if (Raio.collider.CompareTag("Objeto"))
{
OBJ = Raio.transform;
OBJ.parent = transform;
OBJ.GetComponent<Rigidbody>().isKinematic = true;
}
}
}
void MoverOBJ()
{
Vector3 pos = OBJ.localPosition;
float distanciaAtual = pos.z;
distanciaAtual += Input.GetAxis("Mouse ScrollWheel") * Sensibilidade;
pos.z = Mathf.Clamp(distanciaAtual, DistanciaMinObjeto, DistanciaMaxObjeto);
OBJ.localPosition = pos;
}
}
luKkaSs- MembroAvançado
- PONTOS : 3356
REPUTAÇÃO : 19
Idade : 28
Respeito as regras :
Re: (Dúvida) Objeto receber posição do Raycast.
Talvez isto ajude...
É a mesma lógica de manter a luz na ponta do raycast
É a mesma lógica de manter a luz na ponta do raycast
Re: (Dúvida) Objeto receber posição do Raycast.
Valeu marcos isso que eu precisava.
rafaelllsd- ProgramadorMaster
- PONTOS : 5245
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Tópicos semelhantes
» Objeto receber posição
» (Dúvida) Objeto receber a mesma cor no multiplayer
» [DÚVIDA]Receber e setar texto em um objeto
» DUVIDA-Informação sobre objeto com Raycast
» Duvida como instância um game objeto com Raycast
» (Dúvida) Objeto receber a mesma cor no multiplayer
» [DÚVIDA]Receber e setar texto em um objeto
» DUVIDA-Informação sobre objeto com Raycast
» Duvida como instância um game objeto com Raycast
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos