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_Pause - Fatal编程技术网

C# 如何在统一中暂停嘲笑?

C# 如何在统一中暂停嘲笑?,c#,unity3d,pause,C#,Unity3d,Pause,我想知道如何暂停刚体2d并恢复它。我尝试了许多不同的方法,但都没有成功。我认为主要的问题是,当游戏暂停时,我的rigidbody2D将移动,因此我需要能够暂停rigidbody2D,当取消暂停时,rigidbody2D应该像以前一样继续移动 这是我目前掌握的代码: using UnityEngine; using System.Collections; public class Pause : MonoBehaviour { private Rigidbody _rigidBody

我想知道如何暂停刚体2d并恢复它。我尝试了许多不同的方法,但都没有成功。我认为主要的问题是,当游戏暂停时,我的rigidbody2D将移动,因此我需要能够暂停rigidbody2D,当取消暂停时,rigidbody2D应该像以前一样继续移动

这是我目前掌握的代码:

using UnityEngine;
using System.Collections;

public class Pause : MonoBehaviour {


    private Rigidbody _rigidBody;
    void Awake () 
    {
        _rigidBody = Ball.GetComponent<Rigidbody>();
    }

    private Vector3 _pausedVelocity;
    private Vector3 _pausedAngularVelocity;

    public void OnMouseEnter() 
    {
        Debug.Log("Pause with velocity=" + _rigidBody.velocity + " & angularVelocity=" + _rigidBody.angularVelocity);
        _pausedVelocity = _rigidBody.velocity;
        _pausedAngularVelocity = _rigidBody.angularVelocity;
        _rigidBody.isKinematic = true;
    }

    public void OnMouseExit() 
    {
        _rigidBody.isKinematic = false;
        _rigidBody.velocity = _pausedVelocity;
        _rigidBody.angularVelocity = _pausedAngularVelocity;
        Debug.Log("Resume with velocity=" + _rigidBody.velocity + " & angularVelocity=" + _rigidBody.angularVelocity);
    }
}
使用UnityEngine;
使用系统集合;
公共课堂暂停:单一行为{
私人刚体;
无效唤醒()
{
_刚体=Ball.GetComponent();
}
专用矢量3_暂停速度;
专用矢量3_暂停角速度;
在MouseCenter()上公开作废
{
Debug.Log(“暂停速度=“+\u rigidBody.velocity+”&angularVelocity=“+\u rigidBody.angularVelocity”);
_pausedVelocity=_rigidBody.velocity;
_pausedAngularVelocity=_rigidBody.angularVelocity;
_rigidBody.IsKinetic=真;
}
在mouseExit()上的公共void
{
_rigidBody.isKinetic=false;
_刚体速度=_暂停速度;
_刚体角度速度=_暂停角度速度;
Debug.Log(“使用velocity=“+\u rigidBody.velocity+”&angularVelocity=“+\u rigidBody.angularVelocity继续”);
}
}
基本上,这段代码附加到一个带有collision2D组件的空文件,当鼠标悬停在上面时,它会打印pause,当鼠标移开时,它会打印play。所以,所有的工作,我只需要找出我可以暂停刚体2d


提前谢谢

如果你想暂停所有游戏对象,你可以设置为0


如果您只想暂停一个游戏对象,暂停时存储速度和角速度并设置为true,恢复时恢复原始值

public class PausableRigidbody : MonoBehaviour {

    private Rigidbody _rigidBody;
    void Awake () 
    {
        _rigidBody = this.GetComponent<Rigidbody>();
    }

    private Vector3 _pausedVelocity;
    private Vector3 _pausedAngularVelocity;

    public void Pause() 
    {
        Debug.Log("Pause with velocity=" + _rigidBody.velocity + " & angularVelocity=" + _rigidBody.angularVelocity);
        _pausedVelocity = _rigidBody.velocity;
        _pausedAngularVelocity = _rigidBody.angularVelocity;
        _rigidBody.isKinematic = true;
    }

    public void Resume() 
    {
        _rigidBody.isKinematic = false;
        _rigidBody.velocity = _pausedVelocity;
        _rigidBody.angularVelocity = _pausedAngularVelocity;
        Debug.Log("Resume with velocity=" + _rigidBody.velocity + " & angularVelocity=" + _rigidBody.angularVelocity);
    }
}

如何将该代码实现到上面的代码中?将Pause()替换为onmouseinter(),将Resume()替换为onmousexit()。谢谢,还有一件事,这个脚本位于我尝试暂停的另一个对象上。我已经做了我能做的,但我不确定下一步该做什么,因为这给了我一个错误。根据您的代码建议,我已将描述中的代码更新为现在的代码。我遇到的错误是:Assets/Scripts/Pause.cs(10,35):错误CS0120:访问非静态成员'UnityEngine.Component.GetComponent(System.Type)'需要对象引用,您无法运行
Ball.GetComponent()
,因为代码无法决定要停止哪个Ball实例。您需要一个对Ball实例的引用。Google提供如何使用SerializeField的教程。
public class PausingView : MonoBehaviour {

    [SerializeField]
    private PausableRigidbody _pausableRigidbody;

    public void OnMouseEnter() 
    {
        _pausableRigidbody.Pause();
    }

    public void OnMouseExit() 
    {
        _pausableRigidbody.Resume();
    }
}