C# 在统一中混合动画

C# 在统一中混合动画,c#,unity3d,C#,Unity3d,我现在有一个剧本,当玩家与一只鹿保持一定距离时,这只鹿就会跑开攻击我的玩家。我让它空闲,然后使用if语句将其动画更改为运行。然而,我想然后混合到hornAttack1_u当它到达我的球员,但我不能让这工作。谢谢你的帮助这是我的剧本 using UnityEngine; using System.Collections; public class EnemyMovement : MonoBehaviour { CharacterController _controller; Transf

我现在有一个剧本,当玩家与一只鹿保持一定距离时,这只鹿就会跑开攻击我的玩家。我让它空闲,然后使用if语句将其动画更改为运行。然而,我想然后混合到hornAttack1_u当它到达我的球员,但我不能让这工作。谢谢你的帮助这是我的剧本

using UnityEngine;
using System.Collections;

 public class EnemyMovement : MonoBehaviour
 {
 CharacterController _controller;
 Transform _player;

[SerializeField]
    float _moveSpeed = 5.0f;

[SerializeField]
    float _gravity = 2.0f;

    float _yvelocity = 0.0f;
// max distance enemy can be before he moves towards you    
public int maxDistance;


 void Start()
{
        GameObject playerGameObject = GameObject.FindGameObjectWithTag("Player");
 _player = playerGameObject.transform;

 _controller = GetComponent<CharacterController>();

 maxDistance = 15;



 }

 void Update()
 {
        Vector3 direction = _player.position - transform.position;

        transform.rotation = Quaternion.LookRotation(direction);


        Vector3 velocity = direction * _moveSpeed;

        if (!_controller.isGrounded)
        {
            _yvelocity -= _gravity;
        }

        velocity.y = _yvelocity;

        direction.y =0;

        if (Vector3.Distance(_player.position, transform.position) > maxDistance) {
            animation.CrossFade("idle1_");
            }
     if (Vector3.Distance(_player.position, transform.position) < maxDistance) {

        _controller.Move(velocity*Time.deltaTime);
        animation.Blend("run_");
        animation.Blend ("hornAttack1_");

        }

    }


    }
使用UnityEngine;
使用系统集合;
公共阶层的复仇运动:单一行为
{
CharacterController\u控制器;
转换玩家;
[序列化字段]
浮动速度=5.0f;
[序列化字段]
浮子重力=2.0f;
浮动_yvelocity=0.0f;
//在敌人向你移动之前,他可以到达的最大距离
公共距离;
void Start()
{
GameObject playerGameObject=GameObject.FindGameObjectWithTag(“玩家”);
_player=playerGameObject.transform;
_控制器=GetComponent();
最大距离=15;
}
无效更新()
{
矢量3方向=_player.position-transform.position;
transform.rotation=四元数.LookRotation(方向);
矢量3速度=方向*\u移动速度;
如果(!\u控制器接地)
{
_yvelocity-=\u重力;
}
速度y=_yvelocity;
方向y=0;
if(向量3.距离(_player.position,transform.position)>最大距离){
动画。交叉淡入(“idle1_”);
}
if(向量3.距离(_player.position,transform.position)
我试过这个

if (Vector3.Distance(_player.position, transform.position) > maxDistance) {
            animation.CrossFade("idle1_");
            }
     if (Vector3.Distance(_player.position, transform.position) < maxDistance) {

        _controller.Move(velocity*Time.deltaTime);
        animation.CrossFade("run_");


        }

    if (Vector3.Distance(_player.position, transform.position) < maxDistance && (Vector3.Distance(_player.position, transform.position) < attackDistance)) {
        animation.Blend("hornAttack1_");
    }
    }

    }
if(Vector3.Distance(_player.position,transform.position)>maxDistance){
动画。交叉淡入(“idle1_”);
}
if(向量3.距离(_player.position,transform.position)

动画不会改变,而且会一直延迟您可以使用
Animator Controller
来控制您的状态,将
参数设置为您的状态,例如
空闲
运行
喇叭攻击
,然后在脚本中只需调用
anim.SetTrigger(“运行”)anim.SetTrigger(“喇叭攻击”)当它到达播放器时

你尝试了什么,什么不起作用?我尝试添加另一个名为attackDistance的变量,并进行了另一个if循环和put play the horn攻击,但它一直在运行我添加了我在上面尝试过的代码尝试在maxDistance上使用float而不是int,因为所有其他数据类型也都是float,舍入错误可能导致动画滞后。是否有需要使用动画的原因。混合??您仍然可以使用Crossfade,它会起作用。试试动画。交叉淡入(“hornAttack1”,0.5f)。这将在0.5f秒以上融入新动画。