13.PlayerInputManager
13.1 知识点
PlayerInputManager的作用
- PlayerInputManager 组件主要是用于管理本地多人输入的输入管理器。
- 它主要管理玩家加入和离开,比如分屏游戏和双手柄游戏。
PlayerInputManager组件参数相关
Notification Behavior
当玩家进入时PlayerInputManager如何通知关联的对象。它的工作方式和PlayerInput相同。
Join Behavior:玩家加入的机制
Join Players When Button Is Pressed:当有新设备加入按下任意键,或者没有任何玩家时按下任意键。
Join Players When Join Action Is Triggered:当有新设备加入按下指定按键触发玩家加入,一般选择这个。
Join Players Manually:不要自动加入玩家,需要自己手动加入玩家。
Player Prefab:挂载PlayerInput组件的游戏对象
Joining Enabled By Default:启用后,新加玩家按照JoinBehavior的规则加入,默认勾选。
Limit Number Of Players:启用后,可以限制加入游戏的玩家数量
Max Player Count:允许参加游戏的最大玩家数。
Enable Split_Screen:如果启用,会自动为每个对象分配可用屏幕区域的一部分,用于多人分屏游戏
Maintain Aspect Ratio:在启用分屏功能时,控制屏幕区域的纵横比是否与实际屏幕分辨率相匹配。当这个参数为真时,游戏会生成屏幕区域,保持与实际屏幕分辨率相同的纵横比。这意味着无论屏幕分割成多少区域,每个区域的宽高比都会与整个屏幕的宽高比相同。
Set Fixed Number:如果该值大于零,则PlayerInputManager始终将屏幕分割为固定数量的矩形,而不考虑实际的玩家数量。
Screen Rectangle:可用于分配播放器拆分屏幕的规范化屏幕矩形。
PlayerInputManager使用
创建预制体方块创建预制体方块,添加PlayerInput组件和脚本。创建配置文件关联到预制体方块PlayerInput组件。关联到PlayerInputManger的玩家预制体上。注意关联玩家预制一定要有PlayerInput组件,否则创建出来会报错。
调整方块预制体对象输入行为为手动关联模式关联脚本上的Move函数。注意假如直接拖一个方块预制体上去就能移动。
private Vector3 dir;
void Update()
{
this.transform.Translate(dir * 10 * Time.deltaTime);
}
public void Move(InputAction.CallbackContext context)
{
dir = context.ReadValue<Vector2>();
dir.z = dir.y;
dir.y = 0;
}
选择模式选择成按A键和手柄开始键可以创建新的方块预制体,分别按了后发现WASD可以移动A键创建的预制体,手柄摇杆能控制手柄开始键创建出来的预制体。这是PlayerInputManager帮我们自动处理的。因为我们关联的配置文件键鼠和手柄两套输入法则(其实还有多套)。注意一定要下面加入规则要勾选。
假如是任意键模式的话也差不多键鼠按一个键创建一个键鼠控制的方块。按手柄一个键创建一个手柄控制的方块。注意一定要下面加入规则要勾选。
让方块预制体挂载一个摄像机,勾选分屏选项挂载后用键鼠和手柄分别创建方块,会自动分屏。
用PlayerInputManager的单例获取PlayerInputManager给PlayerInputManager添加玩家进入和离开的事件。记得要把这段代码依赖的脚本挂载到场景上,不然事件添加不超成功。这样在键鼠或手柄创建方块时会执行监听的实际,手动删除方块时也会执行对应事件。
//获取PlayerInputManager
//PlayerInputManager.instance
//玩家加入时
PlayerInputManager.instance.onPlayerJoined += (playerInput) =>
{
print("创建了一个玩家");
};
//玩家离开时
PlayerInputManager.instance.onPlayerLeft += (playerInput) =>
{
print("离开了一个玩家");
};
13.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Lesson13_PlayerInputManager : MonoBehaviour
{
private Vector3 dir;
void Start()
{
#region 知识点一 PlayerInputManager的作用
//PlayerInputManager 组件主要是用于管理本地多人输入的输入管理器
//它主要管理玩家加入和离开
//比如分屏游戏 双手柄游戏
#endregion
#region 知识点二 PlayerInputManager组件添加及参数相关
#endregion
#region 知识点三 PlayerInputManager使用
//获取PlayerInputManager
//PlayerInputManager.instance
//玩家加入时
PlayerInputManager.instance.onPlayerJoined += (playerInput) =>
{
print("创建了一个玩家");
};
//玩家离开时
PlayerInputManager.instance.onPlayerLeft += (playerInput) =>
{
print("离开了一个玩家");
};
#endregion
}
#region 知识点三 PlayerInputManager使用
void Update()
{
this.transform.Translate(dir * 10 * Time.deltaTime);
}
public void Move(InputAction.CallbackContext context)
{
dir = context.ReadValue<Vector2>();
dir.z = dir.y;
dir.y = 0;
}
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com