Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 碰撞后立即停止刚体移动/旋转_C#_Unity3d - Fatal编程技术网

C# 碰撞后立即停止刚体移动/旋转

C# 碰撞后立即停止刚体移动/旋转,c#,unity3d,C#,Unity3d,我希望我的球体从一个位置跳到另一个位置,但不希望它随后平移。我不知道该怎么做。这是我的密码: void Update() { if (!thrown && ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended) || Input.GetMouseButtonDown(0))) { rb.isKinematic = fals

我希望我的球体从一个位置跳到另一个位置,但不希望它随后平移。我不知道该怎么做。这是我的密码:

void Update()
{
    if (!thrown && ((Input.touchCount > 0 
    && Input.GetTouch(0).phase == TouchPhase.Ended) 
    || Input.GetMouseButtonDown(0)))
    {
        rb.isKinematic = false;
        rb.AddForce(new Vector3(0.0f, 15.0f, 5.0f) );
        thrown = true;
    }
}

有很多方法可以使对象在碰撞后立即停止。我给你两种方法:

方法1

检测碰撞时,将
刚体的速度设置为
0

如果对象也在旋转,请将
angularVelocity
也设置为
0

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        Rigidbody rbdy = collision.gameObject.GetComponent<Rigidbody>();

        //Stop Moving/Translating
        rbdy.velocity = Vector3.zero;

        //Stop rotating
        rbdy.angularVelocity = Vector3.zero;
    }
}
void OnCollisionEnter(碰撞)
{
if(collision.gameObject.CompareTag(“玩家”))
{
刚体rbdy=collision.gameObject.GetComponent();
//停止移动/翻译
rbdy.velocity=Vector3.0;
//停止转动
rbdy.angularVelocity=矢量3.0;
}
}
方法2

使用物理材质控制碰撞过程中的摩擦量

转到“资源>创建>物理材质”

将弹性更改为
0

将动态摩擦和静态摩擦更改为等于或大于
1

然后将其连接到
碰撞器上的
材质
插槽


你说的“翻译”是什么意思?你有更多的代码翻译球吗?如果是这样,你应该添加它否,但AddForce正在进行翻译。如果我理解得很好,你希望球在接触地面后立即停止?是的,这正是我想要的。如果球和地面都有
碰撞器
,你可以检测到两者之间的碰撞并冻结球的
变换。