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