【Unity动画】综合案例完结-控制角色动作播放+声音配套

这个案例实现的动作并不复杂,主要包含一个 跳跃动作、攻击动作、还有一个包含三个动画状态的动画混合树。然后设置三个参数来控制切换。

状态机结构如下:

完整代码

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GirlAnimacON : MonoBehaviour
{
    AudioSource OneAudioSour;
    public AudioClip RunVoiceClip;
    public AudioClip JumpVoiceClip;
    public AudioClip AttackVoiceClip;

    // 这个脚本实现控制角色动画播放以及声音播放
    Animator GirlsAnimator;
    float SpeedGirlsMove;

    bool TunMove=false;
    int TunMo = 0;
    void Start()
    {
        OneAudioSour = this.GetComponent<AudioSource>();
        GirlsAnimator = this.GetComponent<Animator>();
        //游戏初始化
        GirlsAnimator.SetBool("MoveBlend", false);
        GirlsAnimator.SetBool("Jump", false);
        GirlsAnimator.SetBool("Attack", false);
        TunMove = false;
        SpeedGirlsMove = 0f;
    }
  
    void Update()
    {
        ControllAnima();
    }
    /// <summary>
    /// 控制Player动画
    /// </summary>
    void ControllAnima()
    {
        if (Input.GetKey(KeyCode.W))
        {
            TunMove = false;//开关
            TunMo = 0;//开关
            //  开始移动动画的播放
            GirlsAnimator.SetBool("MoveBlend", true);
            SpeedGirlsMove += 0.1f;
            SpeedGirlsMove = Mathf.Clamp(SpeedGirlsMove, 0f, 20f);//限制最大最小数值
        }
        //else if (!Input.GetKey(KeyCode.W))
        //{
        //    SpeedGirlsMove -= 0.1f;
        //    SpeedGirlsMove = Mathf.Clamp(SpeedGirlsMove, 0f, 20f);//限制最大最小数值
        //}
        //--------------------------------
        if (Input.GetKeyUp(KeyCode.W))
        {//只执行一次
            TunMove = true;
            TunMo = 1;
        }
        if (TunMove)
        {
            SpeedGirlsMove -= 0.1f;
            SpeedGirlsMove = Mathf.Clamp(SpeedGirlsMove, 0f, 20f);//限制最大最小数值
        }

        GirlsAnimator.SetFloat("MoveSpeed", SpeedGirlsMove);


        //------------------------------------------------控制其他动画-----------------------
        if (GirlsAnimator.GetCurrentAnimatorStateInfo(0).IsName("MoveBlend"))
        {
            GirlsAnimator.SetBool("MoveBlend", false);
        }

        //------------------------------------------------控制其他动画-----------------------

        if (Input.GetKeyDown(KeyCode.Space))
        {

            //  开始跳跃动画的播放
            GirlsAnimator.SetBool("Jump", true);
            OneAudioSour.clip = AttackVoiceClip;//修改默认声音片段到组件中
            OneAudioSour.Play();//播放声音
        }

        if (GirlsAnimator.GetCurrentAnimatorStateInfo(0).IsName("JUMP"))
        {
            GirlsAnimator.SetBool("Jump", false);
        }
        //------------------------------------------------控制gongji动画-----------------------
        if (Input.GetMouseButtonDown(0))
        {
            //  开始攻击动画的播放
            GirlsAnimator.SetBool("Attack", true);
            OneAudioSour.clip = AttackVoiceClip;
            OneAudioSour.Play();
            //OneAudioSour.PlayOneShot(AttackVoiceClip);

        }
        if (GirlsAnimator.GetCurrentAnimatorStateInfo(0).IsName("Attack"))
        {
            GirlsAnimator.SetBool("Attack", false);
        }
        //------------------------------------------------控制其他动画-----------------------
    }
    public void PlayRunVoice1()
    {
        Debug.Log("跑步动画播到15帧了!开始播放跑步声音");
        OneAudioSour.clip = RunVoiceClip;
        OneAudioSour.Play();
    }
    public void PlayRunVoice2()
    {
        OneAudioSour.clip = RunVoiceClip;
        OneAudioSour.Play();
        Debug.Log("跑步动画播到30帧了!开始播放跑步声音");
    }

}
相关推荐
omegayy17 小时前
Unity 2022.3.x部分Android设备播放视频黑屏问题
android·unity·视频播放·黑屏
虾球xz20 小时前
游戏引擎学习第200天
学习·游戏引擎
woshihedayu21 小时前
虚幻引擎控制角色跟随移动方向旋转的方法
游戏引擎·虚幻
虾球xz1 天前
游戏引擎学习第199天
学习·游戏引擎
与火星的孩子对话1 天前
Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发
人工智能·unity·c#·游戏引擎·语音识别·宠物
向宇it1 天前
【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍
开发语言·游戏·unity·c#·编辑器·游戏引擎
牙膏上的小苏打23332 天前
Unity Surround开关后导致获取主显示器分辨率错误
unity·主屏幕
Unity大海2 天前
诠视科技Unity SDK开发环境配置、项目设置、apk打包。
科技·unity·游戏引擎
浅陌sss2 天前
Unity中 粒子系统使用整理(一)
unity·游戏引擎
维度攻城狮2 天前
实现在Unity3D中仿真汽车,而且还能使用ros2控制
python·unity·docker·汽车·ros2·rviz2