Dúvida com mecânica de voltar o tempo
2 participantes
Página 1 de 1
Dúvida com mecânica de voltar o tempo
Olá, eu tenho esse sistema de "Rewind Time" que refaz a física de objetos ou até do próprio player
Aqui segue os códigos:
TimeRewind (Que é colocado no objeto que retornará para sua posição original)
Aqui o PointInTime:
Com isso, eu consigo fazer o Rewind normalmente pressionando o R no teclado, porém eu tentei de várias formas adicionar esse código em um objeto, meu objetivo era criar um tipo de relóginho que faria o tempo voltar para trás.
Primeiro eu tentei criar um script só para esse objeto que chamaria as funções "StartRewind" e "StopRewind();" do "TimeStop", mas agora eu estou muito confuso e não sei como faria pra adaptar esse código para que ele
só seja executado caso este objeto esteja "na minha mão"
Eu aceitaria qualquer tipo de sugestão do que fazer
Aqui segue os códigos:
TimeRewind (Que é colocado no objeto que retornará para sua posição original)
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeRewind : MonoBehaviour
{
bool isRewinding = false;
public float recordTime = 5f;
List<PointInTime> pointsInTime;
Rigidbody rigidBody;
// Use this for initialization
void Start()
{
pointsInTime = new List<PointInTime>();
rigidBody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.R))
StartRewind();
if (Input.GetKeyUp(KeyCode.R))
StopRewind();
}
void FixedUpdate()
{
if (isRewinding)
Rewind();
else
Record();
}
void Rewind()
{
if (pointsInTime.Count > 0)
{
PointInTime pointInTime = pointsInTime[0];
transform.position = pointInTime.position;
transform.rotation = pointInTime.rotation;
pointsInTime.RemoveAt(0);
}
else
{
StopRewind();
}
}
void Record()
{
if (pointsInTime.Count > Mathf.Round(recordTime / Time.fixedDeltaTime))
{
pointsInTime.RemoveAt(pointsInTime.Count - 1);
}
pointsInTime.Insert(0, new PointInTime(transform.position, transform.rotation));
}
public void StopRewind()
{
isRewinding = false;
rigidBody.isKinematic = false;
}
public void StartRewind()
{
isRewinding = true;
rigidBody.isKinematic = true;
}
}
Aqui o PointInTime:
- Código:
using UnityEngine;
public class PointInTime
{
public Vector3 position;
public Quaternion rotation;
public PointInTime(Vector3 _position, Quaternion _rotation)
{
position = _position;
rotation = _rotation;
}
}
Com isso, eu consigo fazer o Rewind normalmente pressionando o R no teclado, porém eu tentei de várias formas adicionar esse código em um objeto, meu objetivo era criar um tipo de relóginho que faria o tempo voltar para trás.
Primeiro eu tentei criar um script só para esse objeto que chamaria as funções "StartRewind" e "StopRewind();" do "TimeStop", mas agora eu estou muito confuso e não sei como faria pra adaptar esse código para que ele
só seja executado caso este objeto esteja "na minha mão"
Eu aceitaria qualquer tipo de sugestão do que fazer
Ewfc2005- Iniciante
- PONTOS : 1203
REPUTAÇÃO : 0
Respeito as regras :
Re: Dúvida com mecânica de voltar o tempo
Ewfc2005 escreveu:Olá, eu tenho esse sistema de "Rewind Time" que refaz a física de objetos ou até do próprio player
Aqui segue os códigos:
TimeRewind (Que é colocado no objeto que retornará para sua posição original)
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeRewind : MonoBehaviour
{
bool isRewinding = false;
public float recordTime = 5f;
List<PointInTime> pointsInTime;
Rigidbody rigidBody;
// Use this for initialization
void Start()
{
pointsInTime = new List<PointInTime>();
rigidBody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.R))
StartRewind();
if (Input.GetKeyUp(KeyCode.R))
StopRewind();
}
void FixedUpdate()
{
if (isRewinding)
Rewind();
else
Record();
}
void Rewind()
{
if (pointsInTime.Count > 0)
{
PointInTime pointInTime = pointsInTime[0];
transform.position = pointInTime.position;
transform.rotation = pointInTime.rotation;
pointsInTime.RemoveAt(0);
}
else
{
StopRewind();
}
}
void Record()
{
if (pointsInTime.Count > Mathf.Round(recordTime / Time.fixedDeltaTime))
{
pointsInTime.RemoveAt(pointsInTime.Count - 1);
}
pointsInTime.Insert(0, new PointInTime(transform.position, transform.rotation));
}
public void StopRewind()
{
isRewinding = false;
rigidBody.isKinematic = false;
}
public void StartRewind()
{
isRewinding = true;
rigidBody.isKinematic = true;
}
}
Aqui o PointInTime:
- Código:
using UnityEngine;
public class PointInTime
{
public Vector3 position;
public Quaternion rotation;
public PointInTime(Vector3 _position, Quaternion _rotation)
{
position = _position;
rotation = _rotation;
}
}
Com isso, eu consigo fazer o Rewind normalmente pressionando o R no teclado, porém eu tentei de várias formas adicionar esse código em um objeto, meu objetivo era criar um tipo de relóginho que faria o tempo voltar para trás.
Primeiro eu tentei criar um script só para esse objeto que chamaria as funções "StartRewind" e "StopRewind();" do "TimeStop", mas agora eu estou muito confuso e não sei como faria pra adaptar esse código para que ele
só seja executado caso este objeto esteja "na minha mão"
Eu aceitaria qualquer tipo de sugestão do que fazer
Acima escrevi errado, o certo seria "...StartRewind" e "StopRewind();" do "TimeRewind", perdão pela gramática
Ewfc2005- Iniciante
- PONTOS : 1203
REPUTAÇÃO : 0
Respeito as regras :
Re: Dúvida com mecânica de voltar o tempo
No caso, somente quando pegar o objeto que poderia retornar no tempo?!
Se for somente isso a lógica a ser mudada, ou pelo menos maior parte dela, a ser mudada seria na função Update, perceba que é por lá que ambas as funções, StartRewind e StopRewind, são chamadas lá. Então, caso o necessário fosse ter o objeto e, assim, possuir o poder de ter voltar no tempo, umas boas funções condicionais e uma váriavel booleana poderiam resolver.
Tu já tens um sistema de pegar o objeto?! Ou seria de outra forma a ser implementado o acesso ao efeito de voltar no tempo no teu sistema?!
Se for somente isso a lógica a ser mudada, ou pelo menos maior parte dela, a ser mudada seria na função Update, perceba que é por lá que ambas as funções, StartRewind e StopRewind, são chamadas lá. Então, caso o necessário fosse ter o objeto e, assim, possuir o poder de ter voltar no tempo, umas boas funções condicionais e uma váriavel booleana poderiam resolver.
Tu já tens um sistema de pegar o objeto?! Ou seria de outra forma a ser implementado o acesso ao efeito de voltar no tempo no teu sistema?!
classicandsimple- ProgramadorMaster
- PONTOS : 1267
REPUTAÇÃO : 26
Áreas de atuação : Desenvolvimento de software (iniciante com linguagem C).
Respeito as regras :
Re: Dúvida com mecânica de voltar o tempo
Eu queria deixar o relógio como algo fixo na mão do personagem primeiramente, vou tentar fazer o que disse sobre alterar o Update, fico grato<3classicandsimple escreveu:No caso, somente quando pegar o objeto que poderia retornar no tempo?!
Se for somente isso a lógica a ser mudada, ou pelo menos maior parte dela, a ser mudada seria na função Update, perceba que é por lá que ambas as funções, StartRewind e StopRewind, são chamadas lá. Então, caso o necessário fosse ter o objeto e, assim, possuir o poder de ter voltar no tempo, umas boas funções condicionais e uma váriavel booleana poderiam resolver.
Tu já tens um sistema de pegar o objeto?! Ou seria de outra forma a ser implementado o acesso ao efeito de voltar no tempo no teu sistema?!
Ewfc2005- Iniciante
- PONTOS : 1203
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» Fiz esse jogo a bastante tempo que tipo de mecanica eu poderia adicionar?
» [DÚVIDA]Tempo de espera fora do app
» [Duvida] Voltar rotação de um objeto suavemente depois de solta-lo.
» [DÚVIDA]Ajuda para como fazer esse script voltar a funcionar
» [Duvida] Como funcionaria um MP de um jogo de estratégia em tempo.
» [DÚVIDA]Tempo de espera fora do app
» [Duvida] Voltar rotação de um objeto suavemente depois de solta-lo.
» [DÚVIDA]Ajuda para como fazer esse script voltar a funcionar
» [Duvida] Como funcionaria um MP de um jogo de estratégia em tempo.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos