创建个动画
public Animator anim;
设置位置目标
private Vector3 target;
判定是否移动
private bool m_IsOver = true;
//封装目标位置
private bool isOver
{
get
{
return m_IsOver;
}
set
{
m_IsOver = value;
TargetGo.SetActive(!m_IsOver);
TargetGo.transform.position = target;
}
}
封装是否攻击
private bool m_attckOver = true;
private bool attckOver
{
get
{
return m_attckOver;
}
set
{
m_attckOver = value;
MagicGo.SetActive(!m_attckOver);
}
}
设置移动的速度
public float PlayerSpeed;
设置技能的速度
public float MagicSpeed;
鼠标点击位置生成的物体
public GameObject TargetGo;
技能物体
public GameObject MagicGo;
void Update()
{
如果按下W键
if (Input.GetKeyDown(KeyCode.W))
{
播放攻击动画
Attack();
生成攻击特效物体
GetMousePos();
}
如果按下左键
if (Input.GetMouseButtonDown(0))
{
获取射线的方法识别鼠标的位置
GetMousePos();
静止状态取消
isOver = false;
播放跑步动画
anim.SetBool("run", true);
攻击动画取消
attckOver = true;
}
}
获取鼠标位置让人物移动过去的方法
private void GetMousePos()
{
摄像机的射线照等于鼠标的位置
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
计算出方向
RaycastHit hitInfo = new RaycastHit();
射线的方向判定
if (Physics.Raycast(ray, out hitInfo))
{
如果射线点击的名字是plane面板
if (hitInfo.collider.name == "Plane")
{
位置等于射线的位置
target = hitInfo.point;
y左边为0
target.y = 0;
人物看向位置
transform.LookAt(target);
}
}
}
void FixedUpdate()
{
人物移动到位置
MoveTo(target);
}
攻击方法
private void Attack()
{播放攻击动画
anim.SetTrigger("attack");
技能物体的位置等于人物的位置
MagicGo.transform.position = transform.position;
开启移动
isOver = true;
取消播放动画
attckOver = false;
}
移动方法
private void MoveTo(Vector3 tar)
{
如果不是静止
if (!isOver)
{
人物的距离位置
Vector3 offSet = tar - transform.position;
位置相加
transform.position += offSet.normalized * PlayerSpeed * Time.deltaTime;
如果距离小于0.5
if (Vector3.Distance(tar, transform.position) < 0.5f)
{
播放跑步动画
anim.SetBool("run", false);
开启运动
isOver = true;
位置为鼠标的位置
transform.position = tar;
}
}
如果开始攻击
if (!attckOver)
{
距离等于鼠标位置减去技能的位置
Vector3 offSet = tar - MagicGo.transform.position;
实现技能的位置移动
MagicGo.transform.position += offSet.normalized * MagicSpeed * Time.deltaTime;
如果鼠标和技能之间的间距小于0.5
if (Vector3.Distance(tar, MagicGo.transform.position) < 0.5f)
{
攻击结束
attckOver = true;
技能位置等于鼠标位置
MagicGo.transform.position = tar;
}
}
}
}