quem pode me dizer porque isso todo para um simples script de movimento
2 participantes
Página 1 de 1
quem pode me dizer porque isso todo para um simples script de movimento
Ola meu povo blz
bem vamos direto ao assunto primeiramente esse script não e meu mais sim de muriloms do site da (U@ni@!tLi@s%@t)
sobre o script e bem Tenso mais Lindo ao mesmo tempo
como um script mais simples pode se tão complicado
gostaria de uma explicação porque ne? vivendo e aprendendo
quem puder responder eu agradeço
1 isso e para si mostra que sabe programa ?
2 para deixar o script mais robusto e a prova de falhas ?
3-evitar problemas críticos no desenvolvimento lá na frente
4- e como posso usar esse modelo de script no jogo
5- qual o método e esse e como e chamado ( eu sei que ele tem sistema de hierarquia e criação de componentes)
6- outros motivos
e também estou fazendo um script que faz tudo isso sem divide nada, mas ele está sendo desenvolvido
então vamos usar como medida de comparação entre o meu e o dele ok
obs(ainda vou implantar um sistema de vida e escada nele ainda )
quero saber se o meu script vai falhar em algum momento do game ou não
e saber qual e o mais falho
meu script
aparte de agora e o script de muriloms
script principal: CharacterComponents
Script secundário:CharacterMovement
Script secundário: CharacterJump
s
Script secundário: CharacterFlip
s
Script secundário: CharacterDash
Script secundário: CharacterMovement
s
bem vamos direto ao assunto primeiramente esse script não e meu mais sim de muriloms do site da (U@ni@!tLi@s%@t)
sobre o script e bem Tenso mais Lindo ao mesmo tempo
como um script mais simples pode se tão complicado
gostaria de uma explicação porque ne? vivendo e aprendendo
quem puder responder eu agradeço
1 isso e para si mostra que sabe programa ?
2 para deixar o script mais robusto e a prova de falhas ?
3-evitar problemas críticos no desenvolvimento lá na frente
4- e como posso usar esse modelo de script no jogo
5- qual o método e esse e como e chamado ( eu sei que ele tem sistema de hierarquia e criação de componentes)
6- outros motivos
e também estou fazendo um script que faz tudo isso sem divide nada, mas ele está sendo desenvolvido
então vamos usar como medida de comparação entre o meu e o dele ok
obs(ainda vou implantar um sistema de vida e escada nele ainda )
quero saber se o meu script vai falhar em algum momento do game ou não
e saber qual e o mais falho
meu script
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PleyerBese1 : MonoBehaviour
{
// pulo Defalt
bool estarnocao = false, estarPulando = false, dualJupmp = false;
public float jumpForce = 10, raioDoGizmo = 0.5f;
public Transform graudCheck; public Rigidbody2D rb2d;
public LayerMask Grald;
//movimento Defalt
public SpriteRenderer sprite;
public float Speed = 5, rumSpeed = 10, muver;
private void Start()
{
rb2d = GetComponent<Rigidbody2D>();
graudCheck = GameObject.Find("GroundChek").transform;
//sprite = GetComponent<SpriteRenderer>();
}
private void Update()
{ ///////////////////////////|\\\\\
//(parte base do scrip)////////////////////////////////////////////|
//verificadores de obstaculos EX( parede, ção, aqua, inimigos e etc)|
/////////////////////////////////////////////////////////////////////|
//Movimento en terra (Normal/ Defalt)
muver = Input.GetAxis("Horizontal") * Speed;
// pulo
{
estarPulando = Input.GetButtonDown("Jump");
estarnocao = Physics2D.OverlapCircle(graudCheck.position, raioDoGizmo, Grald);
if(estarnocao)
{
dualJupmp = false;
Debug.Log("Estarpilano" + estarPulando);
}
}
//
}
private void FixedUpdate()
{
Movimetono();
}
public void Movimetono()
{
rb2d.velocity = new Vector2(muver, rb2d.velocity.y);
if ( muver >= 0 && sprite.flipX == false || muver <= 0 && sprite.flipX == true)
{
flip();
}
// movimeto em terra firme compativel com comtrole de xbom de PC
flip();
// sys pulo duplo
if (estarPulando)
{
if (estarnocao)
{
DoJump();
dualJupmp = true;
// Debug.Log("estar pulando1");
}
else if (!estarnocao && dualJupmp)
{
DoJump();
dualJupmp = false;
// Debug.Log("estar pulando2");
}
}
void flip()
{
sprite.flipX = !sprite.flipX;
}
void DoJump()
{
rb2d.velocity = new Vector2(rb2d.velocity.x, 0);
rb2d.AddForce(Vector2.up * jumpForce);
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(graudCheck.position, raioDoGizmo );
}
}
aparte de agora e o script de muriloms
script principal: CharacterComponents
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterComponents : MonoBehaviour
{
// Parametros para movimento
protected float horizontalInput;
// Pulo
protected bool jumpPressed;
// Dash
protected bool dashPressed;
// Componentes
protected CharacterController _controller;
protected CharacterMovement _movement;
protected CharacterJump _jump;
protected CharacterSensors _sensors;
protected CharacterFlip _flip;
protected Animator animator;
protected Character _character;
// Start is called before the first frame update
protected virtual void Start()
{
_controller = GetComponent<CharacterController>();
_character = GetComponent<Character>();
_movement = GetComponent<CharacterMovement>();
_jump = GetComponent<CharacterJump>();
_sensors = GetComponent<CharacterSensors>();
_flip = GetComponent<CharacterFlip>();
animator = GetComponent<Animator>();
}
// Update is called once per frame
protected virtual void Update()
{
HandleAbility();
}
// Método principal -- lógica de cada habilidade
protected virtual void HandleAbility()
{
InternalInput();
HandleInput();
}
/// Input necessario para executar acoes
protected virtual void HandleInput()
{
}
/// Input principais para controlar o agente - jogador
protected virtual void InternalInput()
{
if (_character.CharacterType == Character.CharacterTypes.Player)
{
// Movimento horizontal
horizontalInput = Input.GetAxisRaw("Horizontal");
// Pulo
jumpPressed = Input.GetButtonDown("Jump");
// Dash
dashPressed = Input.GetKeyDown(KeyCode.E);
}
}
}
Script secundário:CharacterMovement
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterMovement : CharacterComponents
{
[Header("Settings")]
[SerializeField] private float walkSpeed = 4f;
// Controle da velocidade de movimento - andar
public float MoveSpeed { get; set; }
// Parametros internos
private readonly int walkMoveParamater = Animator.StringToHash("isWalk");
protected override void Start()
{
base.Start();
MoveSpeed = walkSpeed;
}
protected override void HandleAbility()
{
base.HandleAbility();
MoveCharacter();
UpdateAnimations();
}
// Movimentar agente pela velocidade atual
private void MoveCharacter()
{
float movement = horizontalInput * MoveSpeed;
_controller.MoveHorizontalCharacter(movement);
if(movement > 0)
{
_flip.FaceDirection(1);
}
else if(movement < 0)
{
_flip.FaceDirection(-1);
}
else
{
return;
}
}
// Update Animation
private void UpdateAnimations()
{
if (Mathf.Abs(horizontalInput) > 0.1f)
{
if (_character.CharacterAnimator != null)
{
_character.CharacterAnimator.SetBool(walkMoveParamater, true);
}
}
else
{
if (_character.CharacterAnimator != null)
{
_character.CharacterAnimator.SetBool(walkMoveParamater, false);
}
}
}
public void ResetSpeed()
{
MoveSpeed = walkSpeed;
}
}
Script secundário: CharacterJump
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterJump : CharacterComponents
{
[Header("Settings")]
[SerializeField] private float jumpForce = 10f;
[SerializeField] private float jumpTime = 0.02f;
// Controle forca do pulo
public float JumpForce { get; set; }
// Parametros internos
private bool isJumping;
private float jumpTimeCounter;
private readonly int jumpParamater = Animator.StringToHash("isJump");
protected override void Start()
{
base.Start();
JumpForce = jumpForce;
}
protected override void HandleAbility()
{
base.HandleAbility();
if (jumpPressed && _sensors.OnGround)
{
// Parametros definidos para pulo
isJumping = true;
jumpTimeCounter = jumpTime;
// Acao pulo
Jump();
// Animation
UpdateAnimations();
}
// Pulo Duplo
if (jumpPressed && isJumping)
{
if(jumpTimeCounter > 0)
{
Jump();
jumpTimeCounter -= Time.deltaTime;
}
else
{
isJumping = false;
}
}
}
private void Jump()
{
_controller.MoveVerticalCharacter(JumpForce);
}
// Update Animation
private void UpdateAnimations()
{
if (jumpPressed)
{
if (_character.CharacterAnimator != null)
{
_character.CharacterAnimator.SetTrigger(jumpParamater);
}
}
}
}
s
Script secundário: CharacterFlip
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterFlip : CharacterComponents
{
// Returns if our character is facing Right
public bool FacingRight { get; set; }
private void Awake()
{
FacingRight = true;
}
// Makes our character face the direction in which is moving
public void FaceDirection(int newDirection)
{
if (newDirection == 1)
{
_controller.SetDirectionCharacter(new Vector3(0, 0, 0));
FacingRight = true;
}
else
{
_controller.SetDirectionCharacter(new Vector3(0, 180, 0));
FacingRight = false;
}
}
}
s
Script secundário: CharacterDash
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterDash : CharacterComponents
{
public enum DashState
{
Ready,
Dashing,
Cooldown
}
[Header("Settings")]
[SerializeField] private float speedDash = 4f;
[SerializeField] private float dashTimer;
[SerializeField] private float maxDash = 2f;
// Parametros internos
private Vector2 savedVelocity;
private DashState dashState;
private readonly int dashMoveParamater = Animator.StringToHash("isDash");
protected override void HandleAbility()
{
base.HandleAbility();
UpdateAnimations();
// Definir possibilidade de executar o Dash
switch (dashState)
{
case DashState.Ready:
if (dashPressed)
{
Dash();
dashState = DashState.Dashing;
}
break;
case DashState.Dashing:
dashTimer += Time.deltaTime * 3;
if (dashTimer >= maxDash)
{
dashTimer = maxDash;
StopDash();
dashState = DashState.Cooldown;
}
break;
case DashState.Cooldown:
dashTimer -= Time.deltaTime;
if (dashTimer <= 0)
{
dashTimer = 0;
dashState = DashState.Ready;
}
break;
}
}
// Acao do Dash
private void Dash()
{
_movement.MoveSpeed = _movement.MoveSpeed * speedDash;
}
// Parar dash
private void StopDash()
{
_movement.ResetSpeed();
}
// Update Animation
private void UpdateAnimations()
{
if (dashPressed)
{
if (_character.CharacterAnimator != null)
{
_character.CharacterAnimator.SetTrigger(dashMoveParamater);
}
}
}
}
Script secundário: CharacterMovement
s
Re: quem pode me dizer porque isso todo para um simples script de movimento
Eeeentão, o cara está usando o conceito de Orientação a Objeto... Em tese, seria o certo de se trabalhar na Unity, embora eu não seja muito fã disso.
A filosofia de Orientação a objeto é meio que ter um código para cada coisinha, então tipo, você quer que o seu personagem pule, você só arrasta o script de pulo pra ele... você quer que ele ande, só arrasta o script de movimento pra ele e tal. Mas pessoalmente, não curto muito essa abordagem não.
A filosofia de Orientação a objeto é meio que ter um código para cada coisinha, então tipo, você quer que o seu personagem pule, você só arrasta o script de pulo pra ele... você quer que ele ande, só arrasta o script de movimento pra ele e tal. Mas pessoalmente, não curto muito essa abordagem não.
Tópicos semelhantes
» Quem Pode Me Ajudar Num Script Para Veiculos.
» Alguém pode me dizer o que esse script está fazendo?
» {Duvida} Alguem ai pode consertar meu script e me dizer qual o erro?
» Alguem pode me dizer oque fazer para corrigir a porc@R|4 do network view is mine?
» [SCRIPT] Controle Simples com movimento e rotação
» Alguém pode me dizer o que esse script está fazendo?
» {Duvida} Alguem ai pode consertar meu script e me dizer qual o erro?
» Alguem pode me dizer oque fazer para corrigir a porc@R|4 do network view is mine?
» [SCRIPT] Controle Simples com movimento e rotação
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos