使用 AddForceAtPosition 对象只会移动但不会产生扭矩
with AddForceAtPosition objects only moves but doesn't torque
假设有一个洞可以通过自身的重力抓住周围的所有物体脚本运行正常但物体不会扭曲。
我想让物体移动到孔的位置并在移动时给它们扭矩
你可以使用两个立方体,一个可以是洞,另一个可以是方块,有刚体和盒子层
提前致谢。
public class EatTheBoxes : MonoBehaviour
{
public bool Starttoeat;
public float distance,speed,Gizmo_hight,FollowSpeed;
public LayerMask layerint;
public ForceMode forcemode;
private int _numberoftile;
void FixedUpdate()
{
if (Starttoeat)
{
CatchTheBoxes(transform.position,distance,layerint);
}
}
void CatchTheBoxes(Vector3 center, float radius , LayerMask layerint)
{
Collider[] hitColliders = Physics.OverlapSphere(center, radius,layerint);
int i = 0;
while (i < hitColliders.Length)
{
Vector3 forceDirection = transform.position - hitColliders[i].transform.position;
if (hitColliders[i].CompareTag("bomb"))
{
hitColliders[i].GetComponent<Rigidbody>().AddForceAtPosition(Time.fixedTime * 20 * forceDirection.normalized,transform.position,forcemode);
hitColliders[i].GetComponent<Rigidbody>().isKinematic = false;
}
else
{
hitColliders[i].GetComponent<Rigidbody>().AddForceAtPosition(Time.fixedTime * speed * forceDirection.normalized,transform.position,forcemode);
hitColliders[i].GetComponent<Rigidbody>().isKinematic = false;
}
i++;
}
}
void OnDrawGizmos()
{
Vector3 newTransform = transform.position;
newTransform.y = newTransform.y + Gizmo_hight;
Gizmos.DrawWireSphere(newTransform,distance);
}
}
你可以给刚体增加扭矩。
只需使用
hitColliders[i].GetComponent<Rigidbody>().AddTorque(torqueVector);
同时考虑兑现刚体:
Rigidbody hitRigidbody = hitColliders[i].GetComponent<Rigidbody>();
hitRigidbody.isKinematic = false;
hitRigidbody.AddForceAtPosition(Time.fixedTime * speed * forceDirection.normalized,transform.position,forcemode);
hitRigidbody.AddTorque(torqueVector);
假设有一个洞可以通过自身的重力抓住周围的所有物体脚本运行正常但物体不会扭曲。
我想让物体移动到孔的位置并在移动时给它们扭矩
你可以使用两个立方体,一个可以是洞,另一个可以是方块,有刚体和盒子层
提前致谢。
public class EatTheBoxes : MonoBehaviour
{
public bool Starttoeat;
public float distance,speed,Gizmo_hight,FollowSpeed;
public LayerMask layerint;
public ForceMode forcemode;
private int _numberoftile;
void FixedUpdate()
{
if (Starttoeat)
{
CatchTheBoxes(transform.position,distance,layerint);
}
}
void CatchTheBoxes(Vector3 center, float radius , LayerMask layerint)
{
Collider[] hitColliders = Physics.OverlapSphere(center, radius,layerint);
int i = 0;
while (i < hitColliders.Length)
{
Vector3 forceDirection = transform.position - hitColliders[i].transform.position;
if (hitColliders[i].CompareTag("bomb"))
{
hitColliders[i].GetComponent<Rigidbody>().AddForceAtPosition(Time.fixedTime * 20 * forceDirection.normalized,transform.position,forcemode);
hitColliders[i].GetComponent<Rigidbody>().isKinematic = false;
}
else
{
hitColliders[i].GetComponent<Rigidbody>().AddForceAtPosition(Time.fixedTime * speed * forceDirection.normalized,transform.position,forcemode);
hitColliders[i].GetComponent<Rigidbody>().isKinematic = false;
}
i++;
}
}
void OnDrawGizmos()
{
Vector3 newTransform = transform.position;
newTransform.y = newTransform.y + Gizmo_hight;
Gizmos.DrawWireSphere(newTransform,distance);
}
}
你可以给刚体增加扭矩。
只需使用
hitColliders[i].GetComponent<Rigidbody>().AddTorque(torqueVector);
同时考虑兑现刚体:
Rigidbody hitRigidbody = hitColliders[i].GetComponent<Rigidbody>();
hitRigidbody.isKinematic = false;
hitRigidbody.AddForceAtPosition(Time.fixedTime * speed * forceDirection.normalized,transform.position,forcemode);
hitRigidbody.AddTorque(torqueVector);