Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
Unity3d 如何使对象不停地连续移动(unity2d)_Unity3d_Unityscript - Fatal编程技术网

Unity3d 如何使对象不停地连续移动(unity2d)

Unity3d 如何使对象不停地连续移动(unity2d),unity3d,unityscript,Unity3d,Unityscript,所以我这里有一个脚本,当你点击它时,它会移动玩家-1.25,但我希望它会不断地增加-1.25,直到你松开按钮。现在,当你点击按钮时,它只移动一次。我的代码: var character : GameObject; function OnMouseDown () { character.GetComponent(Animator).enabled = true; BlahBlah (); } function OnMouseUp () { character.GetComp

所以我这里有一个脚本,当你点击它时,它会移动玩家-1.25,但我希望它会不断地增加-1.25,直到你松开按钮。现在,当你点击按钮时,它只移动一次。我的代码:

var character : GameObject;
function OnMouseDown () {
    character.GetComponent(Animator).enabled = true;
    BlahBlah ();
}
function OnMouseUp () {
    character.GetComponent(Animator).enabled = false;
}

function BlahBlah () {
    character.transform.position.x = character.transform.position.x + -1.25;
}

有人有什么想法吗?谢谢

您可以使用
输入。GetMouseButton
因为它会注册每一帧,所以当您按住鼠标时,它会得到它,但是因为它会在鼠标按下时检查每一帧,所以对象会移动如此之快,因此您可能需要添加一个计时器,如果到达时间后,它会移动,因此移动速度会稍微慢一点,因此我们会检查在timeLeft中设置的指定时间量是否已通过,并且按住鼠标,然后移动对象

   float timeLeft=0.5f; 

        void Update(){
          timeLeft -= Time.deltaTime;
        if (Input.GetMouseButton(0)){
                 if(timeLeft < 0)
                 {
                      BlahBlah ();
                 }
            }
        }

        void BlahBlah () {
            timeLeft=0.5f;
            character.transform.position.x = character.transform.position.x + -1.25;
        }
float timeLeft=0.5f;
无效更新(){
timeLeft-=Time.deltaTime;
if(输入。GetMouseButton(0)){
如果(时间间隔<0)
{
布拉布拉赫();
}
}
}
无效BlahBlah(){
时间间隔=0.5f;
character.transform.position.x=character.transform.position.x+-1.25;
}

我记得,如果您按住按钮,onMouseDown会触发每一帧,因此您需要在该功能中进行移动,让我检查一下。

您只是忘记在更新()中工作

我在这里使用的是统一逻辑。几乎所有东西都在Update()函数中工作,该函数在每一帧都被调用。请注意,帧速率可能会根据场景的机器/复杂性而变化,所以在添加相关内容时,请确保始终使用Time.deltaTime


另一个注意事项是:直接修改位置不会使对象对碰撞作出反应(因此您将在对象中移动,但仍会“触发”碰撞)。所以,如果您想管理碰撞,请记住使用物理

也许有一个布尔值,在鼠标向下时设置为true,在鼠标向上时设置为false,然后将移动放入一个while循环中,检查这个布尔值。你不需要*time.deltatime在变换结束时更改吗?他想在一帧内移动他的对象,我想,因为他的问题不在于移动itAh是的,刚刚注意到他也没有,不过我还是需要它!在更新功能中对移动使用time.deltaTime是一种很好的做法,但这不是强制性的,它无论如何都可以工作,尽管在其他设备上的移动不一样
var character : GameObject;
function OnMouseDown () 
{
    character.GetComponent(Animator).enabled = true;
}

function OnMouseUp () 
{
    character.GetComponent(Animator).enabled = false;
}

function BlahBlah () 
{
    // I added time.deltaTime, since you'll be updating the value every "frame",
    // and deltaTime refers to how much time passed from the last frame
    // this makes your movement indipendent from the frame rate
    character.transform.position.x = character.transform.position.x  - (1.25* time.deltaTime);
}

// The standard Unity3D Update method runs every frame
void Update() 
{
    if (character.GetComponent(Animator).enabled)
    {
        BlahBlah ();
    }
}