2023-01-05 00:28:20 +08:00
|
|
|
|
using Axibug;
|
|
|
|
|
using Axibug.Runtime;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
2023-01-05 18:32:58 +08:00
|
|
|
|
using UnityEngine.XR;
|
2023-01-05 00:28:20 +08:00
|
|
|
|
|
|
|
|
|
namespace Game
|
|
|
|
|
{
|
|
|
|
|
public abstract class RoleBase : MonoBehaviour
|
|
|
|
|
{
|
2023-01-05 18:32:58 +08:00
|
|
|
|
public E_NODE_TYPE RoleType => mBaseData.RoleType;
|
2023-01-09 00:17:20 +08:00
|
|
|
|
public int RoleID => mBaseData.innate.roleid;
|
|
|
|
|
public S_ROLE_DATA_BASE BaseData => mBaseData;
|
|
|
|
|
|
2023-01-05 18:32:58 +08:00
|
|
|
|
public ICharMachineBase Anime => mAnime;
|
2023-01-07 23:24:18 +08:00
|
|
|
|
|
|
|
|
|
public Animator AttackBoxAnime;
|
|
|
|
|
public AttackBox AttackBoxCollider;
|
|
|
|
|
|
2023-01-05 18:32:58 +08:00
|
|
|
|
public Vector2 InputV2;
|
2023-01-09 23:13:17 +08:00
|
|
|
|
|
2023-01-09 00:17:20 +08:00
|
|
|
|
public E_ONCEATTACK_STEP AttackStep = E_ONCEATTACK_STEP.None;
|
2023-01-05 00:28:20 +08:00
|
|
|
|
|
2023-01-07 23:24:18 +08:00
|
|
|
|
public Transform ModelTransfrom { get { return mModelTransfrom; } }
|
|
|
|
|
public Transform BridgeTransfrom { get { return mBridgeTransfrom; } }
|
|
|
|
|
|
2023-01-05 00:28:20 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
2023-01-05 18:32:58 +08:00
|
|
|
|
protected ICharMachineBase mAnime;
|
2023-01-05 00:28:20 +08:00
|
|
|
|
|
2023-01-05 18:32:58 +08:00
|
|
|
|
protected S_ROLE_DATA_BASE mBaseData;
|
|
|
|
|
|
2023-01-06 00:14:59 +08:00
|
|
|
|
protected Transform mBridgeTransfrom;
|
|
|
|
|
protected Transform mModelTransfrom;
|
|
|
|
|
protected Rigidbody mRigidbody;
|
2023-01-09 00:17:20 +08:00
|
|
|
|
protected Collider mselfCollider;
|
2023-01-05 18:32:58 +08:00
|
|
|
|
|
2023-01-06 00:14:59 +08:00
|
|
|
|
|
|
|
|
|
protected virtual void Awake()
|
2023-01-05 18:32:58 +08:00
|
|
|
|
{
|
2023-01-06 00:14:59 +08:00
|
|
|
|
mBridgeTransfrom = transform.Find("Bridge");
|
|
|
|
|
mModelTransfrom = mBridgeTransfrom.Find("Model");
|
2023-01-09 00:17:20 +08:00
|
|
|
|
mselfCollider = transform.GetComponent<Collider>();
|
2023-01-06 00:14:59 +08:00
|
|
|
|
mRigidbody = transform.GetComponent<Rigidbody>();
|
|
|
|
|
}
|
2023-01-05 18:32:58 +08:00
|
|
|
|
|
2023-01-06 00:14:59 +08:00
|
|
|
|
protected virtual void OnEnable()
|
|
|
|
|
{
|
2023-01-09 23:13:17 +08:00
|
|
|
|
IsMove = false;
|
|
|
|
|
IsLeft = false;
|
2023-01-05 18:32:58 +08:00
|
|
|
|
|
2023-01-09 00:17:20 +08:00
|
|
|
|
AttackStep = E_ONCEATTACK_STEP.None;
|
2023-01-07 23:24:18 +08:00
|
|
|
|
|
2023-01-06 00:14:59 +08:00
|
|
|
|
MeshChangeDir(mIsLeft);
|
|
|
|
|
}
|
2023-01-07 23:24:18 +08:00
|
|
|
|
protected virtual void OnDisable()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
2023-01-05 00:28:20 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><>ʼ<EFBFBD><CABC>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="data"></param>
|
|
|
|
|
public virtual void Init(S_ROLE_DATA_BASE data)
|
|
|
|
|
{
|
2023-01-05 18:32:58 +08:00
|
|
|
|
mBaseData = data;
|
|
|
|
|
if (RoleType == E_NODE_TYPE.N_MAINPLAYER)
|
2023-01-05 00:28:20 +08:00
|
|
|
|
{
|
2023-01-05 18:32:58 +08:00
|
|
|
|
mAnime = new CharacterMachine();
|
2023-01-09 23:13:17 +08:00
|
|
|
|
mAnime.InitMachine(mModelTransfrom, data);
|
2023-01-05 00:28:20 +08:00
|
|
|
|
}
|
2023-01-05 18:32:58 +08:00
|
|
|
|
else if (RoleType == E_NODE_TYPE.N_MONSTER)
|
2023-01-05 00:28:20 +08:00
|
|
|
|
{
|
2023-01-09 00:17:20 +08:00
|
|
|
|
mAnime = new CharacterMachine();
|
|
|
|
|
mAnime.InitMachine(mModelTransfrom, data);
|
2023-01-05 00:28:20 +08:00
|
|
|
|
}
|
2023-01-05 18:32:58 +08:00
|
|
|
|
else if (RoleType == E_NODE_TYPE.N_NPC)
|
2023-01-05 00:28:20 +08:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-07 23:24:18 +08:00
|
|
|
|
public virtual void SetAttackBoxAnime(Animator attackBoxAnime)
|
|
|
|
|
{
|
|
|
|
|
AttackBoxAnime = attackBoxAnime;
|
|
|
|
|
AttackBoxCollider = attackBoxAnime.transform.Find("Node1/Box1").GetComponent<AttackBox>();
|
|
|
|
|
AttackBoxCollider.InitNode(this);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-06 00:14:59 +08:00
|
|
|
|
protected virtual void Update()
|
|
|
|
|
{
|
2023-01-09 23:13:17 +08:00
|
|
|
|
Update_Move();
|
|
|
|
|
}
|
|
|
|
|
protected virtual void FixedUpdate()
|
|
|
|
|
{
|
|
|
|
|
FixedUpdate_Move();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public abstract void MeshChangeMoveState(bool ToMoveState);
|
|
|
|
|
|
|
|
|
|
public void MeshChangeDir(bool ToLeftDir)
|
|
|
|
|
{
|
|
|
|
|
mBridgeTransfrom.localEulerAngles = ToLeftDir ? ConstClass.Angle_LeftDir : ConstClass.Angle_RightDir;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public abstract void Release();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region <EFBFBD>ƶ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
private bool mIsMove = false;
|
|
|
|
|
public float MoveTime = 0;
|
|
|
|
|
|
|
|
|
|
public bool IsMove
|
|
|
|
|
{
|
|
|
|
|
get { return mIsMove; }
|
|
|
|
|
set{ if (mIsMove != value)
|
|
|
|
|
{
|
|
|
|
|
mIsMove = value;
|
|
|
|
|
if (value)//<2F>տ<EFBFBD>ʼ<EFBFBD>ƶ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
MoveTime = 0;
|
|
|
|
|
MeshChangeMoveState(true);
|
|
|
|
|
}
|
|
|
|
|
else//<2F><>ֹͣ<CDA3>ƶ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
MoveTime = 0;
|
|
|
|
|
Move_currentVector = Vector3.zero;//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
MeshChangeMoveState(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
private bool mIsLeft = false;
|
|
|
|
|
public bool IsLeft
|
|
|
|
|
{
|
|
|
|
|
get { return mIsLeft; }
|
|
|
|
|
set{ if (mIsLeft != value)
|
|
|
|
|
{
|
|
|
|
|
mIsLeft = value;
|
|
|
|
|
MoveTime = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD>仯ʱ<E4BBAF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
if (value)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
MeshChangeDir(true);
|
|
|
|
|
else//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
MeshChangeDir(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void Update_Move()
|
|
|
|
|
{
|
|
|
|
|
bool isDoMove = false;
|
2023-01-06 00:14:59 +08:00
|
|
|
|
|
2023-01-09 00:17:20 +08:00
|
|
|
|
if (AttackStep != E_ONCEATTACK_STEP.None)
|
2023-01-06 17:55:47 +08:00
|
|
|
|
{
|
2023-01-09 23:13:17 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͳ<EFBFBD><CDB2>ƶ<EFBFBD>
|
2023-01-06 17:55:47 +08:00
|
|
|
|
}
|
2023-01-07 23:24:18 +08:00
|
|
|
|
else
|
2023-01-06 00:14:59 +08:00
|
|
|
|
{
|
2023-01-07 23:24:18 +08:00
|
|
|
|
if (InputV2 != Vector2.zero)
|
|
|
|
|
{
|
2023-01-09 23:13:17 +08:00
|
|
|
|
isDoMove = true;
|
|
|
|
|
Move_currentVector = new Vector3(InputV2.x, 0, InputV2.y);
|
2023-01-07 23:24:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//AxibugLog.Debug("Move_currentVector =>" + Move_currentVector);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
if (InputV2.x < 0)
|
2023-01-09 23:13:17 +08:00
|
|
|
|
IsLeft = true;
|
2023-01-07 23:24:18 +08:00
|
|
|
|
else if (InputV2.x > 0)
|
2023-01-09 23:13:17 +08:00
|
|
|
|
IsLeft = false;
|
2023-01-06 00:14:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-09 23:13:17 +08:00
|
|
|
|
IsMove = isDoMove;
|
2023-01-06 00:14:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20>ٶ<EFBFBD>
|
|
|
|
|
/// </summary>
|
2023-01-09 23:13:17 +08:00
|
|
|
|
protected float Move_BaseSpeed = 3.5f;
|
|
|
|
|
protected float Move_SpeedMultiplier = 1f;
|
2023-01-06 00:14:59 +08:00
|
|
|
|
private Vector3 Move_currentVector;
|
|
|
|
|
|
2023-01-09 23:13:17 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20>ƶ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
/// </summary>
|
2023-01-06 00:14:59 +08:00
|
|
|
|
void FixedUpdate_Move()
|
|
|
|
|
{
|
2023-01-09 23:13:17 +08:00
|
|
|
|
if (IsMove) MoveTime += Time.deltaTime;
|
|
|
|
|
|
2023-01-06 00:14:59 +08:00
|
|
|
|
Vector3 _playerPos = mRigidbody.position;
|
2023-01-09 23:13:17 +08:00
|
|
|
|
_playerPos += Move_currentVector * Move_BaseSpeed * Move_SpeedMultiplier * Time.deltaTime;
|
2023-01-06 00:14:59 +08:00
|
|
|
|
mRigidbody.MovePosition(_playerPos);
|
2023-01-07 23:24:18 +08:00
|
|
|
|
//AxibugLog.Debug("FixedUpdate_Move =>" + _playerPos);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
public void DoAtkBox(string AtkBoxAnimeName)
|
|
|
|
|
{
|
|
|
|
|
AttackBoxAnime.Play(AtkBoxAnimeName);
|
2023-01-06 00:14:59 +08:00
|
|
|
|
}
|
|
|
|
|
#endregion
|
2023-01-05 00:28:20 +08:00
|
|
|
|
}
|
|
|
|
|
}
|