[TUTORIAL] Movimentos de um Rigidbody
3 participantes
Página 1 de 1
[TUTORIAL] Movimentos de um Rigidbody
Elaborei este simples script, ele é responsavel pelos movimentos de um rigidbody ( frente, traz, direita, esquerda )
Crie uma share ( GameObject>Create Other> Share ) e adicione a ela um rigidbody
após isso, crie um script em C# com o nome RigidControlador e coloque este codigo nele
Jogue este script na sua share e pronto.
Tem este para jogos 2.5 D
OBS: SE ESTIVER UTILIZANDO A UNITY 5, USE OS SCRIPTS ABAIXO:
E ESTE AQUI PARAJOGOS 2D:
Crie uma share ( GameObject>Create Other> Share ) e adicione a ela um rigidbody
após isso, crie um script em C# com o nome RigidControlador e coloque este codigo nele
- Código:
using UnityEngine;
using System.Collections;
public class RigidControlador : MonoBehaviour{
public float Force;
void Update(){
if (Input.GetKey("left")){
this.rigidbody.AddForce(-Time.deltaTime * Force, 0, 0, ForceMode.Acceleration);
}
if (Input.GetKey("right")){
this.rigidbody.AddForce(Time.deltaTime * Force, 0, 0, ForceMode.Acceleration);
}
if (Input.GetKey("up")){
this.rigidbody.AddForce(0, 0, Time.deltaTime * Force, ForceMode.Acceleration);
}
if (Input.GetKey("down")){
this.rigidbody.AddForce(0, 0, -Time.deltaTime * Force, ForceMode.Acceleration);
}
}
}
Jogue este script na sua share e pronto.
Tem este para jogos 2.5 D
- Código:
using UnityEngine;
using System.Collections;
public class Controles : MonoBehaviour{
public float Force;
public bool contador;
public float cronometro;
public bool direita;
void Update (){
if (contador == true) {
cronometro += Time.deltaTime;
}
if (cronometro >= 2) {
contador = false;
cronometro = 0;
}
}
void OnGUI () {
if (GUI.RepeatButton (new Rect (Screen.width / 3 - Screen.width / 3, Screen.height / 2 + Screen.height / 6, Screen.width/3, Screen.height/3), "",GUIStyle.none)) {
this.rigidbody.AddForce (-Time.deltaTime * Force/15, 0, 0, ForceMode.Acceleration);
}
if (GUI.RepeatButton (new Rect (Screen.width/2+Screen.width/6,Screen.height/2+Screen.height/6, Screen.width/3, Screen.height/3), "",GUIStyle.none)) {
this.rigidbody.AddForce(Time.deltaTime * Force/15, 0, 0, ForceMode.Acceleration);
}
if (GUI.Button (new Rect (Screen.width/2-Screen.width/6,Screen.height/2+Screen.height/6, Screen.width/3, Screen.height/3),"",GUIStyle.none) && contador == false) {
contador = true;
this.rigidbody.AddForce(0,Time.deltaTime * Force*3,0, ForceMode.Acceleration);
}
}
}
OBS: SE ESTIVER UTILIZANDO A UNITY 5, USE OS SCRIPTS ABAIXO:
- Código:
using UnityEngine;
using System.Collections;
public class RigidControlador : MonoBehaviour{
public float Force;
void Update(){
if (Input.GetKey("left")){
this.GetComponent<Rigidbody>().AddForce(-Time.deltaTime * Force, 0, 0, ForceMode.Acceleration);
}
if (Input.GetKey("right")){
this.GetComponent<Rigidbody>().AddForce(Time.deltaTime * Force, 0, 0, ForceMode.Acceleration);
}
if (Input.GetKey("up")){
this.GetComponent<Rigidbody>().AddForce(0, 0, Time.deltaTime * Force, ForceMode.Acceleration);
}
if (Input.GetKey("down")){
this.GetComponent<Rigidbody>().AddForce(0, 0, -Time.deltaTime * Force, ForceMode.Acceleration);
}
}
}
E ESTE AQUI PARAJOGOS 2D:
- Código:
using UnityEngine;
using System.Collections;
public class Controles : MonoBehaviour{
public float Force;
public bool contador;
public float cronometro;
public bool direita;
void Update (){
if (contador == true) {
cronometro += Time.deltaTime;
}
if (cronometro >= 2) {
contador = false;
cronometro = 0;
}
}
void OnGUI () {
if (GUI.RepeatButton (new Rect (Screen.width / 3 - Screen.width / 3, Screen.height / 2 + Screen.height / 6, Screen.width/3, Screen.height/3), "",GUIStyle.none)) {
this.GetComponent<Rigidbody>().AddForce (-Time.deltaTime * Force/15, 0, 0, ForceMode.Acceleration);
}
if (GUI.RepeatButton (new Rect (Screen.width/2+Screen.width/6,Screen.height/2+Screen.height/6, Screen.width/3, Screen.height/3), "",GUIStyle.none)) {
this.GetComponent<Rigidbody>().AddForce(Time.deltaTime * Force/15, 0, 0, ForceMode.Acceleration);
}
if (GUI.Button (new Rect (Screen.width/2-Screen.width/6,Screen.height/2+Screen.height/6, Screen.width/3, Screen.height/3),"",GUIStyle.none) && contador == false) {
contador = true;
this.GetComponent<Rigidbody>().AddForce(0,Time.deltaTime * Force*3,0, ForceMode.Acceleration);
}
}
}
Última edição por MarcosSchultz em Ter Jun 07, 2016 9:22 pm, editado 3 vez(es)
Re: [TUTORIAL] Movimentos de um Rigidbody
Não cosigo encontra esse Share no meu n tem o meu e Unity Pro v4.3.4
Tiago9194- Iniciante
- PONTOS : 3607
REPUTAÇÃO : 2
Idade : 28
Respeito as regras :
Re: [TUTORIAL] Movimentos de um Rigidbody
Como faço para criar botões touch? Quero mover meu personagem para esquerda e para direita.
BananaSmith- Membro
- PONTOS : 3419
REPUTAÇÃO : 6
Respeito as regras :
Re: [TUTORIAL] Movimentos de um Rigidbody
Com este tutorial que você já comentou...
https://www.schultzgames.com/t85-tutorial-mover-um-rigidbody-com-touch#1996
básicamente, você cria botões da mesma maneira que cria com a void OnGUI, más declara eles no Update, como uma área de toque, exemplo:
Com isto eu declarei 2 áreas de toque, uma com o nome "esquerda" e outra com o nome "direita" e disse a posição e tamanho delas...
agora você precisa interagir com estas áreas, e isto pode ser feito através de um for, ou um foreach, que foi como eu fiz... exemplo:
simples assim... e isto resultará no script que você viu no outro tópico, que é este aqui:
Perfeito para objetos 2D
https://www.schultzgames.com/t85-tutorial-mover-um-rigidbody-com-touch#1996
básicamente, você cria botões da mesma maneira que cria com a void OnGUI, más declara eles no Update, como uma área de toque, exemplo:
- Código:
void Update (){
Rect Esquerda = new Rect (10, 10, 50, 50);
Rect Direita = new Rect (60 , 10, 50, 50);
}
Com isto eu declarei 2 áreas de toque, uma com o nome "esquerda" e outra com o nome "direita" e disse a posição e tamanho delas...
agora você precisa interagir com estas áreas, e isto pode ser feito através de um for, ou um foreach, que foi como eu fiz... exemplo:
- Código:
foreach (Touch t in Input.touches) {
Vector2 vec = t.position;
vec.y = Screen.height - vec.y;
if (Esquerda.Contains (vec)) { // pergunto se houve toques na área esquerda
//coloque comandos de ir para a esquerda
}
if (Direita.Contains (vec)) { // pergunto se houve toques na área direita
//coloque comandos de ir para a direita
}
}
simples assim... e isto resultará no script que você viu no outro tópico, que é este aqui:
- Código:
using UnityEngine;
using System.Collections;
public class NomeDoSeuScript : MonoBehaviour {
public float Forca = 11500f;
void Update (){
Rect Esquerda = new Rect (Screen.width / 2 - Screen.width / 2, Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
Rect Direita = new Rect (Screen.width / 2 , Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
foreach (Touch t in Input.touches) {
Vector2 vec = t.position;
vec.y = Screen.height - vec.y;
if (Esquerda.Contains (vec)) {
this.GetComponent<Rigidbody2D>().AddForce (-Vector2.right*Forca* Time.deltaTime*4);
}
if (Direita.Contains (vec)) {
this.GetComponent<Rigidbody2D>().AddForce (Vector2.right*Forca* Time.deltaTime*4);
}
}
}
}
Perfeito para objetos 2D
Tópicos semelhantes
» [TUTORIAL] Mover um Rigidbody com o mouse fazendo ele respeitar outros Rigidbody e suas massas
» [TUTORIAL] Movimento 2D e 3D no Unity (sem rigidbody)
» [TUTORIAL] Mover um Rigidbody com TOUCH
» [TUTORIAL] Alterar a velocidade de queda de um RigidBody
» [TUTORIAL] Adicionar força a um Rigidbody na direção onde o mouse está
» [TUTORIAL] Movimento 2D e 3D no Unity (sem rigidbody)
» [TUTORIAL] Mover um Rigidbody com TOUCH
» [TUTORIAL] Alterar a velocidade de queda de um RigidBody
» [TUTORIAL] Adicionar força a um Rigidbody na direção onde o mouse está
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos