本次修改unity的新输入输出系统。本次修改unity需要重启,请先保存项目,
点击加号起名为MyCtrl,
点击加号设置为一轴的,
继续设置W键,
保存
生成自动脚本,
修改MyPlayer代码:
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;//道具面板
public Transform skillPanel;//技能面板
CharacterController contro;
Controls action;
float rvalue;
float spdFast = 1;
bool isHold;//握刀
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
SetInput();
}
void SetInput(){
action = new Controls();
action.Enable();
action.MyCtrl.Move.started += Move;
action.MyCtrl.Move.performed += Move;
action.MyCtrl.Move.canceled += StopMove;
}
private void StopMove(InputAction.CallbackContext context){
Anim.SetBool("IsRun", false);
}
private void Move(InputAction.CallbackContext context){
if (GameManager.gameState != GameState.Play)
return;
Anim.SetBool("IsRun", true);
}
}
运行即可实现按键盘w/s键实现跑步松开即停止,
但只能实现动画,不能移动位置,
接下来添加跳跃:
修改MyPlayer代码:
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;//道具面板
public Transform skillPanel;//技能面板
//public BagPanel bag;//背包
CharacterController contro;
Controls action;
float rvalue;
float spdFast = 1;
bool isHold;//握刀
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
SetInput();
}
void SetInput(){
action = new Controls();
action.Enable();
action.MyCtrl.Move.started += Move;
action.MyCtrl.Move.performed += Move;
action.MyCtrl.Move.canceled += StopMove;
action.MyCtrl.Jump.started += Jump;
}
void Jump(InputAction.CallbackContext obj){
Anim.SetTrigger("JumpTrigger");
}
void StopMove(InputAction.CallbackContext context){
Anim.SetBool("IsRun", false);
}
void Move(InputAction.CallbackContext context){
if (GameManager.gameState != GameState.Play){
return;
}
Anim.SetBool("IsRun", true);
}
}
运行即可实现按键盘 空格 键实现跳跃,
但只能实现动画,
接下来设置旋转,
修改MyPlayer代码:
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;//道具面板
public Transform skillPanel;//技能面板
//public BagPanel bag;//背包
CharacterController contro;
Controls action;
float rvalue;
float spdFast = 1;
bool isHold;//握刀
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
SetInput();
}
void SetInput(){
action = new Controls();
action.Enable();
action.MyCtrl.Move.started += Move;
action.MyCtrl.Move.performed += Move;
action.MyCtrl.Move.canceled += StopMove;
action.MyCtrl.Jump.started += Jump;
action.MyCtrl.Rotate.started += Rotate;
action.MyCtrl.Rotate.performed += Rotate;
}
void Rotate(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
rvalue = obj.ReadValue<float>();
}
void Jump(InputAction.CallbackContext obj){
Anim.SetTrigger("JumpTrigger");
}
void StopMove(InputAction.CallbackContext context){
Anim.SetBool("IsRun", false);
}
void Move(InputAction.CallbackContext context){
if (GameManager.gameState != GameState.Play){
return;
}
Anim.SetBool("IsRun", true);
}
}
继续添加新输入系统:
修改MyPlayer代码:
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;//道具面板
public Transform skillPanel;//技能面板
//public BagPanel bag;//背包
CharacterController contro;
Controls action;
float rvalue;
float spdFast = 1;
bool isHold;//握刀
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
SetInput();
}
void SetInput(){
action = new Controls();
action.Enable();
action.MyCtrl.Move.started += Move;
action.MyCtrl.Move.performed += Move;
action.MyCtrl.Move.canceled += StopMove;
action.MyCtrl.Jump.started += Jump;
action.MyCtrl.Rotate.started += Rotate;
action.MyCtrl.Rotate.performed += Rotate;
action.MyCtrl.HoldRotate.performed += Hold;
action.MyCtrl.HoldRotate.canceled += Hold;
}
void Hold(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if(obj.phase == InputActionPhase.Canceled)
isHold = false;
else
isHold = true;
}
void Rotate(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
rvalue = obj.ReadValue<float>();
}
void Jump(InputAction.CallbackContext obj){
Anim.SetTrigger("JumpTrigger");
}
void StopMove(InputAction.CallbackContext context){
Anim.SetBool("IsRun", false);
}
void Move(InputAction.CallbackContext context){
if (GameManager.gameState != GameState.Play){
return;
}
Anim.SetBool("IsRun", true);
}
}
接下来设置速度,
修改MyPlayer代码:
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;//道具面板
public Transform skillPanel;//技能面板
//public BagPanel bag;//背包
CharacterController contro;
Controls action;
float rvalue;
float spdFast = 1;
bool isHold;//握刀
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
SetInput();
}
void SetInput(){
action = new Controls();
action.Enable();
action.MyCtrl.Move.started += Move;
action.MyCtrl.Move.performed += Move;
action.MyCtrl.Move.canceled += StopMove;
action.MyCtrl.Jump.started += Jump;
action.MyCtrl.Rotate.started += Rotate;
action.MyCtrl.Rotate.performed += Rotate;
action.MyCtrl.HoldRotate.performed += Hold;
action.MyCtrl.HoldRotate.canceled += Hold;
action.MyCtrl.Fast.started += FastSpeed;
action.MyCtrl.Fast.performed += FastSpeed;
action.MyCtrl.Fast.canceled += FastSpeed;
}
void FastSpeed(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_A") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_B")){
if (obj.phase == InputActionPhase.Canceled)
spdFast = 1;
else
spdFast = 0;
}
}
void Hold(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if(obj.phase == InputActionPhase.Canceled)
isHold = false;
else
isHold = true;
}
void Rotate(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
rvalue = obj.ReadValue<float>();
}
void Jump(InputAction.CallbackContext obj){
Anim.SetTrigger("JumpTrigger");
}
void StopMove(InputAction.CallbackContext context){
Anim.SetBool("IsRun", false);
}
void Move(InputAction.CallbackContext context){
if (GameManager.gameState != GameState.Play){
return;
}
Anim.SetBool("IsRun", true);
}
}
设置获取道具,
修改MyPlayer代码:
using System;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;//道具面板
public Transform skillPanel;//技能面板
//public BagPanel bag;//背包
CharacterController contro;
Controls action;
float rvalue;
float spdFast = 1;
bool isHold;//握刀
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
SetInput();
}
void SetInput(){
action = new Controls();
action.Enable();
action.MyCtrl.Move.started += Move;
action.MyCtrl.Move.performed += Move;
action.MyCtrl.Move.canceled += StopMove;
action.MyCtrl.Jump.started += Jump;
action.MyCtrl.Rotate.started += Rotate;
action.MyCtrl.Rotate.performed += Rotate;
action.MyCtrl.HoldRotate.performed += Hold;
action.MyCtrl.HoldRotate.canceled += Hold;
action.MyCtrl.Fast.started += FastSpeed;
action.MyCtrl.Fast.performed += FastSpeed;
action.MyCtrl.Fast.canceled += FastSpeed;
action.MyCtrl.GetTool.started += ClickNpcAndTool;
}
void ClickNpcAndTool(InputAction.CallbackContext obj){
//后期拓展
}
void FastSpeed(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_A") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_B")){
if (obj.phase == InputActionPhase.Canceled)
spdFast = 1;
else
spdFast = 0;
}
}
void Hold(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if(obj.phase == InputActionPhase.Canceled)
isHold = false;
else
isHold = true;
}
void Rotate(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
rvalue = obj.ReadValue<float>();
}
void Jump(InputAction.CallbackContext obj){
Anim.SetTrigger("JumpTrigger");
}
void StopMove(InputAction.CallbackContext context){
Anim.SetBool("IsRun", false);
}
void Move(InputAction.CallbackContext context){
if (GameManager.gameState != GameState.Play){
return;
}
Anim.SetBool("IsRun", true);
}
}
修改MyPlayer代码:
--------------------------------------------------【添加移动效果】-------------------------------------------------------
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;//道具面板
public Transform skillPanel;//技能面板
//public BagPanel bag;//背包
CharacterController contro;
Controls action;
float rvalue;
float spdFast = 1;
bool isHold;//握刀
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
SetInput();
//添加角色控制器
contro = GetComponent<CharacterController>();
}
void SetInput(){
action = new Controls();
action.Enable();
action.MyCtrl.Move.started += Move;
action.MyCtrl.Move.performed += Move;
action.MyCtrl.Move.canceled += StopMove;
action.MyCtrl.Jump.started += Jump;
action.MyCtrl.Rotate.started += Rotate;
action.MyCtrl.Rotate.performed += Rotate;
action.MyCtrl.HoldRotate.performed += Hold;
action.MyCtrl.HoldRotate.canceled += Hold;
action.MyCtrl.Fast.started += FastSpeed;
action.MyCtrl.Fast.performed += FastSpeed;
action.MyCtrl.Fast.canceled += FastSpeed;
action.MyCtrl.GetTool.started += ClickNpcAndTool;
}
void ClickNpcAndTool(InputAction.CallbackContext obj){
//后期拓展
}
void FastSpeed(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_A") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_B")){
if (obj.phase == InputActionPhase.Canceled)
spdFast = 1;
else
spdFast = 0;
}
}
void Hold(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if(obj.phase == InputActionPhase.Canceled)
isHold = false;
else
isHold = true;
}
void Rotate(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
rvalue = obj.ReadValue<float>();
}
void Jump(InputAction.CallbackContext obj){
Anim.SetTrigger("JumpTrigger");
}
void StopMove(InputAction.CallbackContext context){
Anim.SetBool("IsRun", false);
}
void Move(InputAction.CallbackContext context){
if (GameManager.gameState != GameState.Play){
return;
}
Anim.SetBool("IsRun", true);
}
void Ctrl() {
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_A") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_B") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Idle_ver_A") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Idle_Fight")) {
float f = action.MyCtrl.Move.ReadValue<float>();
contro.Move(transform.forward * f * Time.deltaTime * spdFast * Spd);
contro.Move(transform.up * -9.8f * Time.deltaTime);
if (isHold)
transform.Rotate(transform.up * rvalue * 0.3f);
}
}
void Update(){
if (GameManager.gameState != GameState.Play)
return;
Ctrl();
}
}
在unity场景中对Player添加角色控制器,
运行即可实现移动,
设置拔剑,
设置攻击,
修改MyPlayer代码:
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;//道具面板
public Transform skillPanel;//技能面板
//public BagPanel bag;//背包
CharacterController contro;
Controls action;
float rvalue;
float spdFast = 1;
bool isHold;//握刀
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
//添加角色控制器
contro = GetComponent<CharacterController>();
SetInput();
}
void SetInput(){
action = new Controls();
action.Enable();
action.MyCtrl.Move.started += Move;
action.MyCtrl.Move.performed += Move;
action.MyCtrl.Move.canceled += StopMove;
action.MyCtrl.Jump.started += Jump;
action.MyCtrl.Rotate.started += Rotate;
action.MyCtrl.Rotate.performed += Rotate;
action.MyCtrl.HoldRotate.performed += Hold;
action.MyCtrl.HoldRotate.canceled += Hold;
action.MyCtrl.Fast.started += FastSpeed;
action.MyCtrl.Fast.performed += FastSpeed;
action.MyCtrl.Fast.canceled += FastSpeed;
action.MyCtrl.GetTool.started += ClickNpcAndTool;
action.MyAtt.SwordOut.started += SwordOut;
action.MyAtt.Att.started += Attack;
}
void Attack(InputAction.CallbackContext obj){
//if (GameManager.gameState != GameState.Play)
// return;
//if (EventSystem.current.IsPointerOverGameObject())
// return;
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Idle_Fight")){
Anim.SetInteger("AttackID", 1);
Anim.SetTrigger("AttackTrigger");
}
else {
int num = Anim.GetInteger("AttackID");
if (num == 6)
return;
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Attack_" + num))
Anim.SetInteger("AttackID", num + 1);
}
}
public void PlayerAttack(string hurt) {
Collider[] cs = Physics.OverlapBox(attPoint.position, Vector3.one * 0.5f,
attPoint.rotation, LayerMask.GetMask("Enemy"));
if (cs.Length <= 0)
return;
int value = (int)(Att * Anim.GetInteger("AttackID") * 0.5f);
foreach (Collider c in cs) {
print(value);
}
}
void SwordOut(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
Anim.SetBool("IsSwordOut",!Anim.GetBool("IsSwordOut"));
}
void ClickNpcAndTool(InputAction.CallbackContext obj){
//后期拓展
}
void FastSpeed(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_A") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_B")){
if (obj.phase == InputActionPhase.Canceled)
spdFast = 1;
else
spdFast = 0;
}
}
void Hold(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
if(obj.phase == InputActionPhase.Canceled)
isHold = false;
else
isHold = true;
}
void Rotate(InputAction.CallbackContext obj){
if (GameManager.gameState != GameState.Play)
return;
rvalue = obj.ReadValue<float>();
}
void Jump(InputAction.CallbackContext obj){
Anim.SetTrigger("JumpTrigger");
}
void StopMove(InputAction.CallbackContext context){
Anim.SetBool("IsRun", false);
}
void Move(InputAction.CallbackContext context){
if (GameManager.gameState != GameState.Play){
return;
}
Anim.SetBool("IsRun", true);
}
void Ctrl() {
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_A") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Run_ver_B") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Idle_ver_A") ||
Anim.GetCurrentAnimatorStateInfo(0).IsName("Idle_Fight")) {
float f = action.MyCtrl.Move.ReadValue<float>();
contro.Move(transform.forward * f * Time.deltaTime * spdFast * Spd);
contro.Move(transform.up * -9.8f * Time.deltaTime);
if (isHold)
transform.Rotate(transform.up * rvalue * 0.3f);
}
}
void Update(){
if (GameManager.gameState != GameState.Play)
return;
Ctrl();
}
}
运行及实现,
w/s键控制前行后退,空格跳跃,鼠标右键转动视角,按E键进入战斗状态,可以进行攻击,左键连续点击实现连击效果,再按E键进入非战斗状态,不能进行攻击,
End.