Criar Simulador de Sinuca
3 participantes
Página 1 de 1
Criar Simulador de Sinuca
Olá galera, estou desenvolvendo um simulador de sinuca na Unity3D 5.4, fiz esse código:
Esse scritp coloquei na bola branca, o disparo dela é acionado pela barra de espaço, o ponteiro do mouse direciona para onde a bola vai ser disparada. Até está funcionando o disparo. Mas tem uns bugs, que seriam: as bolas não param de rolar até cair na caçapa, a bola branca quica no eixo z, o taco cai se tem o rigidbody.
Coloquei na bola branco o Bounceness para ela quicar nas laterais, mas quando ela movimenta para cima em determinado repique das bolas, ela fica quicando até reduzia a velocidade. Tentei colocar 350 de massa nas bolas para não quicar, mas mesmo assim quica.
Tentei colocar o taco, mas ele cai por causa do rigidbody, então não sei se o script funciona no taco.
Eu gostaria se alguém podesse me ajudar com esses problemas:
- como fazer para as bolas não quicar no eixo z;
- como fazer as bolas quicar nas laterais ou entre si e depois reduzir a velocidade e para como na sinuca normal;
- como eu usar o taco para disparar a bola branca;
Desde já agradeço
- Código:
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(Rigidbody))]
public class WhiteBallController: MonoBehaviour {
private Transform thisTransform = null;
public Rigidbody whiteBall;
public float speed;
void Awake()
{
thisTransform = GetComponent<Transform>();
}
// Use this for initialization
void Start () {
whiteBall = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
if (Input.GetButtonDown("Jump"))
{
//Vector3 mousePosWorld = thisTransform.TransformPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0f));
Vector3 mousePosWorld = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0f));
mousePosWorld = new Vector3(mousePosWorld.x, thisTransform.position.y, mousePosWorld.z);
Vector3 lookDirection = mousePosWorld - thisTransform.position;
thisTransform.localRotation = Quaternion.LookRotation(lookDirection.normalized, Vector3.up);
GetComponent<Rigidbody>().AddForce(transform.forward * speed, ForceMode.Acceleration);
GetComponent<Rigidbody>().useGravity = true;
}
if (Input.GetKeyDown(KeyCode.Q))
{
SceneManager.LoadScene("level1");
}
}
/* void OnMouseDown() {
GetComponent<Rigidbody>().AddForce(transform.forward * speed, ForceMode.Acceleration);
GetComponent<Rigidbody>().useGravity = true;
}*/
void OnCollisionEnter(Collision other) {
if (other.gameObject.tag == "balls")
{
SoundBallController.PlaySound(soundBalls.hitBalls);
}
if (other.gameObject.tag == "canaleta")
{
SceneManager.LoadScene("level1");
}
}
}
Esse scritp coloquei na bola branca, o disparo dela é acionado pela barra de espaço, o ponteiro do mouse direciona para onde a bola vai ser disparada. Até está funcionando o disparo. Mas tem uns bugs, que seriam: as bolas não param de rolar até cair na caçapa, a bola branca quica no eixo z, o taco cai se tem o rigidbody.
Coloquei na bola branco o Bounceness para ela quicar nas laterais, mas quando ela movimenta para cima em determinado repique das bolas, ela fica quicando até reduzia a velocidade. Tentei colocar 350 de massa nas bolas para não quicar, mas mesmo assim quica.
Tentei colocar o taco, mas ele cai por causa do rigidbody, então não sei se o script funciona no taco.
Eu gostaria se alguém podesse me ajudar com esses problemas:
- como fazer para as bolas não quicar no eixo z;
- como fazer as bolas quicar nas laterais ou entre si e depois reduzir a velocidade e para como na sinuca normal;
- como eu usar o taco para disparar a bola branca;
Desde já agradeço
souteramoto- Iniciante
- PONTOS : 2914
REPUTAÇÃO : 0
Respeito as regras :
Re: Criar Simulador de Sinuca
Tente isso:
Troque o ForceMode.Acceleration para ForceMode.Impulse
Crie um material fisico pras bolhas, que tenha um pouco de atrito(Friction) e um pouco de Quick(Bouciness) e vai alterando os valores desejados
Como provavelmente a bola nao deve sair da mesa, voce pode fixa a altura delas, e quando passarem pela caçapa voce desbloqueia a altura pra ela cair novamente(dentro da caçapa)
Troque o ForceMode.Acceleration para ForceMode.Impulse
Crie um material fisico pras bolhas, que tenha um pouco de atrito(Friction) e um pouco de Quick(Bouciness) e vai alterando os valores desejados
Como provavelmente a bola nao deve sair da mesa, voce pode fixa a altura delas, e quando passarem pela caçapa voce desbloqueia a altura pra ela cair novamente(dentro da caçapa)
Re: Criar Simulador de Sinuca
Obrigado Manawydan por responder, estou fazendo o teste com a física do material, estou quase chegando onde quero, fixei a rotação z das bolas, diminuiu a o quique da bola branca e as bolas estão rolando menos, mas vou continuar fazer o teste para ficar no ponto.
souteramoto- Iniciante
- PONTOS : 2914
REPUTAÇÃO : 0
Respeito as regras :
Re: Criar Simulador de Sinuca
Olá Manawydan, eu segui suas instruções de alterar atrito(Friction) e um pouco de Quick(Bouciness) das bolas, mas dependendo do valor colocado em determinado momento as bolas parecem iã, quando uma bate na outra elas colam e uns milésimo de segundos se soltam. Fiz várias mudanças no material físico para ver se rolavam e paravam naturalmente, mas não as vezes elas batem na lateral e cola, não dá um repique pequeno, ou elas batem na lateral e rola bem lentamente até colidir com algo para parar.
Então retirei o material físico do colisor, representa que ficou melhor, mas a bola branca quando bate fora do centro de outra bola, ela sobe e cai fora da mesa ou quando bate na lateral da mesa na diagonal, também cai fora da mesa.
Não consegui limitar a altura da bola, tentei pegar o uma determinada altura e mudar a massa para ela cair antes de sair da mesa, mas também não funcionou, usei esse código:
. Como eu poderia limitar a altura da bola ou acessar a gravidade dinamicamente e mudar para quando as bolas atingir determinada altura a gravidade mudasse fazendo com que a bola caísse mais rápido?
Desde já agradeço.
Então retirei o material físico do colisor, representa que ficou melhor, mas a bola branca quando bate fora do centro de outra bola, ela sobe e cai fora da mesa ou quando bate na lateral da mesa na diagonal, também cai fora da mesa.
Não consegui limitar a altura da bola, tentei pegar o uma determinada altura e mudar a massa para ela cair antes de sair da mesa, mas também não funcionou, usei esse código:
- Código:
transformPositionVec.y = thisTransform.position.y;
if (transformPositionVec.y >= 2.38f)
{
transformPositionVec.y = 2.360907f;
transformPositionVec = new Vector3(thisTransform.position.x, transformPositionVec.y, thisTransform.position.z);
}
else
{
transformPositionVec = new Vector3(thisTransform.position.x, thisTransform.position.y, thisTransform.position.z);
}
. Como eu poderia limitar a altura da bola ou acessar a gravidade dinamicamente e mudar para quando as bolas atingir determinada altura a gravidade mudasse fazendo com que a bola caísse mais rápido?
Desde já agradeço.
souteramoto- Iniciante
- PONTOS : 2914
REPUTAÇÃO : 0
Respeito as regras :
Re: Criar Simulador de Sinuca
Se as bolas tem rigidbody, basta fazer um += no rigidbody.velocity.y
Mas você também pode limitar a posição máxima das bolas, com uma simples condição no transform.position.y, exemplo: (o script abaixo iria em cada uma das bolas)
Mas você também pode limitar a posição máxima das bolas, com uma simples condição no transform.position.y, exemplo: (o script abaixo iria em cada uma das bolas)
- Código:
public float alturaMaxima = 1;
void Update () {
if (transform.position.y > alturaMaxima) {
transform.position = new Vector3 (transform.position.x, alturaMaxima, transform.position.z);
}
}
Tópicos semelhantes
» Criar simulador
» QUERO CRIAR UM SCRIPT PARA UM SIMULADOR DE CARRO
» COMO MOVIMENTAR TACO DE SINUCA 3D?
» MEU SIMULADOR DE CARRO
» Simulador de Trator
» QUERO CRIAR UM SCRIPT PARA UM SIMULADOR DE CARRO
» COMO MOVIMENTAR TACO DE SINUCA 3D?
» MEU SIMULADOR DE CARRO
» Simulador de Trator
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos