我绝不是物理专家,因此我无法确切地说出我所寻找的效果是如何调用的。我只是称之为" Backspin"现在:)
想象一下这种情况:
在乒乓球桌前面有一个乒乓球。你用手指对它施加压力(用很大的力量从球的顶部到底部)。乒乓球将从你的手指向前滑动但向后旋转。因此,尽管它向前移动,但由于其向后旋转,它最终将回滚到您:D
我希望这是有道理的。我真的不知道如何调用这种效果,所以我无法真正查找解决方案。
我确实有一个带有球体(刚体附着)的简单平面。我想通过在屏幕上滑动来模拟这种确切的效果。但最重要的是,如何实现这一效果?效果也应该通过压力球(左或右)的确切位置来实现。我只是希望它向前移动而向后旋转并最终由于其背力而回滚(不是完全相同的位置,而是更现实)。
我已尝试使用Addforce和Addtorque,但没有成功。
非常感谢任何帮助。
度过美好的一天!
编辑:到目前为止我所拥有的:
public float spin = 1000f;
public float force = 20f;
public float angularVelocity = 100f;
private Rigidbody rb;
private Vector3 oldPos;
private Quaternion oldRot;
public int pressed = 0;
void Start () {
oldPos = transform.position;
oldRot = transform.rotation;
rb = GetComponent<Rigidbody> ();
rb.maxAngularVelocity = angularVelocity;
}
void FixedUpdate ()
{
Debug.Log(rb.velocity.magnitude);
if (Input.GetKey(KeyCode.Space))
{
Debug.Log("pressed");
pressed = 1;
rb.AddForce(new Vector3(0,0,force),ForceMode.VelocityChange);
rb.AddTorque (new Vector3 (-spin, 0, 0), ForceMode.Force);
}
}
Edit2:
public float spin = 1000f;
public float force = 20f;
public float angularVelocity = 100f;
private Rigidbody rb;
private Vector3 oldPos;
private Quaternion oldRot;
public int pressed = 0;
public float forceTime = 1f;
public float startBack = 0.25f;
void Start () {
oldPos = transform.position;
oldRot = transform.rotation;
rb = GetComponent<Rigidbody> ();
rb.maxAngularVelocity = angularVelocity;
}
void FixedUpdate ()
{
Debug.Log(rb.velocity.magnitude);
if (pressed == 2)
{
rb.AddForce(new Vector3(0,0,-force),ForceMode.Acceleration);
}
else if (pressed == 1 && rb.velocity.magnitude <= startBack && rb.velocity.magnitude >= 0f)
{
pressed = 2;
StartCoroutine("StopForce");
}
else if (Input.GetKeyDown(KeyCode.Space) && pressed == 0)
{
Debug.Log("pressed");
rb.AddForce(new Vector3(0,0,force),ForceMode.VelocityChange);
rb.AddTorque (new Vector3 (-spin, 0, 0), ForceMode.Force);
pressed = 1;
}
}
IEnumerator StopForce () {
yield return new WaitForSeconds(forceTime);
pressed = 3;
}
答案 0 :(得分:1)
开始一个新项目。添加地形和球体。向球体添加刚体并将“拖动”更改为1.将球置于中间的地形顶部。将此代码添加到您的球体游戏对象
Rigidbody rb;
void Start () {
rb = GetComponent<Rigidbody> ();
rb.maxAngularVelocity = 100;
rb.AddForce(new Vector3(20,0,0),ForceMode.VelocityChange);
rb.AddTorque (new Vector3 (0, 0, 1000), ForceMode.Force);
}
中提琴。请注意,代码放在start方法中而不是更新,因为不应该连续添加力