我正在制作一个生存游戏,我正在尝试建立一个类似于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
但是......我现在遇到的问题是,当你试图将建筑物放置在另一栋建筑物的一侧时,它会穿过并进入该建筑物内部。
这使得无法将一个建筑物放置在另一个建筑物的侧面,并且它也可以使得您可以将多个建筑物堆叠在完全相同的位置。这些都是我不想要的。
你们知道有什么方法可以在放置的建筑物的侧面进行预览,而不是在里面进行预览吗?谢谢,Rugbug。
答案 0 :(得分:0)
我最终这样做了:
Vector3 newPos = hit.point + hit.normal.normalized;
这就成功了。