摘要: 我有一个带有岩石网格物体的游戏对象。但是,网格的底部是神圣且丑陋的。我想将其放置在看起来像小山的网格上,以使玩家无法看到游戏对象的丑陋和神圣的底部。
我有一个使用raycast放置岩石的脚本。射线投射在网格上方。当我向下光线投射时,我在山丘上看到一个Vector3。我把那块石头放在那一点上,我可以看到它的底部!如何避免使用C#代码?
这是我的完整问题:
如何: 旋转并移动一个具有“网格”作为其组件的GameObject,以使其“完全”位于另一个网格上,而不会通过Unity中的c#脚本看到GameObject的底部。
现在的样子
我想实现的目标
感谢任何帮助!
答案 0 :(得分:0)
这是一段代码,该代码使用射线投射的正常值旋转岩石网格。
法线是顶点之间的网格几何形状的向外(垂直)矢量:
https://en.wikipedia.org/wiki/Vertex_normal#/media/File:Vertex_normals.png
如果将此脚本放置在岩石网格物体上,它将告诉岩石网格物体其向上矢量与射线投射点所在的法线相同。
using UnityEngine;
public class StickToTerrain : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit terrainHit))
{
transform.up = terrainHit.normal;
}
}
}
}