Como lançar um objeto para um local via touch?
2 participantes
Página 1 de 1
Como lançar um objeto para um local via touch?
Estou trabalhando em um jogo para android , e tenho um personagem , ele possui uma habilidade em que você clica na tela e ele lança um objeto para onde você clicou , logo após se esse objeto bater em algo o personagem é impussionado para este objeto.
É quase como uma teia do Homem-Aranha (para facilitar o entendimento kk).
Queria saber como faço para ele lançar o objeto para onde o player clicar na tela.
Ex : Eu tenho uma parede , e quando eu clico nela , o objeto é arremessado para onde eu cliquei.
Para fazer o personagem ir para o objeto posso deixar para depois , agora este de lançar o objeto não sei como fazer.
É quase como uma teia do Homem-Aranha (para facilitar o entendimento kk).
Queria saber como faço para ele lançar o objeto para onde o player clicar na tela.
Ex : Eu tenho uma parede , e quando eu clico nela , o objeto é arremessado para onde eu cliquei.
Para fazer o personagem ir para o objeto posso deixar para depois , agora este de lançar o objeto não sei como fazer.
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Para lançar, use o AddForce junto com o Rigibody:
https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
Para pegar a posição que você tocou:
https://answers.unity.com/questions/550250/touch-screen-pos-to-world-pos.html
https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
Para pegar a posição que você tocou:
https://answers.unity.com/questions/550250/touch-screen-pos-to-world-pos.html
- Código:
void Update ()
{
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
// create ray from the camera and passing through the touch position:
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
// create a logical plane at this object's position
// and perpendicular to world Y:
Plane plane = new Plane(Vector3.up, transform.position);
float distance = 0; // this will return the distance from the camera
if (plane.Raycast(ray, out distance)){ // if plane hit...
Vector3 pos = ray.GetPoint(distance); // get the point
// pos has the position in the plane you've touched
}
}
}
Re: Como lançar um objeto para um local via touch?
Não entendi como faz para obter a posição que cliquei.
Coloquei o script mas nada aconteceu , achei que ele iria criar uma variavel transform e por a posição dentro mas nada aconteceu.
Vou explicar direito :
Quando eu clico em um lugar quero que o objeto vá para este lugar.
Acredito que se eu tivesse a posição que cliquei já seria o sulficiente, porque ai usaria um LookAt e moveria meu objeto para la.
Coloquei o script mas nada aconteceu , achei que ele iria criar uma variavel transform e por a posição dentro mas nada aconteceu.
Vou explicar direito :
Quando eu clico em um lugar quero que o objeto vá para este lugar.
Acredito que se eu tivesse a posição que cliquei já seria o sulficiente, porque ai usaria um LookAt e moveria meu objeto para la.
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Está tudo pronto , quando eu aperto L , ele lança o objeto , e se encostar em algo o personagem é arremessado para lá.
Só falta agr implementar esse sistema de touch , para em vez de eu apertar L para lançar eu clique no ponto que quero que o objeto vá.
Alguma ideia?
Só falta agr implementar esse sistema de touch , para em vez de eu apertar L para lançar eu clique no ponto que quero que o objeto vá.
Alguma ideia?
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
A posição é pega na variável "pos" onde está:
- Código:
Vector3 pos = ray.GetPoint(distance);
Re: Como lançar um objeto para um local via touch?
Mas eu criei uma váriavel publica para receber esse pos , e quando eu clico na tela todos os eixos continuam com 0
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Ah , outra coisa também , não tem como fazer um raycast ir sempre para a frente do objeto?
Porque eu coloco o Raycast para a frente (Physics.Raycast (transform.position , -Vector3.right,hit , 1))(frente do meu objeto).
E funciona normalmente , mas se eu rotaciono o objeto o raycast não sai mais da frente e sim de outros angulos.
O objeto que é lançado deve parar de andar se colidir com algo.
Para fazer isso fiz ele lançar o raycast e se ele detectar o objeto para.
Para corrigir esse erro , tive que lançar 4 raycasts ,1 para cada lado do objeto ,mas desta forma se ele passa ao lado de um objeto , ele também para e era para ele parar somente se colidisse com algo na frente dele.
Tentei usar a função OnCollisionEnter , mas não funcionou.
Mesmo que eu ponhasse boxCollider ,rigidbody , também não adiantou, nem por tag foi.
Talvez porque o objeto estava se movendo muito rapido.
Mas voltando ao assunto , não tem como lançar um Raycast sempre para a frente do objeto independente de sua rotação?
Obs : Ainda preciso saber como faz para saber onde o player clicou na tela kk
Porque eu coloco o Raycast para a frente (Physics.Raycast (transform.position , -Vector3.right,hit , 1))(frente do meu objeto).
E funciona normalmente , mas se eu rotaciono o objeto o raycast não sai mais da frente e sim de outros angulos.
O objeto que é lançado deve parar de andar se colidir com algo.
Para fazer isso fiz ele lançar o raycast e se ele detectar o objeto para.
Para corrigir esse erro , tive que lançar 4 raycasts ,1 para cada lado do objeto ,mas desta forma se ele passa ao lado de um objeto , ele também para e era para ele parar somente se colidisse com algo na frente dele.
Tentei usar a função OnCollisionEnter , mas não funcionou.
Mesmo que eu ponhasse boxCollider ,rigidbody , também não adiantou, nem por tag foi.
Talvez porque o objeto estava se movendo muito rapido.
Mas voltando ao assunto , não tem como lançar um Raycast sempre para a frente do objeto independente de sua rotação?
Obs : Ainda preciso saber como faz para saber onde o player clicou na tela kk
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Puts, duro que estou sem sdk e modulo android, não consigo testar o touchInput aqui dai... Faça um debug no raycast e veja se está sendo chamado corretamente no plane...
Em questão do eixo da frente do personagem, seu erro é estar passando o eixo global direito, no raycast, ou seja, ele sempre vai ser jogado para o lado direito globalmente(já que o eixo global não é rotacionado. Para isso use o transform.forward, que é o eixo azul(frente) do objeto de acordo com sua rotação....
Em questão do eixo da frente do personagem, seu erro é estar passando o eixo global direito, no raycast, ou seja, ele sempre vai ser jogado para o lado direito globalmente(já que o eixo global não é rotacionado. Para isso use o transform.forward, que é o eixo azul(frente) do objeto de acordo com sua rotação....
- Código:
Physics.Raycast (transform.position, transform.forward, out hit, Mathf.Infinty);
Re: Como lançar um objeto para um local via touch?
Não sei muito sobre isso de debug , geralmente quando quero ver o raio eu uso DrawCast ou algo assim , agr para ver o do código eu não sei como faz.
Também eu olhei o código e não consegui entender nada , não sei onde vai o script não oque esta acontecendo.
Vi que quando toca ele cria um plano , mas pra que um plano ?
Tirei a semana para fazer perguntas aqui ;-; kkk
Também eu olhei o código e não consegui entender nada , não sei onde vai o script não oque esta acontecendo.
Vi que quando toca ele cria um plano , mas pra que um plano ?
Tirei a semana para fazer perguntas aqui ;-; kkk
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Nenhuma ideia de como realizar isto?
(De maneira resumida eu tenho um objeto e quero que quando eu clicar na tela este objeto vá para a posição que ele clicou).
Atualmente o código esta quase pronto , o objeto vai para o lugar e se achar um colisor o personagem é lançado para lá.
Só que o objeto esta linkado ao personagem e quando eu aperto a tecla "l" , o objeto é lançado.
Só queria que ao invés de eu apertar a tecla "l" eu clicasse na tela e o objeto fosse para esta posição.
Ou se eu clicasse na tela e obtvesse esta posição no mundo 3d.
(De maneira resumida eu tenho um objeto e quero que quando eu clicar na tela este objeto vá para a posição que ele clicou).
Atualmente o código esta quase pronto , o objeto vai para o lugar e se achar um colisor o personagem é lançado para lá.
Só que o objeto esta linkado ao personagem e quando eu aperto a tecla "l" , o objeto é lançado.
Só queria que ao invés de eu apertar a tecla "l" eu clicasse na tela e o objeto fosse para esta posição.
Ou se eu clicasse na tela e obtvesse esta posição no mundo 3d.
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
A, desculpe não ter respondido... O Debug que eu estava dizendo, é a classe Debug, onde existe o método Log, coloque no método e veja se está sendo atualizado o valor pos printando no console, caso não printe é porque o raycast não está acontecendo... E como eu disse, não consigo debugar aqui pois não desenvolvo mais para android e estou sem sdk e api, exemplo:
- Código:
Vector3 pos = ray.GetPoint(distance);
Debug.Log(string.Format("I am touching on position {0} from world", pos));
Re: Como lançar um objeto para um local via touch?
Isso funciona com o toque do mouse?Pelo menos para testar, Ou tenque compilar para o android?
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
A intenção é que funcione no editor, o debug funciona no editor, a não ser que ative o development build e faça o Debug.LogAssertion(), que esse além do console do editor ele printa no console da build, quando compilado(não sei se esse build também funciona da mesma maneira no android).
Re: Como lançar um objeto para um local via touch?
Touch count não está funcionando no editor , e o Debug.Log também nem da as caras.
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Tentei procurar sobre touch Count e GetTouch na unity mas n achei nada lá no site deles.Só alguns scripts mas nada detalhado
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Pelo pouco que vi, esse método funciona apenas no android... Você conseguirá também para standalone, mas só quando criar o build, ou seja, o único método para debug pelo que vejo, seria via Unity Remote, que seria testar o build no seu aparelho linkado ao unity ou apenas dando build, infelizmente... Mas creio que o mais fácil seria que quando estivesse no editor você usaria funções standalone(mouse, botões) e via unity symbols, definir os parâmetros diferentes para outra plataforma(no caso android) quando for compilar!
https://docs.unity3d.com/560/Documentation/Manual/UnityRemote5.html
https://docs.unity3d.com/560/Documentation/Manual/UnityRemote5.html
Re: Como lançar um objeto para um local via touch?
Mas mesmo assim , só para testar troquei o input.GetTouch por GetKeyDown para poder ver se estava funcionando e não estava.
Na parte de criar o raio pela camera
Ele diz o seguinte : Index out of bounds .
Na parte de criar o raio pela camera
- Código:
Ray ray = camera.ScreenPointToRay(Input.GetTouch(0).position);
Ele diz o seguinte : Index out of bounds .
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
O problema, é que você está pegando o GetTouch com o index 0, que é inexistente, por não funcionar no editor, lembra, a lista sempre é nula, por isso deu o erro... Para isso tu teria que usar o Input.mousePosition para pegar a posição do mouse!
Re: Como lançar um objeto para um local via touch?
Hmmm, agora obtive algum resultado kkk .
Bom , já é tarde , vou fazer mais alguns testes e depois converto os button's para touch's .
Acredito que dara certo , mais tarde volto para mostrar resultados.
Obrigado!
Bom , já é tarde , vou fazer mais alguns testes e depois converto os button's para touch's .
Acredito que dara certo , mais tarde volto para mostrar resultados.
Obrigado!
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Ok , o script parece funcionar corretamente agora.
Mas ele não está pegando a posição em y.
A posição em Y é sempre a do objeto em que ele está "alocado".
Desta forma se eu clico para ele ir um pouco mais alto , ele não vai, ele vai sim na direção que eu cliquei só que na mesma posição y dele.
Ex : Se o meu personagem está com o y de 3 , e eu clico para ir para um lugar mais alto ou mais baixo que ele , por exemplo y de 7.
Ele vai para esto local só que mais para baixo , (y = 3).
E agora?
Mas ele não está pegando a posição em y.
A posição em Y é sempre a do objeto em que ele está "alocado".
Desta forma se eu clico para ele ir um pouco mais alto , ele não vai, ele vai sim na direção que eu cliquei só que na mesma posição y dele.
Ex : Se o meu personagem está com o y de 3 , e eu clico para ir para um lugar mais alto ou mais baixo que ele , por exemplo y de 7.
Ele vai para esto local só que mais para baixo , (y = 3).
E agora?
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Deixa quieto , achei um jeito de fazer isso.
Aqui esta o código final para a obter a posição do clique na tela no mundo 3d :
Valeu recagonlei!
Aqui esta o código final para a obter a posição do clique na tela no mundo 3d :
- Código:
using UnityEngine;
using System.Collections;
public class PoderLennC : MonoBehaviour {
public Camera camera;
public Ray ray;
public GameObject Alvo;
public RaycastHit hitInfo;
public Vector3 PosicaoDoClick;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0)){
ray = camera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast( ray, out hitInfo ))
{
PosicaoDoClick = hitInfo.point;
}
}
Alvo.transform.position = PosicaoDoClick;
}
}
Valeu recagonlei!
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
A posição do click fica armazenada na variável hitInfo.point ,no caso acima criei um GameObject para armazenar este valor.
Assim é só eu fazer meu objeto seguir este alvo .
Assim é só eu fazer meu objeto seguir este alvo .
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Como lançar um objeto para um local via touch?
Parabéns velho, fico feliz por ter conseguido por conta!
Tópicos semelhantes
» como fazer um objeto 2d ir até um determinado local e dps voltar
» 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 faço para mudar a posição de um objeto para perto de outro.
» 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 faço para mudar a posição de um objeto para perto de outro.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos