标题:求教,这个自定义的C#类是如何工作的?
只看楼主
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
结帖率:72.22%
已结贴  问题点数:20 回复次数:2 
求教,这个自定义的C#类是如何工作的?
程序代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 动画行为类,提供有关动画的行为
/// </summary>
public class AnimationAction

{
    //附加在敌人上的动画组件引用
    private Animation anim;

    /// <summary>
    /// 创建动画行为类
    /// </summary>
    /// <param name="anim"></param>
    public AnimationAction(Animation anim)
    {
        this.anim = anim;
    }

    /// <summary>
    /// 播放动画
    /// </summary>
    /// <param name="animName"></param>
    public void Play(string animName)
    {
        anim.CrossFade(animName);
        //.........
    }

    /// <summary>
    /// 判断指定动画是否在播放
    /// </summary>
    /// <param name="animName"></param>
    /// <returns></returns>
     public bool IsPlaying(string animName)
    {
        return anim.IsPlaying(animName);
    }

}
这是一个用于Unity 3d 获取动画组件的辅助类,视频里讲,把模型挂在空物体下,脚本挂在空物体上,用一个脚本,获取模型上的动画,而这个类是用于辅助的,但我搞不懂它是怎么起作用的。
1,首先 AnimationAction()这个在做什么?
首先它应该是个构造函数(没有get,没有返回值),他需要被一个对象调用(点它),但是它在做什么?
this.anim = anim 是获取了一个Animation类型的引用,存储到自身的字段?
2,之后的 Play()用字段存储的对象,调用继承的CrossFade()方法,来播放动画
所以这个方法为的是省去每次书写么?

视频中的使用方法:
EnemyAnimation anim;
anim.action.Play(anim.runAnimName);

附action的定义入
程序代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 敌人动画,定义需要播放的动画片段名称
/// </summary>
public class EnemyAnimation : MonoBehaviour
{
    public string runAnimName;

    public string attackAnimName;

    /// <summary>
    /// 闲置
    /// </summary>
    public string idleAnimName;



    public string deathAnimName;

    public AnimationAction action;

    private void Awake()
    {
        action = new AnimationAction(GetComponentInChildren<Animation>());
    }


}




附2:对上面进行调用的脚本
程序代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 敌人AI
/// </summary>
[RequireComponent(typeof(EnemyAnimation))]
[RequireComponent(typeof(EnemyMotor))]
[RequireComponent(typeof(EnemyStatusInfo))]

public class EnemyAI : MonoBehaviour
{
    //定义敌人状态
    public enum State
    {
        //攻击
        Attack ,
        //寻路
        PathFinding

    }
    /// <summary>
    /// 敌人当前状态
    /// </summary>
    private State currentState = State.PathFinding;
    private EnemyAnimation anim;
    private EnemyMotor motor;

    private void Start()
    {
        anim = GetComponent<EnemyAnimation>();
        motor = GetComponent<EnemyMotor>();

    }

    private float atkTimer;
    /// <summary>
    /// 攻击间隔
    /// </summary>
    public float atkInterval = 3;
    private void Update()
    {
        //判断
        switch (currentState)
        {
            case State.PathFinding:
                PathFinding();
                break;

            case State.Attack:
                Attack();
                break;
        }

        //寻路,攻击
    }

    private void PathFinding()
    {
        anim.action.Play(anim.runAnimName);
        //执行寻路 调用motor类中寻路方法,播放跑步动画
        //如果寻路结束,修改状态为攻击

        if (motor.Pathfinding() == false) currentState = State.Attack;
    }

    private void Attack()
    {
        if (anim.action.IsPlaying(anim.attackAnimName) == false)
            anim.action.Play(anim.idleAnimName);
            //如果动画没有播放
            if (atkTimer <= Time.time)
            {
                //进行攻击 播放攻击动画
                anim.action.Play(anim.attackAnimName);
                atkTimer = Time.time + atkInterval;
            }
    }

}



[此贴子已经被作者于2019-7-22 22:03编辑过]

搜索更多相关主题的帖子: using 动画 public action private 
2019-07-22 21:31
S酱紫
Rank: 2
等 级:论坛游民
威 望:3
帖 子:25
专家分:20
注 册:2019-1-2
得分:20 
这个帖子是不是面向C#论坛的?(本人是萌新,不知道说什么好,求放过)
2019-07-23 22:44
S酱紫
Rank: 2
等 级:论坛游民
威 望:3
帖 子:25
专家分:20
注 册:2019-1-2
得分:0 
看到C#,果然灵敏想到unity3D,很不简单哩,但这些建议对着视频教程看看,得要自学。
(咱学校莫得unity3D学,最多只能靠自学咯,编程真是涉及到的东西太多啦)
2019-07-23 22:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-495993-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.583476 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved