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

时间:2017-09-17 14:57:52

标签: performance unity3d touchscreen collider

我正在Unity3d中开发一款手机游戏,玩家需要移动一根手指比使用transform.position手指稍微高一点,然后阻挡一个用Force.Mode2D.impulse移动的球。问题是如果手杖移动太快,球会穿过手杖。任何人都可以教我如何使用Force(或任何其他有效的方式)根据触摸屏上的手指位置(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 个答案:

答案 0 :(得分:2)

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

尝试使用Rigidbody.MovePosition代替transform.position

另外,请确保您的手杖和球上的Rigidbody组件都collisionDetectionMode设置为“持续动态”'。这就是你如何让小型快速移动的物理对象在帧之间相互碰撞。

 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 :(得分:1)

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

请记住检查你的对撞机是否按照阻挡器正确缩放。

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