Skip to content

Commit 7276f59

Browse files
committed
Input小测试
1 parent 7b29cab commit 7276f59

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed

SomeTest/MyInput.cs

+181
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
5+
public class MyInput : MonoBehaviour {
6+
//移动方向枚举
7+
enum MoveDir
8+
{
9+
None = 0, //不动
10+
Up = 1, //上8
11+
Down = -1, //下2
12+
Left = 10, //左4
13+
Right = -10, //右6
14+
UL = 11, //左上7
15+
UR = -9, //右上9
16+
DL = 9, //左下1
17+
DR = -11, //右下3
18+
}
19+
20+
//输入按键常量(之后走配置)
21+
const KeyCode INPUT_UP = KeyCode.W;
22+
const KeyCode INPUT_DOWN = KeyCode.S;
23+
const KeyCode INPUT_LEFT = KeyCode.A;
24+
const KeyCode INPUT_RIGHT = KeyCode.D;
25+
26+
//默认移动方向
27+
private MoveDir moveDir = MoveDir.None;
28+
//按压值
29+
private int moveDirValue = 0;
30+
//按压记录
31+
private bool isUpPress = false;
32+
private bool isDownPress = false;
33+
private bool isLeftPress = false;
34+
private bool isRightPress = false;
35+
36+
//是否可以移动
37+
private bool canMove = true;
38+
//右移动
39+
private Vector3 MOVE_RIGHT = new Vector3(1, 0, 0);
40+
//上移动
41+
private Vector3 MOVE_UP = new Vector3(0, 1, 0);
42+
43+
//外部调控速度
44+
public float speed = 2f;
45+
//移动速度向量
46+
private Vector3 move_speed_dir = Vector3.zero;
47+
//移动距离
48+
private Vector3 move_dis = Vector3.zero;
49+
50+
//控制目标
51+
public Transform target;
52+
53+
// Use this for initialization
54+
void Start () {
55+
56+
}
57+
58+
// Update is called once per frame
59+
void Update () {
60+
CheckInputKey();
61+
CheckMoveDir();
62+
}
63+
64+
void FixedUpdate()
65+
{
66+
CheckMove();
67+
}
68+
69+
//检测输入按键
70+
void CheckInputKey()
71+
{
72+
//检测单一输入
73+
foreach (KeyCode kcode in System.Enum.GetValues(typeof(KeyCode)))
74+
{
75+
if (Input.GetKeyDown(kcode))
76+
{
77+
Debug.Log("Single KeyCode: " + kcode);
78+
ChangeKeyPressState(kcode, true);
79+
}
80+
81+
if (Input.GetKeyUp(kcode))
82+
{
83+
Debug.Log("Single KeyCode: " + kcode);
84+
ChangeKeyPressState(kcode, false);
85+
}
86+
}
87+
}
88+
89+
//记录按键的按压状态
90+
void ChangeKeyPressState(KeyCode keyCode, bool isPress)
91+
{
92+
switch(keyCode)
93+
{
94+
case INPUT_UP:
95+
isUpPress = isPress;
96+
break;
97+
case INPUT_DOWN:
98+
isDownPress = isPress;
99+
break;
100+
case INPUT_LEFT:
101+
isLeftPress = isPress;
102+
break;
103+
case INPUT_RIGHT:
104+
isRightPress = isPress;
105+
break;
106+
}
107+
}
108+
109+
//确定移动方向
110+
void CheckMoveDir()
111+
{
112+
moveDirValue = 0;
113+
//确定方向
114+
if(isUpPress)
115+
{
116+
moveDirValue += (int)MoveDir.Up;
117+
}
118+
if (isDownPress)
119+
{
120+
moveDirValue += (int)MoveDir.Down;
121+
}
122+
if (isLeftPress)
123+
{
124+
moveDirValue += (int)MoveDir.Left;
125+
}
126+
if (isRightPress)
127+
{
128+
moveDirValue += (int)MoveDir.Right;
129+
}
130+
}
131+
132+
//检测是否可以移动
133+
void CheckMove()
134+
{
135+
//某些情况下可能禁止移动,例如暂停,播放CG等
136+
if(canMove && moveDirValue != (int)MoveDir.None)
137+
{
138+
PlayerMove(target, speed);
139+
}
140+
}
141+
142+
//移动
143+
void PlayerMove(Transform target, float speed)
144+
{
145+
move_dis = speed * Time.deltaTime * GetSpeedDir();
146+
target.position += move_dis;
147+
}
148+
149+
//速度向量
150+
Vector3 GetSpeedDir()
151+
{
152+
switch(moveDirValue)
153+
{
154+
case (int)MoveDir.Up:
155+
move_speed_dir = MOVE_UP;
156+
break;
157+
case (int)MoveDir.Down:
158+
move_speed_dir = -MOVE_UP;
159+
break;
160+
case (int)MoveDir.Left:
161+
move_speed_dir = -MOVE_RIGHT;
162+
break;
163+
case (int)MoveDir.Right:
164+
move_speed_dir = MOVE_RIGHT;
165+
break;
166+
case (int)MoveDir.UL:
167+
move_speed_dir = MOVE_UP - MOVE_RIGHT;
168+
break;
169+
case (int)MoveDir.UR:
170+
move_speed_dir = MOVE_UP + MOVE_RIGHT;
171+
break;
172+
case (int)MoveDir.DL:
173+
move_speed_dir = -MOVE_UP - MOVE_RIGHT;
174+
break;
175+
case (int)MoveDir.DR:
176+
move_speed_dir = -MOVE_UP + MOVE_RIGHT;
177+
break;
178+
}
179+
return move_speed_dir.normalized;
180+
}
181+
}

0 commit comments

Comments
 (0)