U4S1L5——手柄输入
U4S1L5——手柄输入
本章代码关键字
1 | Gamepad //手柄类 |
获取当前手柄
1 | Gamepad gamepad = Gamepad.current; |
手柄摇杆
-
左摇杆
1
2
3
4void Update()
{
print("左摇杆:" + Gamepad.current.leftStick.ReadValue());
} -
右摇杆
1
2
3
4void Update()
{
print("右摇杆:" + Gamepad.current.rightStick.ReadValue());
} -
摇杆按下抬起按住
和鼠标按键的情况一样,摇杆的按键也是使用ButtonControl
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
27void Update()
{
if (Gamepad.current.leftStickButton.wasPressedThisFrame)
{
print("左摇杆按下");
}
if (Gamepad.current.leftStickButton.wasReleasedThisFrame)
{
print("左摇杆抬起");
}
if (Gamepad.current.leftStickButton.isPressed)
{
print("左摇杆按住");
}
if (Gamepad.current.rightStickButton.wasPressedThisFrame)
{
print("右摇杆按下");
}
if (Gamepad.current.rightStickButton.wasReleasedThisFrame)
{
print("右摇杆抬起");
}
if (Gamepad.current.rightStickButton.isPressed)
{
print("右摇杆按住");
}
}
手柄方向键
对应手柄上4个方向键,和鼠标按键的情况一样,方向键也是使用ButtonControl,都有按下、抬起、按住,这里只演示按下
-
手柄上键
有按下、抬起、按住,这里只演示按下
1
2
3
4
5
6
7
8void Update()
{
Gamepad gamepad = Gamepad.current;
if (gamepad.dpad.up.wasPressedThisFrame)
{
print("上键按下");
}
} -
手柄下键
有按下、抬起、按住,这里只演示按下
1
2
3
4
5
6
7
8void Update()
{
Gamepad gamepad = Gamepad.current;
if (gamePad.dpad.down.wasPressedThisFrame)
{
print("下键按下");
}
} -
手柄左键
有按下、抬起、按住,这里只演示按下
1
2
3
4
5
6
7
8void Update()
{
Gamepad gamepad = Gamepad.current;
if (gamePad.dpad.left.wasPressedThisFrame)
{
print("左键按下");
}
} -
手柄右键
有按下、抬起、按住,这里只演示按下
1
2
3
4
5
6
7
8void Update()
{
Gamepad gamepad = Gamepad.current;
if (gamePad.dpad.right.wasPressedThisFrame)
{
print("右键按下");
}
}
手柄右侧按键
值得一提的是,主流的游戏主机厂商,它们的手柄右侧布局都有所不同:
任天堂与微软的手柄右侧按键上XY,AB布局是相反的,而索尼使用的图标是:x ○ △ □
- 任天堂switch:
- 微软Xbox系列:
- 索尼Playstation系列:
所有手柄右侧按键通用的API
Unity 提供了一个通用的API,用北南西东方向(上北下南左西右东)来指代所有手柄右侧不同的四个键
和鼠标按键的情况一样,右侧按键也是使用ButtonControl,都有按下、抬起、按住,这里只演示按下
-
手柄右侧上方按键(北)
指的是:任天堂手柄的X键,微软手柄的Y键,索尼手柄的△键
都有按下、抬起、按住,这里只演示按下1
2
3
4
5
6
7
8void Update()
{
Gamepad gamePad = Gamepad.current;
if (gamePad.buttonNorth.wasPressedThisFrame)
{
print("任天堂手柄的X键或微软手柄的Y键或索尼手柄的△键按下");
}
} -
手柄右侧下方按键(南)
指的是:任天堂手柄的B键,微软手柄的A键,索尼手柄的x键
都有按下、抬起、按住,这里只演示按下1
2
3
4
5
6
7
8void Update()
{
Gamepad gamePad = Gamepad.current;
if (gamePad.buttonSouth.wasPressedThisFrame)
{
print("任天堂手柄的B键或微软手柄的A键或索尼手柄的x键按下");
}
} -
手柄右侧左方按键(西)
指的是:任天堂手柄的Y键,微软手柄的X键,索尼手柄的□键
都有按下、抬起、按住,这里只演示按下1
2
3
4
5
6
7
8void Update()
{
Gamepad gamePad = Gamepad.current;
if (gamePad.buttonWest.wasPressedThisFrame)
{
print("任天堂手柄的Y键或微软手柄的X键或索尼手柄的□键按下");
}
} -
手柄右侧右方按键(东)
指的是:任天堂手柄的A键,微软手柄的B键,索尼手柄的○键
都有按下、抬起、按住,这里只演示按下1
2
3
4
5
6
7
8void Update()
{
Gamepad gamePad = Gamepad.current;
if (gamePad.buttonEast.wasPressedThisFrame)
{
print("任天堂手柄的A键或微软手柄的B键或索尼手柄的○键按下");
}
}
与名字对应的手柄右侧按键API
使用名字来监听手柄右侧按键也可以,但是要注意各个手柄厂商布局不同带来的问题,例如图标不同,XYAB排布不同等
因此,不建议使用这个API
和鼠标按键的情况一样,右侧按键也是使用ButtonControl,都有按下、抬起、按住,这里只演示按下
索尼手柄按键
1 | //○ |
微软手柄按键
注意!任天堂的XYAB按键布局和微软是不同的,它们的XY和AB键位置是颠倒的,而该API使用的是微软的布局,因此不适用于任天堂的布局!!!
1 | void Update() |
手柄中央按键
注意,这里的手柄中央按键一般仅指用于游戏的两个中央按键!如下图:
剩余的按键属于主机系统使用的按键,一般游戏里用不到
和鼠标按键的情况一样,中央按键也是使用ButtonControl,都有按下、抬起、按住,这里只演示按下
由于历史原因,中央右侧的按键一般就是start键,而中央左侧的按键就是select键
1 | void Update() |
手柄肩部按键(扳机键)
和鼠标按键的情况一样,中央按键也是使用ButtonControl,都有按下、抬起、按住,这里只演示按下
- 这里的肩键
Shoulder
指的是:靠向手柄正面一侧的肩键,即:任天堂的 L R 键,微软的 LB RB 键,索尼的 L1 R1 键 - 这里的扳机键
Trigger
指的是:靠向手柄背面一侧,且更像扳机的键,即:任天堂的 ZL ZR 键,微软的 LT RT 键,索尼的 L2 R2 键
1 | void Update() |