我怎样才能停止太空中的物体?

How can i stop object in space?

提问人:Алексей Фёдоров 提问时间:11/8/2023 更新时间:11/8/2023 访问量:27

问:

Unity,如何停止我的对象?

我是Unity的新手,但我已经在制作一个小游戏了。问题的本质如下: 我有一枚火箭飞向目标,在某些空间间隔内,我需要停止火箭,以便以文本形式显示其他参数 如何以及在何处将代码插入到我的脚本中,或者最好强加一个新代码 更详细地解释,我将不胜感激!

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

public class missileparticles : MonoBehaviour
{
    private Transform target;

    public enum Missile_state
    {
        idle, 
        start, 
        fly, 
        end 
    }
    public Missile_state missile_state_t;

    float timer = 0;

    public float speed_move;
    public float speed_rotate;

    Vector3 start_pos;

    public Transform GetTarget()
    {
        return target;
    }

    public void SetTarget(Transform value)
    {
        target = value;
    }

    
    void Start()
    {
        SetTarget(GameObject.FindGameObjectWithTag("Target").transform);

        start_pos = gameObject.transform.position;
    }

    
    void Update()
    {
        switch (missile_state_t)
        {
            case Missile_state.idle:
                if (timer <= 5) { timer += Time.deltaTime; }
                if (timer > 5)
                {
                    missile_state_t = Missile_state.start;
                }

                break;
            case Missile_state.start:
                float start_dist = Vector3.Distance(gameObject.transform.position, start_pos);
                gameObject.transform.Translate(Vector3.back * speed_move * Time.deltaTime);
                if (start_dist >= 20)
                {
                    missile_state_t = Missile_state.fly;
                }
                break;
            case Missile_state.fly:
                gameObject.transform.Translate(Vector3.up * speed_move * Time.deltaTime);

                Vector3 target_vector = GetTarget().transform.position - gameObject.transform.position;

                gameObject.transform.up = Vector3.Slerp(gameObject.transform.up, target_vector, speed_rotate * Time.deltaTime);

                if (target_vector.magnitude < 1)
                {
                    missile_state_t = Missile_state.end;
                }

                break;


            case Missile_state.end:

                break;
        }
    }
}
unity-game-engine 对象 冻结 nsobjectcontroller

评论

0赞 TheNomad 11/8/2023
您是否尝试过在需要显示选项以供玩家继续下一步或决定时?然后,一旦玩家选择了一个选项,就设置回配置的值。(显然,如果它是动态的,你可能需要将其保存在临时变量中;如果它是硬编码的,那么你已经知道要设置的值)speed_move = 0;speed_move
0赞 Алексей Фёдоров 11/8/2023
您能想象代码的一部分以及将其插入到何处吗?我用语言理解它是如何完成的,但它无法编码
0赞 hijinxbassist 11/8/2023
在这种情况下,您可以添加一个新的导弹状态,而什么都不做。然后,完成后,将导弹状态设置为飞行。FlightPaused
0赞 TheNomad 11/8/2023
这也是一个很好的建议。至于在哪里,这取决于什么游戏事件或触发它的原因。例如,在一些较旧的 RPG 游戏中,当会议和 NPC 时,游戏在聊天出现时暂停,因此决定性因素是接近 NPC。我们需要更多地了解您的游戏,以便为您提供建议。例如,您可以等待 15 秒,因为您将其设置为 Fly(或自 Idle 以来 20 秒),然后将速度设置为 0,按照@hijinxbassist建议使用新的枚举,甚至将它们组合在一起(即在状态下将速度设置为 0)。或者,如果它击中了一个特殊的(不)可见区域。Missile_state.paused

答: 暂无答案