Plataforma Flutuante
3 participantes
Página 1 de 1
Plataforma Flutuante
Olá, queria fazer tipo uma plataforma flutuante, que quando o player subir em cima ela vai um pouco pra baixo, e se colocar algum item tbm, como se fosse acrescentar a massa dos objetos, alguém tem algum script ou um tutorial para me ajudar?
Obrigado
Obrigado
TIKO- Avançado
- PONTOS : 1784
REPUTAÇÃO : 29
Idade : 16
Áreas de atuação : Modelagem 3D (Básico), Programação (Mais básico ainda), Unity 3D, C#
Respeito as regras :
Re: Plataforma Flutuante
Nunca fiz isso, Mas minha sugestão: (nao to afim de fazer o codigo disso, mas explicarei a logica, que eu acredito que vá funcionar)
- Código:
float posiçãoYinicial;
float pesoAdicional = 0f;
public float multiplicador;
Start{
posiçãoYinicial = position.Y;
}
OnCollisionEnter{
float peso = objQueColidiu.(pegar a massa do rigidbody dele);
pesoAdicional += peso;
float Ydestino = posiçãoYinicial - (pesoAdicional * multiplicador);
irParaY(Ydestino);
}
OnCollisionExit{
float peso = objQueSaiu.(pegar a massa do rigidbody dele);
pesoAdicional -= peso;
float Ydestino = posiçãoYinicial - (pesoAdicional * multiplicador);
irParaY(Ydestino);
}
IrParaY(Float destinoY){
aqui é com voce, mas resumindo
essa função só precisa fazer o obj ir para o eixo Y.
}
TIKO- Avançado
- PONTOS : 1784
REPUTAÇÃO : 29
Idade : 16
Áreas de atuação : Modelagem 3D (Básico), Programação (Mais básico ainda), Unity 3D, C#
Respeito as regras :
Re: Plataforma Flutuante
@dutrabr100, desculpe porque sou novo em C#, mas como eu faria para saber o "objQueColidiu" e o objQueSaiu?
Obrigado
Obrigado
TIKO- Avançado
- PONTOS : 1784
REPUTAÇÃO : 29
Idade : 16
Áreas de atuação : Modelagem 3D (Básico), Programação (Mais básico ainda), Unity 3D, C#
Respeito as regras :
Re: Plataforma Flutuante
no próprio evento tem o parâmetro de nome other. que por meio dele é possível referenciar o gameObject que colidiu.TIKO escreveu:@dutrabr100, desculpe porque sou novo em C#, mas como eu faria para saber o "objQueColidiu" e o objQueSaiu?
Obrigado
- Código:
private void OnCollisionEnter(Collision other)
{
GameObject objColidido = other.gameObject;
}
no OnCollisionExit é a mesma coisa
Re: Plataforma Flutuante
Sim, já consegui essa parte, Obrigado
TIKO- Avançado
- PONTOS : 1784
REPUTAÇÃO : 29
Idade : 16
Áreas de atuação : Modelagem 3D (Básico), Programação (Mais básico ainda), Unity 3D, C#
Respeito as regras :
Re: Plataforma Flutuante
No final ficou assim e deu errado, se puder apontar o erro eu agradeço
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Plataforma : MonoBehaviour {
float posiçãoYinicial, Ydestino;
float pesoAdicional = 0f;
public float multiplicador;
void Start (){
posiçãoYinicial = transform.position.y;
}
void OnCollisionEnter (Collision colisao) {
GameObject objColidido = colisao.gameObject;
float peso = objColidido.GetComponent<Rigidbody>().mass;
pesoAdicional += peso;
Ydestino = posiçãoYinicial - (pesoAdicional * multiplicador);
IrParaY();
}
void OnCollisionExit (Collision other){
GameObject objColidido = other.gameObject;
float peso = objColidido.GetComponent<Rigidbody>().mass;
pesoAdicional -= peso;
Ydestino = posiçãoYinicial - (pesoAdicional * multiplicador);
IrParaY();
}
void IrParaY (){
Vector3 vetor = transform.position;
vetor.y = Ydestino;
//aqui é com voce, mas resumindo
//essa função só precisa fazer o obj ir para o eixo Y.
TIKO- Avançado
- PONTOS : 1784
REPUTAÇÃO : 29
Idade : 16
Áreas de atuação : Modelagem 3D (Básico), Programação (Mais básico ainda), Unity 3D, C#
Respeito as regras :
Re: Plataforma Flutuante
TIKO escreveu:No final ficou assim e deu errado, se puder apontar o erro eu agradeço
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Plataforma : MonoBehaviour {
float posiçãoYinicial, Ydestino;
float pesoAdicional = 0f;
public float multiplicador;
void Start (){
posiçãoYinicial = transform.position.y;
}
void OnCollisionEnter (Collision colisao) {
GameObject objColidido = colisao.gameObject;
float peso = objColidido.GetComponent<Rigidbody>().mass;
pesoAdicional += peso;
Ydestino = posiçãoYinicial - (pesoAdicional * multiplicador);
IrParaY();
}
void OnCollisionExit (Collision other){
GameObject objColidido = other.gameObject;
float peso = objColidido.GetComponent<Rigidbody>().mass;
pesoAdicional -= peso;
Ydestino = posiçãoYinicial - (pesoAdicional * multiplicador);
IrParaY();
}
void IrParaY (){
Vector3 vetor = transform.position;
vetor.y = Ydestino;
//aqui é com voce, mas resumindo
//essa função só precisa fazer o obj ir para o eixo Y.
bem, no metodo irParaY tu não esta setando a nova posição do objeto:
- Código:
transform.position = vetor;
Re: Plataforma Flutuante
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlataformaFlutuante : MonoBehaviour
{
Vector3 posiçãoInicial, posicaoDestino;
[Header("O Basico")]
public float pesoAdicional = 0f;
public float multiplicador = 1;
[Header("Variaveis de animação")]
public bool cheia = false;
private int loop = 0;
public int MaxSteps = 30;
public Vector3 eixoDeMovimento = Vector3.up;
private bool movendo = false;
public Vector3 step, TempStep;
void Start()
{
step = eixoDeMovimento;
posiçãoInicial = transform.position;
}
void OnCollisionEnter(Collision colisao)
{
//Debug.Log("entrou a colisao");
colisao.transform.SetParent(transform);
cheia = true;
GameObject objColidido = colisao.gameObject;
float peso = objColidido.GetComponent<Rigidbody>().mass;
pesoAdicional += peso;
posicaoDestino = posiçãoInicial - (Vector3.up * (pesoAdicional * multiplicador));
Debug.Log(posicaoDestino);
step = Vector3.Scale((posicaoDestino - transform.position), (eixoDeMovimento / MaxSteps));
//Debug.Log("Step " + step);
IrParaY();
}
void OnCollisionExit(Collision other)
{
//Debug.Log("Saiu a colisao");
other.transform.SetParent(null);
cheia = false;
GameObject objColidido = other.gameObject;
float peso = objColidido.GetComponent<Rigidbody>().mass;
pesoAdicional -= peso;
if (pesoAdicional > 0)
{
posicaoDestino = posiçãoInicial - (Vector3.up * (pesoAdicional * multiplicador));
//Debug.Log(posicaoDestino);
step = Vector3.Scale((posicaoDestino - transform.position), (-eixoDeMovimento / MaxSteps));
}
else
{
step = Vector3.Scale((posiçãoInicial - transform.position), (-eixoDeMovimento / MaxSteps));
}
//Debug.Log("Step " + step);
IrParaY();
}
void IrParaY()
{
//transform.position = posicaoDestino;
CancelInvoke();
if (loop >= MaxSteps || loop == 0)
{
loop = 0;
}
else
{
loop = MaxSteps - loop;
}
TempStep = step;
TempStep *= cheia ? 1 : -1;
InvokeRepeating("animacao", 0.15f, 0.01f);
}
void animacao()
{
loop++;
transform.localPosition += TempStep;
if (loop >= MaxSteps)
{
CancelInvoke();
}
}
}
para alterar o quanto a plataforma desce só mudar o multiplicador, se o movimento parecer muito brusco aumenta o maxSteps
Tópicos semelhantes
» Plataforma Móvel 3D
» Erro no meu jogo de plataforma 2D
» Plataforma Móvel
» cair plataforma
» [RESOLVIDO] plataforma (2D)
» Erro no meu jogo de plataforma 2D
» Plataforma Móvel
» cair plataforma
» [RESOLVIDO] plataforma (2D)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos