如何通过统一的 C# 脚本将游戏对象完美地放置在网格上?
How to perfectly place a gameObject on a mesh through C# script in unity?
总结:
我有一个具有岩石网格的游戏对象。然而,网底空洞且丑陋。我想把它放在一个看起来像小山的网格上,这样玩家就看不到游戏对象的丑陋和空洞的底部。
我有一个使用光线投射来放置岩石的脚本。光线投射在网格上方。当我向下投射光线时,我在山上得到了一个看起来像网格的 Vector3。我把那块石头放在那个点上,我可以看到它的底部!如何避免使用 C# 代码?
这是我的完整问题:
如何:
旋转并移动一个 GameObject,它有一个 "mesh" 作为它的组件,这样它就位于另一个网格 "perfectly" 上,而不会通过 Unity 中的 c# 脚本看到 GameObject 的底部。
现在的样子
我想达到的目标
感谢任何形式的帮助!!
下面是一段代码,它使用光线投射命中的法线值来旋转岩石网格。
法线是顶点之间的网格几何体向外(垂直)的矢量:
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;
}
}
}
}
总结: 我有一个具有岩石网格的游戏对象。然而,网底空洞且丑陋。我想把它放在一个看起来像小山的网格上,这样玩家就看不到游戏对象的丑陋和空洞的底部。
我有一个使用光线投射来放置岩石的脚本。光线投射在网格上方。当我向下投射光线时,我在山上得到了一个看起来像网格的 Vector3。我把那块石头放在那个点上,我可以看到它的底部!如何避免使用 C# 代码?
这是我的完整问题:
如何: 旋转并移动一个 GameObject,它有一个 "mesh" 作为它的组件,这样它就位于另一个网格 "perfectly" 上,而不会通过 Unity 中的 c# 脚本看到 GameObject 的底部。
现在的样子
我想达到的目标
感谢任何形式的帮助!!
下面是一段代码,它使用光线投射命中的法线值来旋转岩石网格。
法线是顶点之间的网格几何体向外(垂直)的矢量:
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;
}
}
}
}