Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一转换。翻译永不停止_C#_Unity3d_Transform - Fatal编程技术网

C# 统一转换。翻译永不停止

C# 统一转换。翻译永不停止,c#,unity3d,transform,C#,Unity3d,Transform,如果我不碰撞在场景中走动的模型(而不是播放器),脚本工作正常。 但是,如果使用角色控制器碰撞模型,则一旦到达等待动画状态,模型将继续移动 为什么会这样?我怎样才能修好它 public class MoveMan2 : MonoBehaviour { public float speed = 0.85f; public Animator anim; void Start() { anim = GetComponent<Animator

如果我不碰撞在场景中走动的模型(而不是播放器),脚本工作正常。
但是,如果使用角色控制器碰撞模型,则一旦到达等待动画状态,模型将继续移动

为什么会这样?我怎样才能修好它

    public class MoveMan2 : MonoBehaviour
{

    public float speed = 0.85f;
    public Animator anim;
    void Start()
    {
        anim = GetComponent<Animator>();
        InvokeRepeating("SetWalkMode",5.0f,20.0f);
    }

    void SetWalkMode()
    {
        anim.Play("SkitsWalk", -1, 0f);
    }

    void Update()
    {
        if (anim.GetCurrentAnimatorStateInfo(0).IsName("SkitsWalk"))
        {
            Debug.Log("Skits walking");
            transform.Translate(0, 0, speed * Time.deltaTime);
        }
        if (anim.GetCurrentAnimatorStateInfo(0).IsName("Wait"))
        {
            Debug.Log("Waiting");
        }
    }
}
public class MoveMan2:单一行为
{
公共浮子速度=0.85f;
公共动画;
void Start()
{
anim=GetComponent();
调用重复(“SetWalkMode”,5.0f,20.0f);
}
void SetWalkMode()
{
动画游戏(“SkitsWalk”,-1,0f);
}
无效更新()
{
if(anim.GetCurrentAnimatorStateInfo(0.IsName(“SkitsWalk”))
{
Log(“小品行走”);
transform.Translate(0,0,速度*时间.deltaTime);
}
if(anim.GetCurrentAnimatorStateInfo(0.IsName(“等待”))
{
Debug.Log(“等待”);
}
}
}

InvokeRepeating的第三个参数是再次调用指定方法的频率。因此Unity将每20秒调用一次SetWalkMode。当您的模型进入“等待”状态时,它将在20秒内通过此方法重置

当检测到碰撞时,可以设置一个变量(如bool),并在SetWalkMode方法中检查该变量

bool isObjectInCollision = false;

void EnterCollision()
{
    // do something
    isObjectInCollision = true;
}

void LeaveCollision()
{
    // do something
    isObjectInCollision = false;
}

void SetWalkMode()
{
    if (isObjectInCollision)
       return;
    anim.Play("SkitsWalk", -1, 0f);
}

这个物体有一个刚体附着在它上面吗?即使您没有在代码中移动对象,物理交互仍然适用。您尝试过这个吗?将
Translate
更改为
transform.Translate(0,0,speed*Time.deltaTime,Camera.main.transform)。我移除了刚体,现在它可以正常工作了。谢谢Serlite!