[TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
+3
hellkiller
Giliarde
ismarspn
7 participantes
Página 1 de 1
[TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
Peguei esse tutorial (de mais de 40 minutos) da internet e resolvi postar aqui pra facilitar a vida de quem precisar hehe... então vamos lá:
Primeiro crie um GameObject e coloque quantos GameObjects você preferir como filho, depois no GameObject pai você coloca o script "PointsToFollow", nesse script tem uma array, você adiciona o mesmo tanto de pontos que tem no objeto pai aí adicione os objetos filhos, igual na imagem:
Esses objetos filhos você coloca em lugares diferentes do mapa, o objeto que irá se mover vai seguir esses pontos, segue a imagem:
Depois no objeto que você quer que se mova, coloque o script "FollowPoints" e é só inserir o GameObject que tem o script "PointsToFollow", coloque a velocidade de sua preferência:
Scripts:
PointsToFollow
FollowToPoints
OBS: O objeto irá se mover indo e voltando pelos pontos infinitamente.
Aproveitem! :D
Primeiro crie um GameObject e coloque quantos GameObjects você preferir como filho, depois no GameObject pai você coloca o script "PointsToFollow", nesse script tem uma array, você adiciona o mesmo tanto de pontos que tem no objeto pai aí adicione os objetos filhos, igual na imagem:
Esses objetos filhos você coloca em lugares diferentes do mapa, o objeto que irá se mover vai seguir esses pontos, segue a imagem:
Depois no objeto que você quer que se mova, coloque o script "FollowPoints" e é só inserir o GameObject que tem o script "PointsToFollow", coloque a velocidade de sua preferência:
Scripts:
PointsToFollow
- Código:
using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
public class PointsToFollow : MonoBehaviour {
public Transform[] points;
public IEnumerator<Transform> GetPathEnumerator (){
if (points == null || points.Length < 1) {
yield break;
}
var direction = 1;
var index = 0;
while (true) {
yield return points [index];
if(points.Length == 1){
continue;
}
if (index <= 0) {
direction = 1;
} else if (index >= points.Length - 1) {
direction = -1;
}
index = index + direction;
}
}
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);
}
}
}
FollowToPoints
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class FollowPoints : MonoBehaviour {
public enum FollowType{
MoveToward,
Lerp
}
public FollowType type = FollowType.MoveToward;
public PointsToFollow path;
public float speed = 1;
public float maxDistanceToGoal = .1f;
private IEnumerator<Transform> _currentPoint;
public void Start(){
if (path == null) {
Debug.LogError ("Path is cannot be null", gameObject);
return;
}
_currentPoint = path.GetPathEnumerator ();
_currentPoint.MoveNext ();
if (_currentPoint.Current == null) {
return;
}
transform.position = _currentPoint.Current.position;
}
public void Update(){
if (_currentPoint == null || _currentPoint.Current == null) {
return;
}
if (type == FollowType.MoveToward) {
transform.position = Vector3.MoveTowards (transform.position, _currentPoint.Current.position, Time.deltaTime * speed);
} else if (type == FollowType.Lerp) {
transform.position = Vector3.Lerp (transform.position, _currentPoint.Current.position, Time.deltaTime * speed);
}
var distanceSquared = (transform.position - _currentPoint.Current.position).sqrMagnitude;
if (distanceSquared < maxDistanceToGoal * maxDistanceToGoal) {
_currentPoint.MoveNext ();
}
}
}
OBS: O objeto irá se mover indo e voltando pelos pontos infinitamente.
Aproveitem! :D
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
sensacional, parabéns!
Giliarde- Iniciante
- PONTOS : 3220
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
Parabéns cara, bem intuitivo!
hellkiller- Mestre
- PONTOS : 4053
REPUTAÇÃO : 170
Áreas de atuação : Programação em C#,
Modelagem,
GameArt.
Respeito as regras :
Re: [TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
Não funcionou.Deu varios erros.Me ajuda ?
erebrus- Iniciante
- PONTOS : 1561
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
Poste os erros para a gente possa te ajudarerebrus escreveu:Não funcionou.Deu varios erros.Me ajuda ?
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: [TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
e como eu poderia fazer que ele quando chegasse num ponto depois de alguns segundos ele se moveria novamenteismarspn escreveu:Peguei esse tutorial (de mais de 40 minutos) da internet e resolvi postar aqui pra facilitar a vida de quem precisar hehe... então vamos lá:
Primeiro crie um GameObject e coloque quantos GameObjects você preferir como filho, depois no GameObject pai você coloca o script "PointsToFollow", nesse script tem uma array, você adiciona o mesmo tanto de pontos que tem no objeto pai aí adicione os objetos filhos, igual na imagem:
Esses objetos filhos você coloca em lugares diferentes do mapa, o objeto que irá se mover vai seguir esses pontos, segue a imagem:
Depois no objeto que você quer que se mova, coloque o script "FollowPoints" e é só inserir o GameObject que tem o script "PointsToFollow", coloque a velocidade de sua preferência:
Scripts:
PointsToFollow
- Código:
using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
public class PointsToFollow : MonoBehaviour {
public Transform[] points;
public IEnumerator<Transform> GetPathEnumerator (){
if (points == null || points.Length < 1) {
yield break;
}
var direction = 1;
var index = 0;
while (true) {
yield return points [index];
if(points.Length == 1){
continue;
}
if (index <= 0) {
direction = 1;
} else if (index >= points.Length - 1) {
direction = -1;
}
index = index + direction;
}
}
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);
}
}
}
FollowToPoints
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class FollowPoints : MonoBehaviour {
public enum FollowType{
MoveToward,
Lerp
}
public FollowType type = FollowType.MoveToward;
public PointsToFollow path;
public float speed = 1;
public float maxDistanceToGoal = .1f;
private IEnumerator<Transform> _currentPoint;
public void Start(){
if (path == null) {
Debug.LogError ("Path is cannot be null", gameObject);
return;
}
_currentPoint = path.GetPathEnumerator ();
_currentPoint.MoveNext ();
if (_currentPoint.Current == null) {
return;
}
transform.position = _currentPoint.Current.position;
}
public void Update(){
if (_currentPoint == null || _currentPoint.Current == null) {
return;
}
if (type == FollowType.MoveToward) {
transform.position = Vector3.MoveTowards (transform.position, _currentPoint.Current.position, Time.deltaTime * speed);
} else if (type == FollowType.Lerp) {
transform.position = Vector3.Lerp (transform.position, _currentPoint.Current.position, Time.deltaTime * speed);
}
var distanceSquared = (transform.position - _currentPoint.Current.position).sqrMagnitude;
if (distanceSquared < maxDistanceToGoal * maxDistanceToGoal) {
_currentPoint.MoveNext ();
}
}
}
OBS: O objeto irá se mover indo e voltando pelos pontos infinitamente.
Aproveitem! :D
ecorrea- Iniciante
- PONTOS : 1569
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
Olá, como ele poderia apenas se mover do ponto A ao ponto B apenas quando o player pressionar um botão ? E depois de um tempo ele voltar e não ficar indo e voltando em loop ?
edsonvinicius76- Iniciante
- PONTOS : 1171
REPUTAÇÃO : 4
Respeito as regras :
Tópicos semelhantes
» Fazer objeto mover para frente.
» [TUTORIAL] Mover Objeto para lugar do click do Mouse
» Como mover um objeto para outro objeto (Navmesh ?)
» [TUTORIAL]Duplo clicke do mouse(Serve para UI)
» Rotacionar objeto e mover para a direita e para a esquerda
» [TUTORIAL] Mover Objeto para lugar do click do Mouse
» Como mover um objeto para outro objeto (Navmesh ?)
» [TUTORIAL]Duplo clicke do mouse(Serve para UI)
» Rotacionar objeto e mover para a direita e para a esquerda
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos