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