我正在为我的学习做一个游戏,但我已经看过我的讲师并且几个小时都没有找到解决方案。游戏的工作原理如下:
用户按住Space按钮,弹簧返回一定量,同时每个Time.deltaTime(每秒)一个称为功率的变量上升一定量,以计算弹簧返回球的速度。
在这个阶段,我有一个Box Collider从弹簧物体出来,它的触发功能在其Out位置关闭,一旦它返回击中球以打开,以避免任何对撞机故障。
当球回来时它会激活对撞机,但对手不会推球。 我需要它根据弹簧上连接的Power变量以不同的功率推动球。这个项目的一个条件是我可能没有直接控制球,因此消除了Rigidbody.AddForce方法,因为对撞机必须给球带来动量。 哦,两个物体都有刚体。
以下是我撰写的剧本如果有人有任何想法或知道如何解决问题我请在下面留下答案或评论。
public int Points;
public GameObject Spring;
public float PowerPerSecond; // Increment To Increase Power Every Second When Spring Is Being Compressed, this allows different sensitivities of spring for different levels.
void Start ()
{
// When Game Starts reset these values.
SpringPosition = "Spring Is In Out Position";
SpringStatus = 1;
Power = 0f;
Points = 0;
Spring = GameObject.Find("Spring");
Spring.collider.isTrigger = true;
}
void Update ()
{
//Report Error To Console if PowerPerSecond is At or Below A Value Of Zero
if (PowerPerSecond<0)
{
Debug.LogError("POWER PER SECOND VARIABLE CANNOT BE A NEGATIVE NUMBER!");
}
// If spring is in out position & user holds down the Space Button, Start Compressing the spring.
if (SpringStatus == 1 && Input.GetKey(KeyCode.Space))
{
SpringGettingCompressed();
}
if (Input.GetKeyUp(KeyCode.Space) && SpringStatus == 1)
{
SpringReleased();
}
}
void SpringGettingCompressed()
{
if (transform.position.x > -2.3)
{
transform.position = new Vector3 (transform.position.x - 0.05f * Time.deltaTime,transform.position.y,transform.position.z);
Power += PowerPerSecond * Time.deltaTime;
}
}
void SpringReleased()
{
if (transform.position.x <= -1.9){
transform.position = new Vector3 (transform.position.x + Power * Time.deltaTime, transform.position.y, transform.position.z);
SpringStatus = 2;
Spring.collider.isTrigger=false;
}
}
}
答案 0 :(得分:1)
你需要使用弹簧的刚体而不是变形。即使你不能直接操纵球的刚体,你仍然可以在弹簧上使用刚体.AddForce。通过直接改变transform.position,你绕过了统一的物理引擎。在做与物理相关的事情时也使用FixedUpdate()而不是Update()。