2 回答
TA贡献1909条经验 获得超7个赞
v1
找到和之间的角度v2
会得到这个角度,它与您在图表中标记的角度不匹配:
相反,求解 v1 和垂直于 v2 的平面之间的角度:
我们可以通过使用Vector3.ProjectOnPlane将 v1 投影到与 v2 垂直的平面,然后使用Vector3.Angle找到该投影与 v1 之间的角度来统一完成此操作:
Vector3 projection = Vector3.ProjectOnPlane(hypoth, adjacent); float angle = Vector3.Angle(projection, hypoth);
TA贡献1871条经验 获得超8个赞
我有一个类似的情况,我想将地形单位的碰撞器设置在玩家Jet的同一高度,同时它必须在相机的视线上,否则当你拍摄地形单位时,子弹看起来就像穿过地面上的敌方单位,这仅在您使用预期相机时才有效,在正交上,您可能根本不需要这样做,只需将对象设置在与相机和所有东西相同的高度即可将被对齐。
这是我的代码
void SetColliderLocation()
{
// Object on the ground
A = TerrainUnit.transform.position;
// Camera location
B = cam.transform.position;
// Enemy jet height
height = mainPlayerTransform.position.y;
// Unit Vector normalized between A and B
AB_Normalized = (A - B).normalized;
// The unit vector required to move the collider to maintain its hieght and line of sight with the camera
unitVector = (height - A.y) / AB_Normalized.y;
// Setting the location of the collidar .
collidarGameObject.transform.position = (AB_Normalized * unitVector) + A;
}
我希望它与您正在寻找的东西有多么相似。
编辑:
如果您应用此脚本并且放置一个盒子而不是碰撞器,您将看到盒子的位置将始终位于天空上的相机和地面上的物体之间,但是相机或地面上的物体正在移动。
- 2 回答
- 0 关注
- 85 浏览
添加回答
举报