【问题标题】:Why the characters never slow down when getting close to a specific object(target)?为什么靠近特定物体(目标)时角色从不减速?
【发布时间】:2018-12-14 10:10:23
【问题描述】:

我有一个带有此脚本的空游戏对象:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimatorController : MonoBehaviour
{
    public Animator[] animators;
    public Transform target;
    public float speed = 1f;

    float sp = 0f;

    // Use this for initialization
    void Start ()
    {
        for(int i = 0; i < animators.Length; i++)
        {
            animators[i].SetFloat("Walking Speed", speed);
        }
    }

    // Update is called once per frame
    void Update ()
    {
        if((animators[2].transform.position - target.position).sqrMagnitude < 3)
        {
            sp += Time.deltaTime;
            sp = Mathf.Clamp(sp, 0f, 1f);
            animators[1].SetFloat("Walking Speed", sp);
            animators[2].SetFloat("Walking Speed", sp);
        }
    }
}

我有 3 个角色,每个角色都有一个动画控制器。 每个动画师都有一个新的状态名称与 Humanoid walk 一起行走。 每个动画师都有一个浮动参数名称,在每个动画师中将其设置为 1.0

在检查器中,我为每个动画师状态添加了步行速度参数。 但是3个角色在接近目标时从不减速。

在屏幕截图中,每个士兵都有:Space_Soldier_A (4) 和 Space_Soldier_A (5) 具有相同的动画控制器和步行速度参数。

medea_m_arrebola 有它自己的动画控制器,还带有一个行走速度浮动参数。与士兵的设置相同。 所有角色都在行走,但在接近目标时他们从不减速。

我想要为这个想法做的是当动画师[2]中的角色有点向前然后其他两个 medea_m_arrebola 在 3 距离处接近目标然后开始减速并在距离 0.5 处停止来自目标。

这是一个可行的解决方案,但如果我想让角色在特定距离处停止步行速度 0 怎么办?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimatorController : MonoBehaviour
{
    public Animator[] animators;
    public Transform target;
    public float speed = 1f;

    // Use this for initialization
    void Start()
    {
        for (int i = 0; i < animators.Length; i++)
        {
            animators[i].SetFloat("Walking Speed", speed);
        }
    }

    // Update is called once per frame
    void Update()
    {
        float distanceFromTarget = Vector3.Distance(animators[2].transform.position, target.position);
        if (distanceFromTarget < 15 && distanceFromTarget > 1)
        {
            float speed = (distanceFromTarget / 15) / 1;
            for (int i = 0; i < animators.Length; i++)
            {
                if (speed <= 0.1f)
                {
                    animators[i].SetFloat("Walking Speed", 0);
                }
                else
                {
                    animators[i].SetFloat("Walking Speed", speed);
                }
            }
        }
    }
}

如果速度为 0.1 或更低,我尝试将速度设置为 0:

if (speed <= 0.1f)
                {
                    animators[i].SetFloat("Walking Speed", 0);
                }

但它不起作用,角色继续行走。 不知道如何通过速度到距离来做到这一点,例如,如果速度为 0.1 或更小,或者距离为 1 或更小。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    所以这就像我将如何解决这个问题,以我知道的最简单的方式。 您必须添加自己的逻辑来处理您希望它们如何完全停止。 (即当速度 停止时),但这应该让你非常接近。

                public void Update()
        {
            float distanceFromTarget = Vector3.Distance(transform.position, target.position);
            if ( distanceFromTarget < slowDownDistance)
            {
                float speed = (distanceFromTarget / slowDownDistance)/1;
            }
        }
    

    【讨论】:

    • 这工作正常。我用工作代码更新我的代码。我怎样才能让它停止使速度为0,这样角色就不会再移动了?尝试检查速度是否为 0.1 或更低,但它不工作,他们继续行走。我怎样才能通过距离或速度来做到这一点?如果距离小于 1 站。
    • 在您当前的逻辑中,只有当角色距离目标超过一个单位时,它才会影响速度。我的猜测是它比一个更接近然后被踢出那个循环?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多