首页 文章

没有transform.position通过触摸屏移动GameObject? (在Unity3d中)

提问于
浏览
1

我正在Unity3d中开发一款手机游戏,玩家需要移动一根手指比使用transform.position手指稍高一点,然后阻挡一个用Force.Mode2D.impulse移动的球 . 问题是如果手杖移动太快,球会穿过手杖 . 任何人都可以教我如何用力(或任何其他有效的方式)编码棒运动仍然根据触摸屏上的手指位置(A.K.A Input.mousePosition)移动而不是使用按钮?

如果有人需要信息,代码就是这样;

棒:

float defencePosX = Mathf.Clamp( Input.mousePosition.x / Screen.width * 5.6f - 2.8f , -2.8f, 2.8f);
 float defencePosY = Mathf.Clamp( Input.mousePosition.y / Screen.height * 10 - 4f, -3.3f, -0.5f);
 this.transform.position = new Vector3 (defencePosX, defencePosY, 0);

球:

projectileSpeed = Random.Range (maxSpeed, minSpeed);
 projectileSwing = Random.Range (-0.001f, 0.001f);
 rb.AddForce (new Vector2 (projectileSwing * 1000, 0), ForceMode2D.Impulse);
 rb.AddForce (new Vector2 (0, projectileSpeed), ForceMode2D.Impulse);

一个视频的错误:https://youtu.be/cr2LVBlP2O0基本上,如果我不移动它击中它,但如果我快速移动它球直接通过 . (如果太快,弹跳音效也不起作用)

2 回答

  • 2

    使用物理对象时,移动它们时只需要使用Rigidbody组件 . 否则,它被解释为传送,不应用物理,也不计算运动 .

    尝试使用Rigidbody.MovePosition而不是 transform.position .

    另外,确保棒和球上的Rigidbody组件都collisionDetectionMode设置为'Continuous Dynamic' . 这就是你如何让小的快速移动的物理对象在帧之间相互碰撞 .

    float defencePosX = Mathf.Clamp( Input.mousePosition.x / Screen.width * 5.6f - 2.8f , -2.8f, 2.8f);
     float defencePosY = Mathf.Clamp( Input.mousePosition.y / Screen.height * 10 - 4f, -3.3f, -0.5f);
     rb.MovePosition(new Vector3 (defencePosX, defencePosY, 0));
    
  • 1

    我建议您在向力量添加力之前将球力设置为Vector3.zero,或者将阻挡运动的对手用作球的弹跳垫 .

    请记住根据阻挡器检查碰撞器是否正确缩放 .

    显示您的问题的视频将有助于更好地理解它 .

相关问题