我正在Unity中制作一个拖放游戏,现在,不同的部分会合在一起。现在,我只希望某些对象可以捕捉,而另一些则不能。现在我有这个:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SnapObject : MonoBehaviour
{
public LayerMask snapLayer;
public Collider[] GetAllSnapPoints()
{
return Physics.OverlapSphere(transform.position, 100f, snapLayer, QueryTriggerInteraction.Collide);
//foreach (Collider coll in colliders)
//{
// Debug.Log(coll);
//}
}
public Vector3 GetNearestSnapPoint()
{
//Prendi tutti gli snapPoint vicini
var points = GetAllSnapPoints();
Debug.Log(points.Length);
Vector3 shortestTraslation = Vector3.positiveInfinity;
float minDistance = Mathf.Infinity;
//Calcolare il più vicino dei compatibili
foreach(Collider point in points)
{
if (point.gameObject == gameObject)
continue;
//point.GetComponent<SnapObject> ().
//farequalcosa per trovare un punto che voglio o non voglioe continue
var direction = point.transform.position - transform.position;
Debug.Log(point.transform.parent.name + " " + direction);
var distance = (direction).magnitude;
if (distance < minDistance)
{
minDistance = distance;
shortestTraslation = direction;
}
}
return shortestTraslation;
}
}
还有
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DragDropScript : MonoBehaviour
{
private Vector3 mOffset;
private float mZCoord;
private SnapObject[] snapPoints;
private void Awake()
{
snapPoints = GetComponentsInChildren<SnapObject>();
}
void OnMouseDown()
{
mZCoord = Camera.main.WorldToScreenPoint(gameObject.transform.position).z;
// Store offset = gameobject world pos - mouse world pos
mOffset = gameObject.transform.position - GetMouseAsWorldPoint();
}
private void OnMouseUp()
{
Debug.Log("Mouse UP");
var directionList = new List<Vector3>();
//Chiamare check Snap Point
foreach (SnapObject point in snapPoints)
directionList.Add(point.GetNearestSnapPoint());
Debug.Log("DirectionList Count: " + directionList.Count);
//Check snap più vicino
var minDirection = Vector3.positiveInfinity;
foreach (Vector3 point in directionList)
minDirection = (point.magnitude < minDirection.magnitude) ? point : minDirection;
Debug.Log(minDirection);
//var distance = Mathf.
transform.position += minDirection;
}
private Vector3 GetMouseAsWorldPoint()
{
// Pixel coordinates of mouse (x,y)
Vector3 mousePoint = Input.mousePosition;
// z coordinate of game object on screen
mousePoint.z = mZCoord;
// Convert it to world points
return Camera.main.ScreenToWorldPoint(mousePoint);
}
void OnMouseDrag()
{
transform.position = GetMouseAsWorldPoint() + mOffset;
}
}
然后我要使捕捉点亮起。
该游戏是建筑游戏。您需要使用给出的零件创建一个结构,但是有些零件不匹配并且不能放在一起。