14.士兵逻辑
4.1 知识点
创建一个名为 SoldierObj 的 MonoBehaviour 类,挂载到各个预制体的父对象上
public class SoldierObj : MonoBehaviour
{
}
定义动画组件,寻路组件,选中特效对象,并初始化获取
// 动画的切换
private Animator animator;
// 移动方法
private NavMeshAgent agent;
// 设置是否处于选中状态
private GameObject footEffect;
void Start()
{
// 初始化得到组件,animator是得到子对象的
animator = this.GetComponentInChildren<Animator>();
agent = this.GetComponent<NavMeshAgent>();
footEffect = this.transform.Find("FootEffect").gameObject;
SetSelSelf(false);
}
在 Update 中,通过寻路组件的速度觉得动画状态。定义给外部用的设置寻路地点和设置特效显示方法,特效初始时不显示
void Update()
{
// 根据当前的移动速度 决定动画时 待机 还是移动
animator.SetBool("IsMove", agent.velocity.magnitude > 0);
}
// 移动方法 传入目标点即可
public void Move(Vector3 pos)
{
agent.SetDestination(pos);
}
/// <summary>
/// 设置自己是否被选中 决定光圈是否显示
/// </summary>
/// <param name="isSel"></param>
public void SetSelSelf(bool isSel)
{
footEffect.SetActive(isSel);
}
4.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class SoldierObj : MonoBehaviour
{
//动画的切换
private Animator animator;
//移动方法
private NavMeshAgent agent;
//设置是否处于选中状态
private GameObject footEffect;
void Start()
{
//初始化得到组件,animator是得到子对象的
animator = this.GetComponentInChildren<Animator>();
agent = this.GetComponent<NavMeshAgent>();
footEffect = this.transform.Find("FootEffect").gameObject;
SetSelSelf(false);
}
void Update()
{
//根据当前的移动速度 决定动画时 待机 还是移动
animator.SetBool("IsMove", agent.velocity.magnitude > 0);
}
//移动方法 传入目标点即可
public void Move(Vector3 pos)
{
agent.SetDestination(pos);
}
/// <summary>
/// 设置自己是否被选中 决定光圈是否显示
/// </summary>
/// <param name="isSel"></param>
public void SetSelSelf(bool isSel)
{
footEffect.SetActive(isSel);
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com