132 lines
3.8 KiB
C#
132 lines
3.8 KiB
C#
![]() |
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.InputSystem;
|
||
|
using UnityEngine.InputSystem.Interactions;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
public class M_Player : MonoBehaviour
|
||
|
{
|
||
|
// Start is called before the first frame update
|
||
|
private IndexRecoder indexRecoder;//记录组件,内存方便修改的参数
|
||
|
private Vector2 velocity;//逻辑速度,通过计算获得,最后加在理论速度上
|
||
|
private Rigidbody2D m_rigidbody;//自身刚体组件
|
||
|
private int inputDir;//输入方向方向,-1\0\1
|
||
|
//public GameObject bullet;//子弹预制体
|
||
|
private int faceDir;//面部朝向,-1、1
|
||
|
private float runSpeedMultiple = 1f;//速度倍率,在按下和释放跑步后被修改
|
||
|
|
||
|
public Interactive catched;//所捕捉到的可交互对象
|
||
|
void Start()
|
||
|
{
|
||
|
//获取数值记录组件,方便策划修改暴露参数
|
||
|
indexRecoder = FindObjectOfType<IndexRecoder>();
|
||
|
//获取自身刚体组件
|
||
|
m_rigidbody = GetComponent<Rigidbody2D>();
|
||
|
//默认面部朝右
|
||
|
faceDir = 1;
|
||
|
}
|
||
|
|
||
|
// Update is called once per frame
|
||
|
void Update()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void FixedUpdate()
|
||
|
{
|
||
|
Move();
|
||
|
}
|
||
|
|
||
|
//当水平轴有输入
|
||
|
public void OnMoveHorizons(InputAction.CallbackContext context)
|
||
|
{
|
||
|
float value = context.ReadValue<float>();
|
||
|
//输入只有对移动方向和面部朝向的更改
|
||
|
if(value > 0)
|
||
|
{
|
||
|
inputDir = 1;
|
||
|
faceDir = 1;
|
||
|
}
|
||
|
|
||
|
else if(value < 0)
|
||
|
{
|
||
|
inputDir = -1;
|
||
|
faceDir = -1;
|
||
|
}
|
||
|
else inputDir = 0;
|
||
|
//修改面部朝向
|
||
|
transform.localScale = new Vector3(
|
||
|
Mathf.Abs(transform.localScale.x)*faceDir,
|
||
|
transform.localScale.y,
|
||
|
transform.localScale.z);
|
||
|
}
|
||
|
|
||
|
public void OnFire()
|
||
|
{
|
||
|
// GameObject temp = Instantiate(bullet,m_rigidbody.position,Quaternion.identity);
|
||
|
// temp.GetComponent<Bullet>().SetDir(faceDir);
|
||
|
}
|
||
|
|
||
|
private void Move()
|
||
|
{
|
||
|
//指定水平方向的速度
|
||
|
m_rigidbody.velocity = new Vector2(indexRecoder.playerMoveSpeed* //记录文件中的玩家速度乘以
|
||
|
inputDir*//输入的方向乘以
|
||
|
runSpeedMultiple,//速度的倍率,对付跑步时候的需要
|
||
|
m_rigidbody.velocity.y//y轴的速度不变
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
private void OnJump()
|
||
|
{
|
||
|
//跳的时候给一个垂直向上的速度
|
||
|
m_rigidbody.velocity = new Vector2(0,indexRecoder.playerJumpSpeed);
|
||
|
}
|
||
|
|
||
|
public void OnRun(InputAction.CallbackContext context)
|
||
|
{
|
||
|
if(context.started)//如果刚按下跑步键
|
||
|
{
|
||
|
runSpeedMultiple = indexRecoder.runSpeedMultiple;//把本地的速度倍率变成数值记录器中的倍率
|
||
|
}
|
||
|
else if(context.canceled)//如果刚松开跑步键
|
||
|
{
|
||
|
runSpeedMultiple = 1f;//恢复本地速度倍率为1
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void OnInteraction(InputAction.CallbackContext context)
|
||
|
{
|
||
|
if(context.started)
|
||
|
{
|
||
|
if(catched != null)
|
||
|
{
|
||
|
catched.ShowInfo();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void OnCoding(InputAction.CallbackContext context)
|
||
|
{
|
||
|
if(context.canceled)
|
||
|
{
|
||
|
if(catched != null)
|
||
|
{
|
||
|
if(context.duration < indexRecoder.dotRoLineTime)//如果小于界限时间
|
||
|
{
|
||
|
catched.Coding(".");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
catched.Coding("-");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|