4.士兵逻辑

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

×

喜欢就点赞,疼爱就打赏