提问人:Qatawneh Razvan 提问时间:11/17/2023 最后编辑:Qatawneh Razvan 更新时间:11/17/2023 访问量:35
Unity 中镜头的倾斜方向
Oblique direction for shots in Unity
问:
我正在创建一个统一的 3D 游戏,你是一艘发射射弹的太空船,我想在我拿起 powerUp 改变射击风格时做到这一点,为此我创建了另外 2 颗具有不同脚本的子弹,子弹应该在左侧倾斜,而子弹应该在右侧倾斜。
我创建了这两个的预制件,当我拍摄时,它们不是倾斜移动,而是仅在 x 轴上移动。
如果我只有一个项目符号,它就可以工作了,但是当我添加第二个项目符号时,它只在 x 轴上移动,而不是在 x 轴上移动。
这是正在工作并在右侧倾斜的项目符号以及两个不起作用的项目符号的代码:
public class laser_Right : MonoBehaviour
{
public int speed = 8;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Movelaser();
}
void Movelaser()
{
Vector3 movement = (Vector3.up + Vector3.right).normalized * speed * Time.deltaTime;
transform.Translate(movement);
if (transform.position.y >= 9)
{
Destroy(gameObject);
}
}
}
因为左边的子弹是一样的,但方向不同。
我很确定代码是正确的,但还有其他问题,也许是因为我用两个项目符号创建了一个预制件? 项目符号签署了不同的脚本,所以我不明白为什么它不起作用。
答:
0赞
Wyck
11/17/2023
#1
脚本将弹丸沿 的绝对全局方向移动。目前尚不清楚您是否将弹丸物体朝向其预期运动方向朝前,但您可能应该这样做。然后,您可以使用它来获取相对于应用脚本的对象的局部“前进”方向的向量。Vector3.up + Vector3.right
transform.forward
像这样:
Vector3 movement = transform.forward * speed * Time.deltaTime;
只需确保创建您的 3 个对象,以便每个对象都朝向您希望它行进的方向。
或者。。。
如果不想重新定向对象,可以使用 向其运动添加横向分量。这似乎符合您最初的方法。transform.right
Vector3 movement = (transform.forward + transform.right).normalized * speed * Time.deltaTime;
这将使它沿其局部前方右侧 45° 的方向对角线移动。
但是,最好在创建对象时将对象旋转到适当的方向,并使用我的第一个示例代码。
评论
0赞
Qatawneh Razvan
11/17/2023
这很有用,谢谢!作为射弹,它们可以旋转 45*,但它们是简单的 3D 胶囊对象,它们面向 z 轴,有没有办法在不以奇怪的方式旋转的情况下改变它们所面对的方向?使用第一个代码,弹丸将在 Z 轴上移动,第二个代码在 z 轴上工作得更好一些,但倾斜。谢谢!
0赞
Wyck
11/18/2023
方法通常是: 1) 创建一个相对于“枪”的“射弹生成器”——你可以有 3 个这样的生成器,每个生成器都手动设置为你喜欢的角度 使用发射它们的生成器的变换来创建射弹。2)相对于枪的方向定向每个新创建的射弹物体。然后,您可以通过围绕每个弹丸的局部向上矢量旋转来创建任意数量的 n 个分散射弹的“平面扇”。
评论