我目前在击球和增加速度方面遇到了麻烦。我们的想法是,按住“SPACE”的时间越长,球的行进时间越长。
到目前为止,我对玩家控制的内容是:
public class PlayerControl : MonoBehaviour {
public float speed = 0f;
Vector3 enVector = new Vector3(10,0,0);
public bool laserDirection = false;
public Transform firePoint;
public GameObject RedBall;
public PlayerControl player;
// Use this for initialization
void Start () { }
// Update is called once per frame
void Update ()
{
// Press CTRL to move the platform under the ball and shoot a laser (NOT FINISHED)
if (Input.GetKey (KeyCode.LeftControl) && laserDirection == false)
{
transform.Translate(enVector * -speed * Time.deltaTime);
}
else if(Input.GetKey (KeyCode.LeftControl) && laserDirection == true)
{
transform.Translate(enVector * speed * Time.deltaTime);
}
// Sets the direction the platform will travel if pressed
if(Input.GetKey (KeyCode.LeftArrow))
{
laserDirection = false;
}
// Sets the direction the platform will travel if pressed
if(Input.GetKey (KeyCode.RightArrow))
{
laserDirection = true;
}
// Shoots a ball the longer you hold down
if(Input.GetKey (KeyCode.Space))
{
GetComponent<Rigidbody2D> ().velocity = new Vector2 (speed, GetComponent<Rigidbody2D> ().velocity.y);
Instantiate(RedBall, firePoint.position, firePoint.rotation);
}
}
// Destroy the ball
void OnTriggerEnter2D(Collider2D other)
{
Destroy (gameObject);
}
}
如果您看到获取空间按钮的位置,您会看到我为拍摄制作的代码。这只会使球以我选择的设定速度向右移动。
这是为了改变球的方向(围绕大黑球移动):
// THE DIRECTION OF THE BALL SCRIPT
public class RedBall : MonoBehaviour
{
public Transform target;
void Update()
{
// Moves the ball launcher to the left
if (Input.GetKey (KeyCode.LeftArrow))
{
transform.RotateAround (target.position, transform.forward, Time.deltaTime * 90f);
}
// Moves the ball launcher to the right
if (Input.GetKey (KeyCode.RightArrow))
{
transform.RotateAround (target.position, -transform.forward, Time.deltaTime * 90f);
}
}
}
我正在努力弄清楚如何让球射向所面对的方向,这取决于它在球形脚本中的翻译方式。此外,如何让球在击球时对重力做出反应,以及如何在持续时间越长的情况下进行射门,握住“SPACE”按钮。
如果有人知道如何做至少其中一件事,那将会有很大帮助!谢谢。
答案 0 :(得分:1)
(而不是使用Rigidbody2D.velocity尝试使用Rigidbody2D.AddForce。要打开和关闭重力,请使用Rigidbody2D-gravityScale。
我不太清楚你的意思是“我持有”SPACE按钮的时间越长。你想把它变成“弹簧”并在释放太空按钮时释放它吗?
编辑: 也许这样做。按下按钮时使初始力成为变量并“加载”,当释放时,实例化球并向其添加力。
我把它从脑袋中打出来,没有测试,所以也许它不会开箱即用,但方向应该是明确的
if (Input.GetKey(KeyCode.Space))
{
initialForce += 0.1f;
GetComponent<Rigidbody2D>().velocity = new Vector2(speed, GetComponent<Rigidbody2D>().velocity.y);
Instantiate(RedBall, firePoint.position, firePoint.rotation);
}
else
{
if (initialForce > 0)
{
var ball = (GameObject)Instantiate(RedBall, firePoint.position, firePoint.rotation);
ball.GetComponent<Rigidbody2D>.AddForce(firePoint.rotation * Vector2.one * initialForce);
}
initialForce = 0f;
}
答案 1 :(得分:-1)
所以我正在努力弄清楚如何让球射门 它面向的方向取决于它的翻译方式 在球的脚本。
按照您想拍摄的方向乘以速度:
// Shoots a ball the longer you hold down
if(Input.GetKey (KeyCode.Space)) {
GetComponent<Rigidbody2D> ().AddForce(transform.forward * speed);
Instantiate(RedBall, firePoint.position, firePoint.rotation);
}
另外看看对象池,你真的不应该实例化射弹,它需要很多内存来实例化并在执行过程中一直销毁。
如何在击球时使球具有重力
protected float gravity = 1f;
protected bool isShot = false;
// Update is called once per frame
void Update ()
{
if(isShot)
rigidBody.velocity.z += gravity * Time.deltaTime;
}
按住“SPACE”按钮的时间越长,拍摄时间越长。
public float rate = 1.0f;
protected float power = 0f;
// Update is called once per frame
void Update ()
{
if (Input.GetKeyUp (KeyCode.Space))
{
UsePower(power);
power = 0f;
}
if (Input.GetKey (KeyCode.Space))
{
power += rate * Time.deltaTime;
}
}
void UsePower (float _power)
{
// Use power here
}