0.基础配置
基础配置在之前的笔记中有介绍
[Chip]Unity开发笔记--Input System实现移动
[Chip]Unity开发笔记--Input System实现跳跃,冲刺
1.Input Actions配置
1.在Actions中右键Add Action命名为Crouch,Action Type为Button。
2.右键Crouch选择Add Binding,在右侧Path中选择Listen按下“C”键,即可将“C”键绑定为下蹲所需的按键。
3.同理Add Action命名为Slide,将Shift键绑定为冲刺所需的按键。
配置完后如图所示
2.下蹲代码编写
1.右键Create一个C# Scrpt命名为Crouch,并挂载到Player身上。
2.初始化PlayerControl
public class Crouch : MonoBehaviour
{
public PlayerControl playerControl;
private void Awake()
{
playerControl = new PlayerControl();
}
private void OnEnable()
{
playerControl.Enable();
}
private void OnDisable()
{
playerControl.Disable();
}
}
3.获取Player的Scale并记录,设置下蹲时的Scale
public float localYScale;
public float crouchYScale;
public Vector3 localScale;
public Vector3 crouchScale;
private void Start()
{
localScale = new Vector3(player.transform.localScale.x, localYScale, player.transform.localScale.z);
//默认Scale
crouchScale = new Vector3(player.transform.localScale.x, crouchYScale, player.transform.localScale.z);
//下蹲时Scale
}
4.开始下蹲和结束下蹲
public Rigidbody rb;
private void Start()
{
rb=GetComponent<Rigidbody>();
playerControl.Player.Crouch.started += CrouchStart;
//注册开始下蹲事件
playerControl.Player.Crouch.canceled += CrouchOver;
//注册结束下蹲事件
}
private void CrouchStart(InputAction.CallbackContext obj)
{
transform.localScale = crouchScale;
rb.AddForce(Vector3.down * 5f, ForceMode.Impulse);
//当C键按下时设置Player的Scale为下蹲时Scale,并施加一个向下的力,确保Player接触地面
}
private void CrouchOver(InputAction.CallbackContext obj)
{
transform.localScale = localScale;
//当C键松开时恢复Player的Scale为默认Scale
}
5.设置好slideYScale保存后运行即可使用“C”键下蹲。
3.滑行代码编写
1.右键Create一个C# Scrpt命名为Slide,并挂载到Player身上。
2.初始化PlayerControl
public class Dash: MonoBehaviour
{
public PlayerControl playerControl;
private void Awake()
{
playerControl = new PlayerControl();
}
private void OnEnable()
{
playerControl.Enable();
}
private void OnDisable()
{
playerControl.Disable();
}
}
3.获取Player的Scale并记录,设置滑行时的Scale
public float localYScale;
public float slideYScale;
public Vector3 localScale;
public Vector3 slideScale;
private void Start()
{
localYScale=player.transform.localScale.y;
localScale=new Vector3(player.transform.localScale.x, localYScale, player.transform.localScale.z);
//默认Scale
slideScale = new Vector3(player.transform.localScale.x, slideYScale, player.transform.localScale.z);
//滑行时Scale
}
4.设置滑行方向
Rigidbody rb;
bool canSlide;
bool isSlide;
Vector2 inputVector;
Vector3 slideVector;
private void Start()
{
rb = player.GetComponent<Rigidbody>();
canSlide = true;
playerControl.Player.Slide.started += SlideStart;
//为滑行注册事件
}
private void Update()
{
inputVector = playerControl.Player.Move.ReadValue<Vector2>();
}
private void SlideStart(InputAction.CallbackContext obj)
{
if(inputVector.x!=0|| inputVector.y != 0)
{
if (canSlide && inGround)
//确保滑行时Player在地面上
{
canSlide = false;
isSlide = true;
transform.localScale = slideScale;
//设置Player的Scale为滑行时Scale
slideVector = transform.right * inputVector.x + transform.forward * inputVector.y;
rb.AddForce(Vector3.down * 5f, ForceMode.Impulse);
//给Player一个向下的瞬时力,确保Player紧贴地面
}
}
}
5.开始滑行
public float slideForce;
public float slideTime;
public float slideTimer;
private void FixedUpdate()
{
if (isSlide)
{
Sliding();
}
}
private void Sliding()
{
rb.AddForce(slideVector.normalized * slideForce, ForceMode.Force);
//持续为Player施加力直到滑行时间到达所设定时间
slideTimer=slideTime;
slideTimer-=Time.deltaTime;
if (countTimer <= 0)
{
StopSlide();
}
}
private void StopSlide()
{
isSlide = false;
transform.localScale = localScale;
}
6.接触地面后重置滑行次数
private void ResetSlide()
{
if(inGround)
{
canSlide=true;
}
}
7. 设置好slideYScale,slideForce和slideTime保存后运行即可在地面上使用Ctrl键滑行。
本文详细介绍了如何在Unity中使用InputSystem配置移动(下蹲和冲刺)功能,包括创建C#脚本、绑定按键、控制玩家缩放和施加力。通过实例展示了如何编写Crouch和Slide功能的代码实现。

1356

被折叠的 条评论
为什么被折叠?



