【发布时间】:2021-08-04 03:17:47
【问题描述】:
首先我是一个初学者,只是想学习 Unity,我只是想创建一个 Pong 游戏。
当球与玩家碰撞时,尝试获取移动的玩家对象的速度。尝试将实际的玩家对象作为 RigidBody2D 和 BoxCollider 传递,但玩家移动如下所示:
void Update()
{
if(Input.GetKey(MoveUp)) {
var move = new Vector2(0, 1) * Speed;
rb.velocity = move;
}
else if (Input.GetKey(MoveDown))
{
var move = new Vector2(0, -1) * Speed;
rb.velocity = move;
}
else
{
var move = new Vector2(0, -1) * 0;
rb.velocity = move;
}
}
碰撞处理如下:
void OnCollisionEnter2D(Collision2D collision)
{
rb = GetComponent<Rigidbody2D>();
if (collision.collider.tag == "Player")
{
var playerVel = collision.rigidbody.velocity;
var playerColVel = collision.collider.attachedRigidbody.velocity;
}
}
这两个速度变量都返回 (0,0),它们的大小也是 (0,0)。
我正在尝试学习一个教程,但该教程已有多年历史,我想知道如何设置速度有什么改变还是我遗漏了什么?
【问题讨论】:
-
如果物体发生碰撞,它们会停止吗?你试过collision.relativeVelocity吗?资源:docs.unity3d.com/ScriptReference/…
-
@dgates82 这只是给了我球进入球员的速度,而不是实际球员的速度。但是,您关于它们是否已停止的声明可能有些问题,因为我删除了 else 并且现在它具有速度,因为当按钮向上时它正在消除速度。但是即使连续按下键直到断点它也不会保持速度。所以我想我现在的问题是如何在没有它的情况下停止玩家,然后导致碰撞失去速度,而不跟踪钥匙何时出现,因为这也不起作用。
-
你在播放器脚本上使用一个变量来跟踪“最后速度”是什么?如果你在球的碰撞中需要它,你可以从那里获取对玩家脚本的引用
-
我之前确实尝试过,但没有得到正确的响应,我认为通过将停止与运行完全分开,我得到了更好的结果,而不仅仅是立即停止。所以认为现在很好,可能会更好,但我仍在学习,不过感谢您的帮助! :)