Unity C#基于网格的构建系统不起作用

时间:2018-04-11 16:47:31

标签: c# unity3d

我正在制作一个生存游戏,我正在尝试建立一个类似于Rust的建筑系统。

这是我的代码:

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

public class SnapToGrid : MonoBehaviour {

    public GameObject buildingPrefab;

    public float gridDistance = 2f;

    float gridSize;

    Vector3 gridPosition;
    Vector3 worldPosition;

    void Start() {
        worldPosition = transform.position;

        gridSize = 1f / gridDistance;
    }

    void Update() {

        gridSize = 1f / gridDistance;

        Ray ray = Camera.main.ScreenPointToRay(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0f));

        RaycastHit hit;

        Physics.Raycast(ray, out hit);

        worldPosition = hit.point;

        //Vector3 distanceVec = hit.point - Camera.main.transform.position;
        //worldPosition -= distanceVec.normalized * (distanceVec.magnitude - 1f);

        gridPosition = new Vector3(
        Mathf.Round(worldPosition.x * gridSize) / gridSize,
        Mathf.Round(worldPosition.y * gridSize) / gridSize,
        Mathf.Round(worldPosition.z * gridSize) / gridSize);

        transform.position = gridPosition;

        if(Input.GetMouseButtonDown(0)) {
            Instantiate(buildingPrefab, gridPosition, Quaternion.identity);
        }
    }
}

有一个预览,来自相机的光线投射与对撞机接触,无论何时单击它都会在预览所在的位置实例化建筑物。

Preview of building and placed buildings

但是......我现在遇到的问题是,当你试图将建筑物放置在另一栋建筑物的一侧时,它会穿过并进入该建筑物内部。

Preview clips into building

这使得无法将一个建筑物放置在另一个建筑物的侧面,并且它也可以使得您可以将多个建筑物堆叠在完全相同的位置。这些都是我不想要的。

你们知道有什么方法可以在放置的建筑物的侧面进行预览,而不是在里面进行预览吗?谢谢,Rugbug。

1 个答案:

答案 0 :(得分:0)

我最终这样做了:

Vector3 newPos = hit.point + hit.normal.normalized;

这就成功了。