C# 使用AddForceAtPosition,对象仅移动,但不移动';t扭矩
假设有一个洞能够通过自身的重力抓住周围的所有物体,脚本工作正常,但物体没有扭力 我想让物体移动到洞的位置,并在移动时给它们施加扭矩 你们可以使用两个立方体,一个是洞,另一个是有刚体和盒子层的块 提前谢谢C# 使用AddForceAtPosition,对象仅移动,但不移动';t扭矩,c#,unity3d,game-physics,C#,Unity3d,Game Physics,假设有一个洞能够通过自身的重力抓住周围的所有物体,脚本工作正常,但物体没有扭力 我想让物体移动到洞的位置,并在移动时给它们施加扭矩 你们可以使用两个立方体,一个是洞,另一个是有刚体和盒子层的块 提前谢谢 public class EatTheBoxes : MonoBehaviour { public bool Starttoeat; public float distance,speed,Gizmo_hight,FollowSpeed; public LayerMa
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);
}
}
公共类eatthebox:monobhavior
{
公共场所;
公共浮动距离、速度、小控件高度、跟随速度;
公共图层标记图层打印;
公共强制模式;
私人国际号码;
void FixedUpdate()
{
如果(开始吃)
{
捕捉框(变换、位置、距离、图层打印);
}
}
无效捕捉框(矢量3中心、浮动半径、图层标记图层打印)
{
Collider[]hitColliders=物理。重叠球体(中心、半径、图层打印);
int i=0;
while(i
您可以为刚体添加扭矩
只用
hitColliders[i].GetComponent<Rigidbody>().AddTorque(torqueVector);
碰撞器[i].GetComponent().AddTorque(torqueVector);
也考虑兑现刚体:
Rigidbody hitRigidbody = hitColliders[i].GetComponent<Rigidbody>();
hitRigidbody.isKinematic = false;
hitRigidbody.AddForceAtPosition(Time.fixedTime * speed * forceDirection.normalized,transform.position,forcemode);
hitRigidbody.AddTorque(torqueVector);
Rigidbody hitRigidbody=hitColliders[i].GetComponent();
hitRigidbody.isKinetic=false;
hitRigidbody.AddForceAtPosition(Time.fixedTime*速度*forceDirection.normalized,transform.position,forcemode);
hitRigidbody.附加扭矩(扭矩向量);
你是否在你的物体及其周围的地面上使用物理材料?是的,但没有用。因为你正在使用AddForceAtPosition
在transform.position
上施力,默认情况下,它是质心。@RVBinary请看,很棒,刚刚将它改为:hitRigidbody.AddTorque(hitRigidbody.position*时间.fixedTime*速度);