C# 如何使矢量2偏移点始终相对于变换';自上而下射手的旋转?
我在游戏中设置射击,但投射物的起点(武器的终点)不随玩家旋转。该点由脚本上的向量2定义,该向量应该是与玩家位置的偏移量,但也考虑了玩家旋转。 我相信这很简单,但似乎无法解决如何修复我的代码。(我想使用此脚本中的代码,而不是子转换引用) 在图片中,起点显示为一个绿色圆圈,红色十字穿过。它需要和玩家一起旋转,所以它总是在箭头的顶端C# 如何使矢量2偏移点始终相对于变换';自上而下射手的旋转?,c#,unity3d,C#,Unity3d,我在游戏中设置射击,但投射物的起点(武器的终点)不随玩家旋转。该点由脚本上的向量2定义,该向量应该是与玩家位置的偏移量,但也考虑了玩家旋转。 我相信这很简单,但似乎无法解决如何修复我的代码。(我想使用此脚本中的代码,而不是子转换引用) 在图片中,起点显示为一个绿色圆圈,红色十字穿过。它需要和玩家一起旋转,所以它总是在箭头的顶端 private void OnDrawGizmos() { localProjectileStart = new Vector3( transfo
private void OnDrawGizmos()
{
localProjectileStart = new Vector3(
transform.position.x + projectileStart.x,
transform.position.y + projectileStart.y,
transform.position.z);
Gizmos.color = Color.green;
Gizmos.DrawWireSphere(localProjectileStart, 0.04f);
Gizmos.color = Color.red;
Gizmos.DrawLine(new Vector3(-0.05f, 0, 0) + localProjectileStart, new Vector3(0.05f, 0, 0) + localProjectileStart);
Gizmos.DrawLine(new Vector3(0, -0.05f, 0) + localProjectileStart, new Vector3(0, 0.08f, 0) + localProjectileStart);
}
您可以创建一个新的游戏对象,并将其作为玩家对象的子对象,以便点随玩家旋转。您可以获取该点的参考并获取其位置。花了一段时间才弄清楚,但我将其作为完全基于代码的位置偏移解决方案:
public Vector2 projectileStart;
private void OnDrawGizmos()
{
// Script-based constant position offset
Vector3 _localPositionAndRotation = transform.rotation * new Vector3(
projectileStart.x,
projectileStart.y,
0);
Vector3 _relativePosition = _localPositionAndRotation + transform.position;
Gizmos.color = Color.green;
Gizmos.DrawWireSphere(_relativePosition, 0.04f);
Gizmos.color = Color.red;
Gizmos.DrawLine((transform.right * -0.05f) + _relativePosition, (transform.right * 0.05f) + _relativePosition);
Gizmos.DrawLine((transform.up * -0.05f) + _relativePosition, (transform.up * 0.08f) + _relativePosition);
}
这段代码在偏移点绘制了一个线球体(不旋转),还有一个t型箭头,它总是指向transform.up,因此很容易获得2D前进方向。在我的例子中,我用它作为玩家和敌人的投射武器。
使用OnDrawGizmos提供了一个仅用于编辑器的位置视图,然后在我的更新代码中,我会在游戏运行时执行完全相同的操作
感谢@SushiWaUmai提供了有关变换、旋转相乘的技巧。谢谢。我确实知道这种方法,但我的目标是通过代码来实现,而不是依赖于另一个游戏对象引用。我想我以前做过,可能使用了transform.up/etc之类的工具,但现在我无法让它工作,也没有在网上找到答案。有什么想法吗?你可以计算相对向量,然后乘以玩家的旋转来旋转向量。好的,我该如何用C#代码来写它,来更改
localprojectlestart
变量?我尝试了许多不同的方法来乘法,但都不正确。(玩家在Z轴上旋转,顺便说一句)代码就是我遇到麻烦的地方。如何旋转向量?你可以通过将向量乘以四元数来旋转向量3,更多信息请参见