如何在统一拖动它一次后停止游戏对象被拖动#

时间:2017-03-28 15:14:38

标签: c# drag-and-drop unity5

我希望在使用OnMouseDrag

将其拖动到正确位置后冻结游戏对象

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。我假设您从脚本移动所有内容,因此无论您何时更新对象的位置,都可以使用简单的if语句阻止它更新。

在伪代码中:

void Update(){
    if(isInRightPosition(yourGameObject) == false){
        you are free to update the position
    }else{
        do nothing and the object will remain in same position;
    }
}

bool isInRightPosition(yourGameObject){ return yourConditionalExpression; }

如果这不起作用,因为您正在使用其他工具来更新对象的位置,您还可以在放置好对象时在本地保存对象的正确位置,并且只需更新它即可。固定更新函数中每一帧的位置,如果它涉及物理,或者如果不涉及更新功能,那么即使用户想要移动它,你的代码也会重置它。

因此,您的更新功能与

类似

现在是C#代码:

Vector3 lockedPosition = new Vector3(myX, myY, myZ);

void Update(){
    Rigidbody rigidbody = GetComponent<RigidBody>();

    if(isInRightPosition(yourGameObject) == true){
         rigidbody.position = lockedPosition;
    }else{
         /*let the player move the object*/
    }
}

此外,您可以根据需要在您使用的事件处理程序中应用此逻辑。