【发布时间】:2017-07-14 18:13:27
【问题描述】:
我有以下脚本
public class SpeedUp : MonoBehaviour {
public Rigidbody2D ball;
void OnTriggerEnter2D(Collider2D col)
{
if (col.tag == "Ball") {
ball.AddForce(Vector2.left * 1000f);
Debug.Log("ABC");
}
}
}
每次我运行游戏时,Debug.Log("ABC") 都会在控制台中打印 ABC,但刚体不会移动,它会保持原样。谁能解释一下为什么,因为我不明白为什么控制台打印工作并且刚体不动
这是球的代码
public class Ball : MonoBehaviour {
public Rigidbody2D rb;
public Rigidbody2D hook;
public float releaseTime = 0.15f;
private bool isPressed = false;
void Update()
{
if (isPressed)
{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Vector3.Distance(mousePos, hook.position) > 2.5f)
{
rb.position = hook.position + (mousePos - hook.position).normalized * 2.5f;
}
else
{
rb.position = mousePos;
}
}
}
void OnMouseDown()
{
isPressed = true;
rb.isKinematic = true;
}
void OnMouseUp()
{
isPressed = false;
rb.isKinematic = false;
StartCoroutine(Release());
}
IEnumerator Release()
{
yield return new WaitForSeconds(releaseTime);
GetComponent<SpringJoint2D>().enabled = false;
this.enabled = false;
}
}
【问题讨论】:
-
刚体是否标记为运动学?你能给我们看一下它的设置截图吗?
-
@Serlite 小球在鼠标不接触的时候是运动的,但是为了到达对撞机,小球必须用鼠标拉动,一接触就变成动态的
-
代码本身没有问题 - 您的问题要么在于球的刚体是如何设置的,要么在于您所描述的鼠标和球的交互。
-
@ryemoss 我从球脚本中添加了代码
-
如果球被拖入碰撞器,OnTriggerEnter 将在 isKinematic 变为 false 之前发生(当您释放鼠标时),并且 Force 将在对象仍处于运动状态时应用到对象。是这样吗?
标签: c# unity3d game-engine game-physics