代码之家  ›  专栏  ›  技术社区  ›  Gacut

投掷物体时,它只会向右移动

  •  0
  • Gacut  · 技术社区  · 2 年前

    我正在做一个关于扔球的游戏。鼠标光标是一个点,玩家应该把它扔到哪里。

    向右投球看起来还可以(不要介意我给球施加的力,它被设置为低,所以我不会为了gif目的去追它): Throwing right

    但当我指向左侧时,它仍会生成球,力会添加到右侧:

    Throwing left

    我想知道,如何编辑我的代码,所以抛出的球的方向与光标位置相关。

    我对Player GameObject的OnFire方法如下所示:

        void OnFire(InputValue value)
    {
        if(!playerHasABall) {return;}
        Instantiate(ball, ballSpawn.position, transform.rotation);
        playerHasABall = false;
    }
    

    给球一个力的脚本如下所示(它被放在球的游戏对象上):

    {
        [SerializeField] float ballForce = 20f;
    
    
        void Start() 
        {
            Throw();    
        }
    
        public void Throw()
        {
            GetComponent<Rigidbody2D>().AddForce(new Vector2(ballForce * Time.deltaTime, 0f), ForceMode2D.Impulse);
        } 
     }
    

    我将非常感谢任何朝着一个好的方向推动(没有双关语的意图)

    1 回复  |  直到 2 年前
        1
  •  1
  •   KiynL    2 年前

    在上面的代码中,您没有指向鼠标 new Vector2 axis (ballForce * Time.deltaTime, 0f) 始终为您提供正确的方向和 Time.deltaTime 系数大大降低了投掷能力。要解决此问题,请使用以下代码减少功耗并解决方向问题。

    [SerializeField] float ballForce = 5f;
    public void Throw()
    {
        var mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        var direction = (mousePosition - transform.position);
        direction.z = transform.position.z;
        transform.right = direction.normalized;
    
        GetComponent<Rigidbody2D>().AddForce(transform.right*ballForce, ForceMode2D.Impulse);
    }