【问题标题】:Have object being displaced, want to randomize time of displacement within set parameters, then loop that有物体被位移,想要在设定的参数内随机化位移时间,然后循环
【发布时间】:2016-03-24 03:39:13
【问题描述】:

我最初发生了一个转换(施加的力移动对象),然后用户使用DownArrow 对其进行响应。我希望最初的transform.up 在设定的时间间隔内随机发生,并不断循环,以便用户可以继续响应它。

using UnityEngine;
using System.Collections;

public class thingBumps : MonoBehaviour {

public float thrust;
public Rigidbody rb;

void Start() {
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    rb.AddForce (transform.up * thrust, ForceMode.Impulse);
    if (Input.GetKey(KeyCode.DownArrow))
        rb.AddForce(-transform.up * thrust,ForceMode.Impulse);
}

}

我已经尝试过 Coroutines 和 InvokeRepeating,但我很难过,我已经阅读了有关该主题的每个线程。我只希望第一个transform.up 以随机时间间隔重复,以便用户可以继续响应它(使用他们自己的transform.up 转换)。有谁知道如何做到这一点?

感谢任何建议。

【问题讨论】:

  • 你所说的“在设定的时间间隔内的随机时间,然后循环”是什么意思?

标签: c# loops random unity3d


【解决方案1】:

我想你想随机“踢”物体。你可以通过一些脚本来做到这一点。像这样安排下一次踢球:

public class thingBumps : MonoBehaviour {

public float thrust = 10; // give some default value 
Rigidbody rb;// you dont need it to be public
float nextKick = 0;
float kickTimer = 0;
public float MinKickTime=1, MaxKickTime=10;//seconds

void Start() {
    rb = GetComponent<Rigidbody>();
    nextKick = Random.Range(MinKickTime,MaxKickTime);
}

void FixedUpdate()
{
    kickTimer+=Time.fixedDeltaTime;
    if(kickTimer>nextKick)
    {
         rb.AddForce (transform.up * thrust, ForceMode.Impulse);
         kickTimer=0;
         nextKick = Random.Range(MinKickTime,MaxKickTime);
    }
    if (Input.GetKey(KeyCode.DownArrow))
        rb.AddForce(-transform.up * thrust,ForceMode.Impulse);
}

}

链接:

【讨论】:

  • 哇!非常感谢,这工作得很好。这也只是解决问题的一个教训。这不是 Unity 文档中的千篇一律。这是您自己设计的创意作品。作为一个初学者程序员,我对此印象非常深刻。感谢您今天的帮助!
猜你喜欢
  • 2011-11-12
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多