我目前正在制作一个足球比赛(美国),我正在研究一名铲球技师。现在只有两件事碰到彼此不起作用,因为角色在被迫在地面上后会继续移动。为了让角色在与其他刚体接触后停止,我认为最好的方法是使用Time.Timescale = 0;
。然而,这个问题是2刚体然后只是通过另一个来解决这个问题我认为最好的方法是在1秒碰撞后将时间刻度设置为0。我怎么能这样做?
反馈总是受到赞赏;)
答案 0 :(得分:1)
调用一个在团结内推迟的方法,假设它是一个单一的行为。
Invoke方法是你所追求的 http://docs.unity3d.com/ScriptReference/MonoBehaviour.Invoke.html
但是请注意Time.Timescale
会影响一切,而不是本地的,并且很可能无法获得您所追求的效果。将gameObject的Velocity设置为零应得到所需的结果。
var rb = GetComponent<Rigidbody>();
rb.velocity = Vector3.zero;
答案 1 :(得分:1)
Time.Timescale会影响你的整个游戏。
实际上Time.Timsescale是
时间过去的比例。这可用于慢动作效果。
当timeScale为1.0时,时间和实时一样快。当timeScale为0.5时,时间比实时慢2倍。
当timeScale设置为零时,如果您的所有功能都与帧速率无关,游戏基本上会暂停。
嗯,你能做的是,
在附加到Rigidbody's
GameObject的脚本中,您可以实现OnCollisionEnter
。
Rigidbody _rb;
void Start()
{
_rb = GetComponent<Rigidbody>();
}
void OnCollisionEnter(Collision col){
_rb.velocity = Vector3.zero;
}
即使与地面发生碰撞,它也会阻止你的玩家。 :)
所以你可以进一步修改碰撞条件,就像身体撞击某个特定物体一样,你可以通过tag
或其他一些属性来检测它。
void OnCollisionEnter(Collision col){
if (col.gameObject.tag == "TAG_OF_SPECIFIC_OBJECT")
_rb.velocity = Vector3.zero;
}