试图创建一个类似Connect 4的游戏。我使板模型的孔与网格对齐,因此我可以轻松地将圆放入其中。

问题是我不知道如何统一使对象跟随鼠标,同时还捕捉到网格。

码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LockToGrid : MonoBehaviour {
    public float gridSize;
    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void Update () {
        SnapToGrid(gameObject);
    }

    void SnapToGrid(GameObject Object) {
        var currentPos = Object.transform.position;
        Object.transform.position = new Vector3(Mathf.Round(currentPos.x / gridSize) * gridSize,
                                     currentPos.y,
                                     currentPos.z);

    }
}

最佳答案

I've done this之前。我将这些放在我自己的数学课(MathHelper)中。它将值捕捉到另一个值的倍数(游戏中每个插槽的距离)。

    public static Vector3 snap(Vector3 pos, int v) {
        float x = pos.x;
        float y = pos.y;
        float z = pos.z;
        x = Mathf.FloorToInt(x / v) * v;
        y = Mathf.FloorToInt(y / v) * v;
        z = Mathf.FloorToInt(z / v) * v;
        return new Vector3(x, y, z);
    }

    public static int snap(int pos, int v) {
        float x = pos;
        return Mathf.FloorToInt(x / v) * v;
    }

    public static float snap(float pos, float v) {
        float x = pos;
        return Mathf.FloorToInt(x / v) * v;
    }


因此,在基于鼠标位置获得该值之后,请通过捕捉运行它,然后将结果应用于GameObject的变换位置。像这样:

transform.position = MathHelper.snap(Input.MousePosition, 24);

如果Input.MousePosition不能直接转换为坐标空间以及捕捉距离(您根据自己的使用情况设定为24,则您可能是1、5、10、50或100),则可能需要摆弄它。 )。

关于c# - Unity-跟随鼠标捕捉到网格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44707093/

10-10 05:19