当正确的对象拖动到正确的框时如何添加分数? [关闭]

Posted

技术标签:

【中文标题】当正确的对象拖动到正确的框时如何添加分数? [关闭]【英文标题】:How to add a score when the correct object drags to the correct box? [closed] 【发布时间】:2021-08-15 15:32:54 【问题描述】:

我使用鼠标控制创建了一个 2d 拖放游戏。但是当正确的对象拖到正确的框时,我不知道如何添加分数。我需要的是,当对象与正确的对象重叠时,必须增加分数。 这是我的代码,

公共类拖动:MonoBehaviour

public GameObject correctForm,carrot,circle;
private bool moving;
private bool finish;

private float startPosX;
private float startPosY;

private Vector3 resetPosition;

void Start()

    resetPosition = this.transform.localPosition;



void Update()

    if(finish == false)
    
        if (moving)
        
            Vector3 mousepos;
            mousepos = Input.mousePosition;
            mousepos = Camera.main.ScreenToWorldPoint(mousepos);

            this.gameObject.transform.localPosition = new Vector3(mousepos.x - startPosX, mousepos.y - startPosY, this.gameObject.transform.localPosition.z);
        
    
    


public void OnMouseDown()


    if(Input.GetMouseButtonDown(0))
    
        Vector3 mousepos;
        mousepos = Input.mousePosition;
        mousepos = Camera.main.ScreenToWorldPoint(mousepos);

        startPosX = mousepos.x - this.transform.localPosition.x;
        startPosY = mousepos.y - this.transform.localPosition.y;

        moving = true;
    


public void OnMouseUp()


    moving = false;

    if(Mathf.Abs(this.transform.localPosition.x - correctForm.transform.localPosition.x) <= 0.5f &&
        Mathf.Abs(this.transform.localPosition.y - correctForm.transform.localPosition.y) <=0.5f)
    
        this.transform.position = new Vector3(correctForm.transform.position.x, correctForm.transform.position.y, correctForm.transform.position.z);
        //MyscoreText.text = "Score : " + ScoreNum;
        //Destroy(coin);
        finish = true;
        
        if(moving == false)
        
            Score.ScoreNum += 2;
        
        
    
    else
    
        this.transform.localPosition = new Vector3(resetPosition.x, resetPosition.y, resetPosition.z);
    

如果有人能帮助我,我将不胜感激。 谢谢。

【问题讨论】:

我们需要更多信息。你有触摸或鼠标控制吗?就个人而言,我会使用 OnMouseUp 事件 (docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseUp.html) 并检查我是否在我需要放下的游戏对象之上。 PS:Unityscript 在很久以前就被弃用了 @Rhach Unity 作为一个跨平台游戏引擎已经提供了从处理事件的代码中抽象出实际输入的方法。所以不管是键盘、鼠标、触控、操纵杆、VR 等,特别是如果你已经实现了自己的拖放操作 根据我们掌握的信息,我想说:OnDrop -> 检查拖动的对象是否与框匹配 -> 添加分数 【参考方案1】:

我认为,您可以为每种类型的盒子添加一个标签,比如说,您有 3 个盒子,基于颜色(红色、蓝色和绿色)。您可以创建3个标签,分别是红色,蓝色和绿色,并为您拥有的每个可拖动对象添加正确的标签,然后使用碰撞器检查可拖动对象是否进入框,检查标签,如果标签正确则添加分数.

或者你可以在可拖动对象脚本中创建一个新的枚举,比如说类型。然后当对象进入框时,只需检查类型变量即可。

希望这会有所帮助:D

【讨论】:

【参考方案2】:

假设每个拖放的东西都是一个游戏对象。您可以使用包含您定义的自定义枚举的拖动和框组件标记每个拖动对象。 然后当 drop 事件发生时,使用 if 语句查看标签是否匹配或是否为特定组合,然后增加全局分数。

public class DragAndDrop : MonoBehaviour
    
        public DragAndDropType Type;

        void OnDragFinished()
        
            //i don't know how your dragging logic is working
            //but likely you'll get the  dragReceiverBox and DragAndDrop components via GetComponent<T>
            
            DragAndDrop drag;
            DragReceiverBox box;
            //------------------
            todo: initialize "drag" and "box"
            //----------------------
            
            if (drag.Type == box.Type)
            
                Global.PlayerScore += 1;
            

        
    
    public class DragReceiverBox : MonoBehaviour
    
        public DragAndDropType Type;
    
```
public enum DragAndDropType

    CustomName1,
    CustomName2,
    CustomName3

```
    public static class Global
    
        public static float PlayerScore;
    

【讨论】:

以上是关于当正确的对象拖动到正确的框时如何添加分数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何正确实现可拖动的“抽屉”自定义 UIView

如何正确关闭 UIPopover?

创建每次选择正确答案时都会增加的分数

你知道如何安全正确的关闭线程池吗?

使用可编辑组合框时,DefaultListCellRenderer 无法正确呈现空字符串

可排序、可拖动、可排序的表 + mvc 未正确更新顺序