让我们假设场景中有两个带有红色和蓝色材料的圆柱体。另外,我们有两个具有红色和蓝色背景的UI图像。现在,我该怎么做才能使红色图像只能拖到红色圆柱上,而蓝色图像只能拖到蓝色圆柱上。
如果我将红色图像拖到蓝色圆柱上,则会出现错误消息:
相同,也可以在红色圆柱体上拖动蓝色图像,反之亦然。
看下面的图片
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class wrench : MonoBehaviour {
public bool Dragging = false;
public bool collision = false;
Vector3 position;
public List<GameObject> UIimages;
public void BeginDrag() {
position = gameObject.transform.position;
Dragging = true;
foreach (GameObject obj in UIimages) {
obj.GetComponent<BoxCollider2D> ().enabled = false;
}
}
public void Drag() {
transform.position = Input.mousePosition;
}
public void Drop() {
if (!collision) {
gameObject.transform.position = position;
}
Dragging = false;
}
}
答案 0 :(得分:0)
假设您说的话已经检测到您的dropps,问题更多的是关于如何使用简单的enum
例如,
public enum WhichObject
{
red,
blue
}
优点是以后您可以非常轻松地添加更多选项,而不必处理图层,标签等。
在GameObject上拖动,添加一个组件,例如
public class ObjectInformation
{
public WhichObject IsObject;
}
,只需在检查器中选择(或如果通过脚本生成它们)为每个WhichObject
变量应具有的拖动对象。
除了在检测碰撞的目标对象上还添加一个WhichObject
变量,但这一次配置您希望在此处放置的值
public WhichObject ExpectedObject;
再次通过检查器或脚本进行设置。
比简单地添加支票
var info = droppedObject.GetComponent<ObjectInformation>();
// Something else dropped?
if(!info) return;
// Now check if the value matches
// the one this object expects
if(info.IsObject == ExpectedObject)
{
// Correct object
Debug.Log("Yeah!");
}
else
{
// Wrong object
Debug.LogFormat("Dropped object {0} does not match the expected object {1}!", info.IsObject, ExpectedObject);
}
以后,您也可以简单地使用多个枚举来扩展它,例如颜色,形式等
也许您也可以反过来进行检查,然后检查所拖动的对象,如果值匹配,如果不匹配,甚至不允许将其放在该目标对象上(这当然取决于您的实现)。