【问题标题】:Physics issue unity 3d物理问题统一 3d
【发布时间】:2014-05-28 07:10:52
【问题描述】:

我的统一游戏是弹簧,当您按住空格键时,弹簧会向后移动。当您松开空格键时,弹簧会根据按住空格键时产生的扭矩大小而释放。

当它被释放时,弹簧刚好在球体内重叠,我需要球根据 Power 变量中的功率量更快或更慢地向前移动。

我不能使用 Rigidbody.Addforce,因为弹簧需要使球移动。

脚本注释:

-> 如果弹簧完全伸出(释放),它的值应该是 -2 如果它保持在最大扭矩,它的 x 轴值应该是 -2.2


using UnityEngine;
using System.Collections;

public class SpringMechanics : MonoBehaviour {

public bool SpringIn;
public float Power;
public bool SpringReleased;
void Update()
{
    // IF THE SPRINGS X POSITION IS AT -2 OR ABOVE THAT VALUE IT WILL MARK THE SPRING IN VARIBALE AS TRUE

    if (transform.position.x >=-0.5f)
    {
        SpringIn = false;

    }
    else
    {
        SpringIn = true;
    }

    //CHECKS IF MOUSE SPACE BUTTON IS DOWN AND IF SO MOVES SPRING IN

    if (Input.GetKey (KeyCode.Space) && transform.position.x <= 2.3) {
                    Debug.Log ("Spring Being Compressed");

                    // Moves Spring Backwards when space key is down

        //rigidbody.velocity = new Vector3(rigidbody.velocity.x - 0.05f * Time.deltaTime,rigidbody.velocity.y,rigidbody.velocity.z);
                            transform.position = (new Vector3 (transform.position.x - 0.05f * Time.deltaTime, transform.position.y, transform.position.z));
                            // Adds 3 Units Of Power Every Second While Key Is Down
                            Power += 2 * Time.deltaTime;

            }
    //Releases Ball When Space Bar Is Up After Being Down

    if (Input.GetKeyUp (KeyCode.Space))
    {
        SpringReleased = true;
    }

    if (SpringReleased == true) 
    {
        FireBall();

    }
}

//When Firing Ball Executer Below Function
void FireBall()
{
    if (transform.position.x <= -2){
        rigidbody.velocity = new Vector3(rigidbody.velocity.x + Power * Time.deltaTime,rigidbody.velocity.y,rigidbody.velocity.z);
        //transform.position = (new Vector3 (transform.position.x + Power * Time.deltaTime, transform.position.y, transform.position.z));
        transform.position = (new Vector3 (-2, transform.position.y, transform.position.z));

        if (transform.position.x >= -2 && SpringReleased == true){
            SpringReleased=false;
            Power = 0;
            rigidbody.velocity = new Vector3(0,0,0);
            Debug.Log ("Reset Spring");

            }
        }   
    }
}

如何根据功率变量的值使用弹簧将其向右击打?

【问题讨论】:

  • 有人知道我可以在这里做什么吗?
  • 取决于,你的问题是什么?
  • @TimCastelijns 我的统一游戏是一个弹簧,当您按住空格键时,弹簧会向后移动。当您释放空格键时,弹簧会根据按住空格键时产生的扭矩量释放。当它被释放时,弹簧刚好在球体内重叠,我需要球更快或更慢地向前移动,具体取决于 Power 变量中的功率量。我不能使用 Rigidbody.Addforce,因为弹簧需要使球移动。
  • 我读了那部分,但我没有看到任何问题
  • @TimCastelijns 如何根据功率变量的值使用弹簧将其向前击中。

标签: c# unity3d physics


【解决方案1】:

改为将力施加到弹簧(或弹簧的某些部分,如顶部的单独网格),其余的由物理引擎完成。

【讨论】:

  • 力施加到弹簧上是因为脚本附在上面
  • 我把它修好了,现在它只是给球打了一个小拳,一点也不硬。
猜你喜欢
  • 2015-09-20
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多