Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Visual studio 如何在一个方向上移动立方体3秒钟,或者在另一个方向上移动立方体3秒钟_Visual Studio_Unity3d - Fatal编程技术网

Visual studio 如何在一个方向上移动立方体3秒钟,或者在另一个方向上移动立方体3秒钟

Visual studio 如何在一个方向上移动立方体3秒钟,或者在另一个方向上移动立方体3秒钟,visual-studio,unity3d,Visual Studio,Unity3d,我对统一还不熟悉,尝试着下面的方法,但我要么只能朝一个方向移动,要么根本不移动 我的立方体是触发器,不使用重力。我已经检查过风筝盒了。我试图让立方体来回移动,所以玩家很难收集它 using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine; public class movedanger : MonoBehaviour {

我对统一还不熟悉,尝试着下面的方法,但我要么只能朝一个方向移动,要么根本不移动

我的立方体是触发器,不使用重力。我已经检查过风筝盒了。我试图让立方体来回移动,所以玩家很难收集它

using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEngine;

public class movedanger : MonoBehaviour
{
    private int mytime = 0;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        MyMover(mytime);
    }

    void MyMover(int mytime)
    {
      if (mytime <= 3)
        {
            transform.Translate(Vector3.forward * Time.deltaTime);
            mytime++;
        }

        else
        {
            transform.Translate(-Vector3.forward * Time.deltaTime);
            mytime = 1;
        }
    }
        
}
使用系统集合;
使用System.Collections.Generic;
使用System.Runtime.CompilerServices;
使用UnityEngine;
公共阶层:单一行为
{
私有int mytime=0;
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
MyMover(mytime);
}
void MyMover(int mytime)
{

如果(mytime你想要的是物体的来回运动,你可以通过
Mathf.PingPong()来实现
函数,而不是使用translate。我用一个立方体对其进行了测试,您可以设置它应该移动到的最小和最大距离以及移动速度。因为您希望立方体一次在一个方向上移动3秒。您可以将速度计算为距离/时间,以便它应该从当前距离移动到的最大距离以及所需的时间(3秒)。希望这能有所帮助

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

public class MoveCube : MonoBehaviour {
    public float min = 2f;
    public float max = 8f;
    public float SpeedOfMovement = 2f;
    // Start is called before the first frame update
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        transform.position = new Vector3 (Mathf.PingPong (Time.time * SpeedOfMovement, max - min) + min, transform.position.y, transform.position.z);
    }


}

使用
InvokeRepeating
每3秒调用一次相同的MoveCube方法

using UnityEngine;

public class MoveDanger: MonoBehaviour
{
    public bool isForward = false;

    private void Start()
    {
      
        InvokeRepeating("MoveCube", 0f, 3f);
    }

    private void MoveCube()
    {
        if (isForward)
        {
            transform.Translate(Vector3.back);
            isForward = false;
        }
        else
        {
            transform.Translate(Vector3.forward);
            isForward = true;
        }
    }
}

老实说,一旦你习惯了,做这样的事情最好最简单的方法就是

使用Unity极其简单的动画制作系统:

(基本上,只需单击“新建动画”,然后根据需要拖动对象即可设置动画。)

网上有100多个教程解释如何使用它

这是一种一旦你使用它,并看到它是多么容易,你将做一个“脸掌”,再也不用担心其他方式


这真的是实现目标的“统一方式”,非常简单和灵活。

这是1000000%的正确率,专家会这么做。但是对于初学者来说,初学者应该学习简单的计时器命令,所以,调用和调用重复。@Fattie是的,你是对的。用户Lotan已经用invokeerepeating()解释过了所以OP现在会觉得更容易进行。完全同意,你的解释更高级@Saif,但也更正确,很好!事实上,我们三个人只需要一个弹簧和物理就可以了,所以看起来很酷,但是,我们是来帮助新用户的!!:ppp-heh!@Lotan-当然,你说的完全正确。不过这是r在局部空间中工作非常容易,然后你就可以在任何东西上使用它。另外,假设将来你改变了机制的工作方式(可能使用弹簧、放松、动画或其他任何东西)。那么你只需更改该组件,就根本不必更改“movingCube”。“movingCube”它本身可能有其他组件(到达、离开、爆炸、声音等),因此分离这些功能通常很方便。欢迎新用户!绝对不要出于任何原因在此处使用int!