[TUTORIAL] Agachar, correr e sistema de estamina ( C# )
+3
MarcosSchultz
Santiago Furtado
fafato1
7 participantes
Página 1 de 1
[TUTORIAL] Agachar, correr e sistema de estamina ( C# )
Crie um script em C# chamado "Run" e adicione este codigo a ele... após, coloque o script no seu player... este script fará com que ele se agache apertando a tecla "ctrl" e corra de maneira que fique cansado...
OBS: para o script funcionar corretamente, você deve converter os seus scripts de Mouselook, characterMotor, etc para C#
OBS: para o script funcionar corretamente, você deve converter os seus scripts de Mouselook, characterMotor, etc para C#
- Código:
using UnityEngine;
using System.Collections;
public class Run : MonoBehaviour {
public float walkSpeed = 7;
public float crchSpeed = 3;
public float runSpeed = 20;
private CharacterMotor chMotor;
private Transform tr;
private float dist;
public float curStam = 100.0f;
public float maxStam = 100.0f;
public bool isSprinting = false;
public float percentOfStamina;
public bool stamCooldown = false;
void Start () {
chMotor = GetComponent<CharacterMotor>();
tr = transform;
CharacterController ch = GetComponent<CharacterController>();
dist = ch.height/2;
}
void FixedUpdate (){
float vScale = 1.0f;
float speed = walkSpeed;
if ((Input.GetKey("left shift") && chMotor.grounded && curStam > 0 && stamCooldown == false)){
speed = runSpeed;
walkSpeed = 12;
isSprinting = true;
}
else{
walkSpeed = 6;
isSprinting = false;
}
if (Input.GetKey(KeyCode.LeftControl)){
vScale = 0.5f;
speed = crchSpeed; // slow down when crouching
}
chMotor.movement.maxForwardSpeed = speed; // set max speed
float ultScale = tr.localScale.y; // crouch/stand up smoothly
Vector3 tmpScale = tr.localScale;
Vector3 tmpPosition = tr.position;
tmpScale.y = Mathf.Lerp(tr.localScale.y, vScale, 5 * Time.deltaTime);
tr.localScale = tmpScale;
tmpPosition.y += dist * (tr.localScale.y - ultScale); // fix vertical position
tr.position = tmpPosition;
percentOfStamina = curStam/maxStam;
if(isSprinting == true && curStam >= 0) {
curStam--;
}
if(isSprinting == false && curStam < 100.0) {
curStam++;
}
if(curStam == 0) {
stamCooldown = true;
}
if(curStam == 100.0) {
stamCooldown = false;
}
}
}
Última edição por MarcosSchultz em Ter Jun 07, 2016 9:17 pm, editado 1 vez(es)
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
pega no unity 5?
fafato1- Iniciante
- PONTOS : 3433
REPUTAÇÃO : 0
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
fafato1 eu testei e nao funfou
Santiago Furtado- MembroAvançado
- PONTOS : 3735
REPUTAÇÃO : 16
Idade : 23
Respeito as regras :
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
Na unity 5 é um pouco complicado pois o Character controller já vem com alguns sistemas destes imbutidos como correr, som dos passos, etc, etc... naturalmente os scripts são diferentes da versão anterior.
aqui tem um tutorial onde eu explico como usar o novo FPS controller:
más quanto ao script, só funcionará na Unity 4 ou inferior...
aqui tem um tutorial onde eu explico como usar o novo FPS controller:
más quanto ao script, só funcionará na Unity 4 ou inferior...
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
Tentei adaptar a stamina em cima do script de correrAgachar, mas por algum motivo apesar de estar aparentemente certo o código, a velocidade parece que não está ficando como caminhando, me parece que continua correndo. E estou tentando pensar num método de recuperar a stamina após 10 segundos descansando (pode andar ou ficar agachado, mas não pode correr), mas nada faz efeito. O que tem de errado com esse código? Estou usando Unity 5.1.2:
- Código:
using UnityEngine;
using System.Collections;
using UnityStandardAssets.Characters.FirstPerson;
public class CorrerAgachar : MonoBehaviour {
public float velocidadeCaminhando = 2, velocidadeAgachado = 0.5f, velocidadeCorrendo = 4;
private CharacterController characterController;
private float escalaDoObjeto, velocidadeAtual;
private static float staminaAtual;
private int stamina = 7;
private FirstPersonController controlador;
public bool podeCorrer;
void Start () {
characterController = GetComponent<CharacterController> ();
escalaDoObjeto = characterController.height;
controlador = GetComponent<FirstPersonController> ();
staminaAtual = stamina;
}
void FixedUpdate () {
if (Input.GetKey (KeyCode.LeftShift) && characterController.isGrounded && !Input.GetKey(KeyCode.LeftControl) && podeCorrer == true) {
velocidadeAtual = velocidadeCorrendo; //Esta Correndo;
escalaDoObjeto = 1.7f;
controlador.m_UseFovKick = true;
controlador.m_FovKick.FOVIncrease = 10;
staminaAtual -= Time.deltaTime;
} else if (!Input.GetKey(KeyCode.LeftControl) && characterController.isGrounded){
velocidadeAtual = velocidadeCaminhando; //Esta Caminhando;
staminaAtual += Time.deltaTime;
} if (Input.GetKey (KeyCode.LeftControl)) {
escalaDoObjeto = 0.5f;
velocidadeAtual = velocidadeAgachado; //Esta Agachado;
controlador.m_UseFovKick = false;
staminaAtual += Time.deltaTime;
} else if (!Input.GetKey (KeyCode.LeftShift)){
escalaDoObjeto = 1.7f;
velocidadeAtual = velocidadeCaminhando;
staminaAtual += Time.deltaTime;
}
if (staminaAtual <= 0) {
podeCorrer = false;
}else if(staminaAtual > 0){
podeCorrer = true;
}
if (staminaAtual >= stamina) {
staminaAtual = stamina;
}
controlador.m_RunSpeed = velocidadeAtual;
controlador.m_WalkSpeed = velocidadeAtual;
characterController.height = Mathf.Lerp (characterController.height, escalaDoObjeto, 3 * Time.deltaTime);
}
}
perinaldoc- Membro
- PONTOS : 3416
REPUTAÇÃO : 9
Respeito as regras :
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
seria interessante você criar um tópico especifico para esta dúvida perinaldoc
Especifique versão da engine e tdo mais... Pode estar havendo incompadibilidade com os scripts do Controller da unity 4 com os da unity 5
Especifique versão da engine e tdo mais... Pode estar havendo incompadibilidade com os scripts do Controller da unity 4 com os da unity 5
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
Mas eu não estou usando nada da Unity 4. Eu já comecei a desenvolver meu jogo na Unity 5.1.2 mesmo. Eu assisti seu vídeo explicando o script de agacharCorrer, vi que ele era feito na Unity antiga e eu mesmo fui adaptando para a nova. Por exemplo, no seu código vc usa CharacterMotor que na Unity 5 não existe e faz parte do FPSController. Então fui adaptando e tudo está funcionando perfeitamente. Acontece que depois eu quis inserir nesse mesmo script a stamina. Não peguei a lógica do seu script de stamina, usei a mesma lógica de decrementar a stamina a cada 1 segundo como vc fez na carga da lanterna. Isso até funciona, mas não sei como fazer voltar a stamina. Não quero que ela volte de vez. Quero que ao deixar de correr, cerca de 10 segundos depois a stamina comece a retornar 1 unidade por segundo, entendeu?
perinaldoc- Membro
- PONTOS : 3416
REPUTAÇÃO : 9
Respeito as regras :
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
A arma encolhe nesse script :/ como poderia concertar isso
theallan256- Iniciante
- PONTOS : 3489
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
Este script ai está um poco obsoleto... Ali o tamanho do player todo é alterado, consequentemente o que é filho do player encolhe também...
Daria para tentar alguma solução deste tipo:
Neste script eu altero o tamanho do colisor somente e não do player; Más este script de abaixar só vai funcionar na Unity 5, e não é lá o ideal a se fazer
Daria para tentar alguma solução deste tipo:
- Código:
using UnityEngine;
using System.Collections;
using UnityStandardAssets.Characters.FirstPerson;
public class Run : MonoBehaviour {
private CharacterController controlador;
private FirstPersonController ScriptFPSController;
[Range(1,10)]
public float velCaminhando = 5,velCorrendo = 10,velAbaixado = 2;
private float tamanhoInicialPlayer;
void Start () {
controlador = GetComponent<CharacterController> ();
ScriptFPSController = GetComponent<FirstPersonController> ();
SetarVelocidades (velCaminhando, velCorrendo);
tamanhoInicialPlayer = controlador.height;
}
void FixedUpdate (){
if (Input.GetKey (KeyCode.LeftControl)) {
SetarVelocidades (2, 2);
controlador.height = Mathf.Lerp (controlador.height, 1, 5 * Time.deltaTime);
} else {
SetarVelocidades (velCaminhando, velCorrendo);
controlador.height = Mathf.Lerp (controlador.height, tamanhoInicialPlayer, 5*Time.deltaTime);
}
}
void SetarVelocidades(float velocidadeCaminhando, float velocidadeCorrendo){
ScriptFPSController.m_WalkSpeed = velocidadeCaminhando;
ScriptFPSController.m_RunSpeed = velocidadeCorrendo;
}
}
Neste script eu altero o tamanho do colisor somente e não do player; Más este script de abaixar só vai funcionar na Unity 5, e não é lá o ideal a se fazer
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
o meu não deu o character motor fala que não existe
Herovine Hl- Iniciante
- PONTOS : 1120
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Agachar, correr e sistema de estamina ( C# )
esse script ele agacha lenvamento, mas quando volta ele volta quicando, tem como arrumar?MarcosSchultz escreveu:Este script ai está um poco obsoleto... Ali o tamanho do player todo é alterado, consequentemente o que é filho do player encolhe também...
Daria para tentar alguma solução deste tipo:
- Código:
using UnityEngine;
using System.Collections;
using UnityStandardAssets.Characters.FirstPerson;
public class Run : MonoBehaviour {
private CharacterController controlador;
private FirstPersonController ScriptFPSController;
[Range(1,10)]
public float velCaminhando = 5,velCorrendo = 10,velAbaixado = 2;
private float tamanhoInicialPlayer;
void Start () {
controlador = GetComponent<CharacterController> ();
ScriptFPSController = GetComponent<FirstPersonController> ();
SetarVelocidades (velCaminhando, velCorrendo);
tamanhoInicialPlayer = controlador.height;
}
void FixedUpdate (){
if (Input.GetKey (KeyCode.LeftControl)) {
SetarVelocidades (2, 2);
controlador.height = Mathf.Lerp (controlador.height, 1, 5 * Time.deltaTime);
} else {
SetarVelocidades (velCaminhando, velCorrendo);
controlador.height = Mathf.Lerp (controlador.height, tamanhoInicialPlayer, 5*Time.deltaTime);
}
}
void SetarVelocidades(float velocidadeCaminhando, float velocidadeCorrendo){
ScriptFPSController.m_WalkSpeed = velocidadeCaminhando;
ScriptFPSController.m_RunSpeed = velocidadeCorrendo;
}
}
Neste script eu altero o tamanho do colisor somente e não do player; Más este script de abaixar só vai funcionar na Unity 5, e não é lá o ideal a se fazer
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Tópicos semelhantes
» sistema de agachar e correr deu erro
» SISTEMA DE ESTAMINA PARA CORRER E VOAR O LINK NO TÓPICO
» [TUTORIAL] Sistema de fome, sede, barra de vida, barra de estamina, itens e dano por queda
» [TUTORIAL] Sistema de fome
» Sistema Adicionado De Agachar No FPSController no Unity
» SISTEMA DE ESTAMINA PARA CORRER E VOAR O LINK NO TÓPICO
» [TUTORIAL] Sistema de fome, sede, barra de vida, barra de estamina, itens e dano por queda
» [TUTORIAL] Sistema de fome
» Sistema Adicionado De Agachar No FPSController no Unity
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos