-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlayerMovimentacao.cs
231 lines (169 loc) · 3.86 KB
/
PlayerMovimentacao.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
using UnityEngine;
using System.Collections;
public enum PlayerEstaNo{
SOLO,
AR
}
public class PlayerMovimentacao : MonoBehaviour {
//Enum
private PlayerEstaNo playerEstaNo;
//Movimentacao
public float velCorrer;
private float velAtual;
private float velocidade;
public float velAndar;
public float aceleracao;
//Salto
public float saltoMax;
public float saltoMin;
//relacionado a verificaçao de solo abaixo dos pes do player
public Transform contatoSolo;
public float raioContatoSolo;
public LayerMask tipoContato;
private bool emSolo;
//relacionado a verificaçao de paredes impedindo a movimentaçao
public Transform contatoParedeFrente;
public Transform contatoParedeAtras;
public float raioContatoParede;
private bool paredeNaFrente;
private bool paredeAtras;
//Componentes
private Rigidbody2D playerRigidBody;
//teclas
public KeyCode keyEsquerda;
public KeyCode keyDireita;
public KeyCode keyPular;
public KeyCode keyCorrer;
void Start()
{
//
playerRigidBody = GetComponent<Rigidbody2D>();
playerEstaNo = PlayerEstaNo.AR;
}
void FixedUpdate()
{
//checar se existe solo abaixo dos pes do player
emSolo = Physics2D.OverlapCircle(contatoSolo.position, raioContatoSolo, tipoContato);
//checar se existe parede na frente impedindo o movimento do player para frente
paredeNaFrente = Physics2D.Raycast(transform.position, Vector2.right, raioContatoParede);
//checar se existe parede atras impedidno o movimento do player para tras
paredeAtras = Physics2D.Raycast(transform.position, -Vector2.right, raioContatoParede);
if(Physics2D.Raycast(contatoSolo.position, -Vector2.up, raioContatoSolo, LayerMask.GetMask("Inimigo")))
{
Salto();
}
}
void Update ()
{
// o player esta no ar ou no solo?
switch(emSolo)
{
case false:
{
playerEstaNo = PlayerEstaNo.AR;
}
break;
case true:
{
playerEstaNo = PlayerEstaNo.SOLO;
}
break;
}
//saltar
if(Input.GetKeyDown(keyPular) && emSolo)
{
Salto();
}
//andar para frente
if(Input.GetKey(keyDireita))
{
if(velAtual <0 && !(Input.GetKey(keyEsquerda))){
velAtual = 0;
playerRigidBody.velocity = new Vector2(0,playerRigidBody.velocity.y);
}
//Correr
Correr(1);
//movimentar player para a direita
MovimentarDireita();
}
//andar para tras
if(Input.GetKey(keyEsquerda))
{
if(velAtual >0 && !(Input.GetKey(keyDireita))){
velAtual = 0;
playerRigidBody.velocity = new Vector2(0,playerRigidBody.velocity.y);
}
//Correr
Correr(-1);
//movimentar player para esquerda
MovimentarEsquerda();
}
if(!(Input.GetKey(keyEsquerda)) && !(Input.GetKey(keyDireita)) && playerEstaNo == PlayerEstaNo.SOLO)
{
velAtual = playerRigidBody.velocity.x;
velocidade=0;
}
}
void Correr(int sentido)
{
if(Input.GetKey(keyCorrer))
{
if(emSolo)
{
//velocidade do player correndo
velocidade = velCorrer * sentido;
}
}
//tecla de correr nao apertada
else
{
//nao estou no ar
if(emSolo)
{
velocidade = velAndar * sentido;
}
//estou no ar
else
{
velocidade = velAtual;
}
}
}
//saltar
void Salto()
{
playerRigidBody.velocity = new Vector2(playerRigidBody.velocity.x,saltoMin);
}
//andar para frente
void MovimentarDireita()
{
if(!paredeNaFrente)
{
if(velAtual<=velocidade )
{
velAtual += aceleracao*Time.deltaTime;
}
if(velAtual>velocidade)
{
velAtual = velocidade + 0.1f;
}
playerRigidBody.velocity = new Vector2(velAtual,playerRigidBody.velocity.y);
}
}
//antar para tras
void MovimentarEsquerda()
{
if(!paredeAtras)
{
if(velAtual>velocidade )
{
velAtual -= aceleracao*Time.deltaTime;
}
if(velAtual<velocidade)
{
velAtual = velocidade + 0.1f;
}
playerRigidBody.velocity = new Vector2(velAtual,playerRigidBody.velocity.y);
}
}
}