如何在不停止的情况下连续移动物体(unity2d)

时间:2014-11-04 09:05:30

标签: unity3d unityscript

所以我在这里得到了这个脚本,当你点击它时将玩家移动-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;
}

有没有人有任何想法?谢谢!

3 个答案:

答案 0 :(得分:1)

您只是忘记了在Update()

中工作
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 ();
    }
}

我在这里做的是使用Unity逻辑。几乎所有东西都在Update()函数中工作,每次调用都会调用它。请注意,帧速率可能因场景的机器/复杂程度而异,因此在添加相关内容时请确保始终使用Time.deltaTime。

另一个注意事项:直接修改位置不会让你的对象对碰撞做出反应(所以你将会在物体中移动,但你仍然会#34;触发"碰撞) 。所以,如果你想管理碰撞,记得使用物理!

答案 1 :(得分:0)

你可以使用 Input.GetMouseButton 因为它会每帧,所以当你按住鼠标时它会得到它但是因为它在鼠标停止时检查每一帧,这样你的对象就会移动这么快,所以你可能想要添加一个计时器,如果时间到了,它会移动,所以它会移动一点我们检查我们在 timeLeft 中设置的指定时间是否传递并且鼠标按住然后移动我们的对象< / p>

   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;
        }

答案 2 :(得分:0)

我记得onMouseDown如果你按住按钮会触发每一帧,所以你需要在该功能中进行动作,让我检查一下。