物理问题统一3d

本文关键字:3d 问题 | 更新日期: 2023-09-27 18:05:34

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

当它被释放时,弹簧正好在球体内部重叠,我需要球向前移动得更快或更慢,这取决于power变量中的功率大小。

我不能使用刚体。当弹簧需要使球移动时加力。

脚本说明:

->如果弹簧完全伸出(释放),它的值应该是-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");
            }
        }   
    }
}

我怎样才能使它被击中向前向右使用弹簧取决于功率变量的值?

物理问题统一3d

将力施加到弹簧(或弹簧的某些部分,如顶部的单独网格)上,物理引擎应该完成其余的工作。