188 lines
4.6 KiB
C#
188 lines
4.6 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Diagnostics;
|
||
using UnityEngine;
|
||
using DG.Tweening;
|
||
using Debug = UnityEngine.Debug;
|
||
|
||
|
||
public enum minerState
|
||
{
|
||
stand,
|
||
move,
|
||
dig
|
||
}
|
||
|
||
public class minerControl : MonoBehaviour
|
||
{
|
||
[Header("会find,要有")]
|
||
public SpriteAniationpro myAni;
|
||
[Header("会find")]
|
||
public List<Path> paths;
|
||
//航行时间
|
||
[Header("走路时间,会find")]
|
||
public float pathsNeedTimer = 30f;
|
||
//捕鱼时间
|
||
[Header("挖矿时间,会find")]
|
||
public float fishingNeedTimer = 30f;
|
||
//休息时间
|
||
[Header("休息时间,会find")]
|
||
public float restTimer = 5f;
|
||
|
||
|
||
|
||
|
||
[Header("精灵生成点,会find")]
|
||
public Transform startPos;
|
||
[Header("精灵终点,会find")]
|
||
public Transform endPos;
|
||
|
||
|
||
|
||
[Range(0f, 1f)]
|
||
public float probabilityOfStand = 0.2f;//站立状态
|
||
[Header("精灵走路的概率")]
|
||
[Range(0f, 1f)]
|
||
public float probabilityOfWalk = 0.3f;//走路状态
|
||
[Header("精灵挖矿的概率")]
|
||
[Range(0f, 1f)]
|
||
public float probabilityOfDig = 0.5f;//挖矿状态
|
||
|
||
// Start is called before the first frame update
|
||
void Awake()
|
||
{
|
||
myAni = transform.GetComponent<SpriteAniationpro>();
|
||
if (myAni==null)
|
||
{
|
||
Debug.LogError("myAni==null");
|
||
}
|
||
}
|
||
|
||
|
||
public void init(List<Path> path,float pathsNeedTimer,float fishingNeedTimer,float restTimer,Transform startPos,Transform endPos)
|
||
{
|
||
this.paths = path;
|
||
this.pathsNeedTimer = pathsNeedTimer+Random.Range(0,10);
|
||
this.fishingNeedTimer = fishingNeedTimer;
|
||
this.restTimer = restTimer;
|
||
this.startPos = startPos;
|
||
this.endPos = endPos;
|
||
|
||
|
||
|
||
if (Vector3.Distance(this.transform.position, startPos.position) <= 0.01f)
|
||
{
|
||
//Debug.LogWarning("11111111111111");
|
||
MoveToFishingPos();
|
||
}
|
||
else
|
||
{
|
||
// Debug.LogWarning("22222222222222222");
|
||
dig();
|
||
}
|
||
}
|
||
|
||
public void SetState(minerState newState)
|
||
{
|
||
switch (newState)
|
||
{
|
||
case minerState.stand:
|
||
myAni.SetAni(0);
|
||
break;
|
||
case minerState.move:
|
||
myAni.SetAni(1);
|
||
break;
|
||
case minerState.dig:
|
||
myAni.SetAni(2);
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
void MoveToFishingPos()
|
||
{
|
||
|
||
// 随机选择一条路径
|
||
Path selectedPath = paths[Random.Range(0, paths.Count)];
|
||
|
||
|
||
// 移动到挖矿点
|
||
StartCoroutine(MoveToFishingPoint(selectedPath.pathPoints));
|
||
|
||
}
|
||
|
||
|
||
|
||
IEnumerator MoveToFishingPoint(List<Transform> path)
|
||
{
|
||
// 将路径点转换为 Vector3 数组
|
||
Vector3[] pathPoints = new Vector3[path.Count];
|
||
for (int i = 0; i < path.Count; i++)
|
||
{
|
||
pathPoints[i] = path[i].position;
|
||
}
|
||
|
||
//改变朝向
|
||
ChangeShipLook(pathPoints[0], pathPoints[path.Count - 1]);
|
||
|
||
|
||
|
||
//动作变化,移动
|
||
//fishManShipContorl.SetAni(1);
|
||
SetState(minerState.move);
|
||
|
||
// 使用 DOPath 沿着路径移动到捕鱼点,并禁用旋转变化
|
||
yield return transform.DOPath(pathPoints, pathsNeedTimer, PathType.CatmullRom)
|
||
.SetOptions(false) // 禁用旋转
|
||
.SetEase(Ease.InOutSine)
|
||
.WaitForCompletion();
|
||
//挖矿
|
||
dig();
|
||
}
|
||
|
||
void dig()
|
||
{
|
||
//动作变化,捕鱼
|
||
//fishManShipContorl.SetAni(2);
|
||
SetState(minerState.dig);
|
||
StartCoroutine(movetoStatrPos());
|
||
}
|
||
|
||
IEnumerator movetoStatrPos()
|
||
{
|
||
yield return new WaitForSeconds(3);
|
||
Debug.Log("朝向左边");
|
||
transform.rotation = Quaternion.Euler(0, 180, 0);
|
||
SetState(minerState.move);
|
||
Vector3[] ve = { endPos.position, startPos.position };
|
||
// 使用 DOPath 沿着路径移动到捕鱼点,并禁用旋转变化
|
||
yield return transform.DOPath(ve, pathsNeedTimer, PathType.CatmullRom)
|
||
.SetOptions(false) // 禁用旋转
|
||
.SetEase(Ease.InOutSine)
|
||
.WaitForCompletion();
|
||
|
||
SetState(minerState.stand);
|
||
yield return new WaitForSeconds(3);
|
||
MoveToFishingPos();
|
||
}
|
||
|
||
|
||
|
||
|
||
//根据前后位置改变朝向
|
||
void ChangeShipLook(Vector3 _startpos, Vector3 _endpos)
|
||
{
|
||
if (_startpos.x > _endpos.x)
|
||
{
|
||
Debug.Log("朝向左边");
|
||
transform.rotation = Quaternion.Euler(0, 180, 0);
|
||
}
|
||
else
|
||
{
|
||
Debug.Log("朝向右边");
|
||
transform.rotation = Quaternion.Euler(0, 0, 0);
|
||
}
|
||
|
||
}
|
||
}
|