如何阻止用户沿y方向向上移动游戏对象,使对象保持在地面上?

时间:2017-01-02 22:58:29

标签: c# unity3d touch

public static void MoveObject(Transform transform, Vector2 deltaPosition, Camera camera = null)
{
    if (transform != null)
    {
        if (deltaPosition.x != 0.0f || deltaPosition.y != 0.0f)
        {
            var rectTransform = transform as RectTransform;

            // If this is RectTransform then modify the anchoredPosition
            if (rectTransform != null)
            {
                rectTransform.anchoredPosition += deltaPosition;
            }
            // If this is Transform then modify the position
            else
            {
                transform.position = MoveObject(transform.position, deltaPosition, camera);
            }
        }
    }
}

public static Vector3 MoveObject(Vector3 worldPosition, Vector2 deltaPosition, Camera camera = null)
{
    if (camera == null) camera = Camera.main;

    if (camera != null)
    {
        // Find current screen position of world position
        var screenPosition = camera.WorldToScreenPoint(worldPosition);

        // Modify screen position
        screenPosition += (Vector3)deltaPosition;

        // Write new world position
        worldPosition = camera.ScreenToWorldPoint(screenPosition);
    }

    return worldPosition;
}

2 个答案:

答案 0 :(得分:0)

请勿使用==!=来比较floats,因为0.0003F0.0002F不同。请改用Mathf.Approximately()

假设y=0是你的基础水平:

if (!Mathf.Approximately(newPosition.y, 0.0F))
{
  return; //don't move the object.
} 

答案 1 :(得分:0)

@Lincoln答案也可能有用。但是,在使用浮点数时,您应该使用小范围而不是 var len = 0; if($("#animalList").val()!=null){ len = $("#animalList").val().length; } ==。就像在你的例子中使用这个

!=

因为浮游物完全相同时非常罕见......