我觉得自己在弄清楚这个问题上只是一个精神障碍,所以我想我应该检查一下有关我的代码的建议。
我正在尝试生成一个相当简单/一致的形状的道路网格。问题是,在使用Transform.forward和Transform.right命令调整中心点时,它无法正确旋转。
这是我计算顶点的简化版本(已删除了坡度和倾斜):
CreateRoadPiece ( Transform _transform, Vector3 center )
{
Vector3 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11;
p0 = center + _transform.forward - ( _transform.right * 5.0f );
p1 = center + _transform.forward + ( _transform.right * 5.0f );
p2 = center + ( _transform.right * 5.0f );
p3 = center - ( _transform.right * 5.0f );
p4 = center - _transform.forward - ( _transform.right * 5.0f );
p5 = center - _transform.forward + ( _transform.right * 5.0f );
p6 = p0;
p7 = p1;
p8 = p2;
p9 = p3;
p10 = p4;
p11 = p5;
p0.y -= 0.1f;
p1.y -= 0.1f;
p2.y -= 0.1f;
p3.y -= 0.1f;
p4.y -= 0.1f;
p5.y -= 0.1f;
p6.y += 0.1f;
p7.y += 0.1f;
p8.y += 0.1f;
p9.y += 0.1f;
p10.y += 0.1f;
p11.y += 0.1f;
}
_transform是具有网格组件的对象,它已旋转并定位为面对道路带应布置的方向。
道路块宽10个单位,高0.2个单位,深度2个单位。
我以为使用transform.forward和transform.right可以解决旋转问题,但也许我遗漏了什么?
面对Z +时,一切正常。
感谢您的任何投入。
我终于找到了解决方案。我已经知道计算(大部分)是正确的,但是定位不正确。在上面的计算中,主要是将Transform.TransformPoint和所有变体(方向,向量及其逆)以及中心变量都抛出了,但是我终于设法达到了需要的东西。
CreateRoadPiece ( Transform _transform, Vector3 center, byte unitDirection )
{
Vector3 transformForward = _transform.TransformDirection( _transform.forward );
Vector3 transformRight = _transform.TransformDirection( _transform.right);
if( unitDirection == 1 || unitDirection == 3 )
{
transformForward = -transformForward;
transformRight = -transformRight;
}
p0 = ( center + ( transformForward + ( -transformRight * 5.0f ) ) );
p1 = ( center + ( transformForward + ( transformRight * 5.0f ) ) );
p2 = ( center + ( transformRight * 5.0f ) );
p3 = ( center + ( -transformRight * 5.0f ) );
p4 = ( center + ( -transformForward + ( -transformRight * 5.0f ) ) );
p5 = ( center + ( -transformForward + ( transformRight * 5.0f ) ) );
}
Unity的Mesh系统似乎只能在世界空间中工作,但是我将Transform的旋转用于其他检查(主要是在创建路径时的行进方向)。因此,此解决方案似乎可以很好地解决我的展示位置问题(我还使用了:
_transform.InverseTransformPoint ( center );
当我将中心值发送到此函数时。
编辑:
将代码略微修改为我当前的解决方案。unitDirection是一个字节值,用于指示旋转是0(0),90(1),180(2)还是270(3)(所有部件仅旋转90度以使组合更简单(主要是相交))。顺序在90度和270度旋转时被颠倒了,因此对transformForward和transformRight所做的调整将所有内容放置在了应该的位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句