拖放游戏到点

时间:2019-12-02 22:46:29

标签: c# unity3d

我正在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;
    }
}

然后我要使捕捉点亮起。

该游戏是建筑游戏。您需要使用给出的零件创建一个结构,但是有些零件不匹配并且不能放在一起。

0 个答案:

没有答案