Utilizar movimento de plataforma na UI
2 participantes
Página 1 de 1
Utilizar movimento de plataforma na UI
Prezados,
Eu consigo implementar o movimento de uma plataforma na Scene, entretanto, eu queria era fazer o movimento da plataforma diretamente na UI dentro do canvas. É possível, alguém indica o caminho? Já tentei de várias formas para implementar na UI, como por exemplo: quando uso gameObject ele não é mostrado na UI, tentei o UI Image, mas, ela não segue o caminho previsto. Outrossim, quando insere a imagem dentre de um Objeto Vazio na UI ele some. Tentei outras formas mas não deu certo. Tive esse problema com o Particle System na UI, mas, tem script que facilita isso... no entanto, para movimento de plataforma diretamente na UI dentro do canvas, não obtive êxito. Alguém pode me dar uma luz?
Imagem da plataforma em movimento na Scene https://drive.google.com/file/d/13BkomtGw7QBg15akr1ONfQXfxFpc9wwQ/view?usp=sharing
Códigos usados na plataforma na Scene, encontrado no tutorial <https://youtu.be/BMUpiUiVLJ0>
Att
Eu consigo implementar o movimento de uma plataforma na Scene, entretanto, eu queria era fazer o movimento da plataforma diretamente na UI dentro do canvas. É possível, alguém indica o caminho? Já tentei de várias formas para implementar na UI, como por exemplo: quando uso gameObject ele não é mostrado na UI, tentei o UI Image, mas, ela não segue o caminho previsto. Outrossim, quando insere a imagem dentre de um Objeto Vazio na UI ele some. Tentei outras formas mas não deu certo. Tive esse problema com o Particle System na UI, mas, tem script que facilita isso... no entanto, para movimento de plataforma diretamente na UI dentro do canvas, não obtive êxito. Alguém pode me dar uma luz?
Imagem da plataforma em movimento na Scene https://drive.google.com/file/d/13BkomtGw7QBg15akr1ONfQXfxFpc9wwQ/view?usp=sharing
Códigos usados na plataforma na Scene, encontrado no tutorial <https://youtu.be/BMUpiUiVLJ0>
- Código:
using System;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PathDefinition : MonoBehaviour {
//Declara vetor onde serao atribuídos os pontos pelos quais a plataforma irá passar
//Um ponto é um objeto vazio posicionado no mundo e atribuído ao vetor Points
public Transform[] points;
public IEnumerator<Transform> GetPathEnumerator(){
//Verifica se há ao menos 1 ponto definido (1 posição no vetor Points)
//Caso não haja, a plataforma não se move
if(points == null || points.Length < 1)
yield break;
//Direção de movimento. Se 1, vai percorrer o vetor points em direção ao final. Quando invertido para -1, volta pro início.
var direction = 1;
var index = 0; //Valor que será retornado como índice do vetor Points
while (true){
//retorna o índice do vetor Points
yield return points[index];
if(points.Length == 1)
continue;
//Quando index é Zero, significa que a plataforma está no primeiro ponto do vetor Points,
//então muda direção para 1 e assim permanece até chegar no fim do vetor
if(index <= 0)
direction = 1;
//Ao chegar no fim do vetor Points, a direção é invertida recebendo -1 e fazendo com que plataforma
//se mova para os pontos anteriores (voltando nos índices do vetor Points).
else if (index >= points.Length - 1)
direction = -1;
//Atualiza o índice que será retornado para o script de movimento
index = index + direction;
}
}
//Função utilizada para Debug. Gera a linha que interliga os pontos para facilitar a disposição
//deles pelo mundo e a fácil visualização do trajeto que a plataforma irá percorrer
public void OnDrawGizmos(){
if(points == null || points.Length < 2)
return;
for (var i = 1; i < points.Length; i++){
Gizmos.DrawLine(points[i - 1].position, points[i].position);
}
}
}
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class FollowPath : MonoBehaviour {
public PathDefinition path; //GameObject com o script PathDefinition
public float speed = 1; //Velocidade de movimentaçao da plataforma
public float maxDistanceToGoal = .1f; //Distância que a plataforma chegará dos pontos
private IEnumerator<Transform> _currentPoint; //Ponto atual para o qual a plataforma irá se deslocar
public void Start (){
//Verifica se a variável path está preenchida com o componente PathDefinition
if(path == null){
Debug.LogError("Path cannot be null", gameObject);
return;
}
//Chama a função que retorna o índice do vetor Points (ou seja, o ponto alvo da plataforma.
_currentPoint = path.GetPathEnumerator ();
//Avança o enumerador para o próximo elemento da coleção.
//Retorna true se o enumerador tiver avançado com êxito para o próximo elemento
//Retonra false se o enumerador tiver passado o final da coleção.
_currentPoint.MoveNext ();
//Se após o MoveNext, o elemento atual não existir (for nulo), termina a execução do método
if (_currentPoint.Current == null)
return;
//Altera a posição do gameObject onde esse script está anexado (no caso a plataforma que irá se mover),
//para a posição do elemento atual da coleção de pontos.
//Isso ocorre no médoto Start e faz com que ao iniciar o game, a plataforma se posicione em cima do primeiro ponto da rota que irá seguir.
//Não importa onde a plataforma esteja posicionada no mundo, ao iniciar, ela será posicionada no primeiro _currentPoint.
transform.position = _currentPoint.Current.position;
}
public void Update (){
if (_currentPoint == null || _currentPoint.Current == null) //Verifica que exista ao menos 1 ponto definido
return;
//Usa o MoveTowards para fazer o deslocamento do objeto entre a posição atual dele e a posição do atual elemento da coleção.
transform.position = Vector3.MoveTowards(transform.position, _currentPoint.Current.position, Time.deltaTime * speed);
//Verifica a distância entre a posição atual da plataforma e a posição do ponto atual
var distance = Vector3.Distance (transform.position, _currentPoint.Current.position);
//Quando chegamos no ponto atual, este muda para o próximo ponto da rota
if (distance < maxDistanceToGoal)
_currentPoint.MoveNext ();
}
}
Att
joffersoju- Avançado
- PONTOS : 2506
REPUTAÇÃO : 4
Respeito as regras :
Re: Utilizar movimento de plataforma na UI
Somente para dizer que funcionou... eu tive que reorganizar alguns detalhes... mas, está tudo certo...
joffersoju- Avançado
- PONTOS : 2506
REPUTAÇÃO : 4
Respeito as regras :
Re: Utilizar movimento de plataforma na UI
Bom, não sei o que está tentando fazer, nem por que quer mover algo na UI, mas eu desaconselho bastante...
A UI é suscetível a várias coisas que alteram tanto o tamanho da imagem quanto as suas propriedades de deslocamento, inclusive, limitando os locais que a imagem pode ir. Se algo deve ser movimentado na UI, faça só se necessário, pois tem uns 5 parâmetros que devem ser observados a se fazer isso.
A UI é suscetível a várias coisas que alteram tanto o tamanho da imagem quanto as suas propriedades de deslocamento, inclusive, limitando os locais que a imagem pode ir. Se algo deve ser movimentado na UI, faça só se necessário, pois tem uns 5 parâmetros que devem ser observados a se fazer isso.
Tópicos semelhantes
» qual melhor para utilizar em movimento de personagem 3d em mmorpg
» Unity 2d - AJUDA PERSONAGEM N FICA NA PLATAFORMA EM MOVIMENTO
» Como fazer o FPScontroler ficar parado em uma plataforma em movimento?
» [RESOLVIDO] Utilizar o Range
» É possível utilizar o bluetooth no unity 5 ?
» Unity 2d - AJUDA PERSONAGEM N FICA NA PLATAFORMA EM MOVIMENTO
» Como fazer o FPScontroler ficar parado em uma plataforma em movimento?
» [RESOLVIDO] Utilizar o Range
» É possível utilizar o bluetooth no unity 5 ?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos