Visual Studio 我正在使用示例化函数复制预制件,当它被召唤时,它没有速度

i34xakig  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(71)

正如标题所示,我正在努力让我的预制移动:(对于我的预制,我有精灵渲染组件,Boxcolider 2D组件设置为触发器,刚体2D组件。在一个单独的对象,这是一个孩子,我的球员,我有一个脚本,其中包含一个数组包含我的预制。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Attack : MonoBehaviour
{
   public int damage;
   private float horizontal;
   public Transform player;
   public SpriteRenderer renderPlayer;
   public float speed = 60f;
   public GameObject[] attacks; 

    void Start()
    {
        
    }
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            

          if(player.GetComponent<SpriteRenderer>().flipX == true)
          {
            attacks[0].GetComponent<SpriteRenderer>().flipY = true;
            Instantiate(attacks[0], player.transform.position, attacks[0].transform.rotation);
            attacks[0].GetComponent<Rigidbody2D>().velocity = new Vector2(1f * speed, attacks[0].GetComponent<Rigidbody2D>().velocity.y);
            

          }
          else if(player.GetComponent<SpriteRenderer>().flipX == false)
          {
            
            attacks[0].GetComponent<SpriteRenderer>().flipY = false;
            Instantiate(attacks[0], player.transform.position, attacks[0].transform.rotation);
            attacks[0].GetComponent<Rigidbody2D>().velocity = new Vector2(-1f * speed, attacks[0].GetComponent<Rigidbody2D>().velocity.y);
            

          }
        
        }

        
    }
}

这是我写的脚本代码。到目前为止,几乎一切都按计划进行。当我的玩家面向右时,投射物会面向右。对于左侧,反之亦然。
然而,在产生抛射体时,抛射体不移动。我该怎么解决这个问题对我来说,代码似乎很好,即使它可能是无效的。
谢谢曾经能帮助的人!
我曾试图改变我的if语句的操作顺序。将if语句构造成这样;

void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            

          if(player.GetComponent<SpriteRenderer>().flipX == true)
          {
            Instantiate(attacks[0], player.transform.position, attacks[0].transform.rotation);
            attacks[0].GetComponent<SpriteRenderer>().flipY = true;
            attacks[0].GetComponent<Rigidbody2D>().velocity = new Vector2(1f * speed, attacks[0].GetComponent<Rigidbody2D>().velocity.y);
            

          }
          else if(player.GetComponent<SpriteRenderer>().flipX == false)
          {
            Instantiate(attacks[0], player.transform.position, attacks[0].transform.rotation);
            attacks[0].GetComponent<SpriteRenderer>().flipY = false;
    attacks[0].GetComponent<Rigidbody2D>().velocity = new Vector2(-1f * speed, attacks[0].GetComponent<Rigidbody2D>().velocity.y);
            

          }
        
        }

        
    }

我假设问题是由于我的示例化没有放在if语句的第一位。然而,当我测试这个修复我的flipY部分得到延迟。例如;如果我是面向右,它将产生面向左的第一个投射物,然后下一个投射物将永远是右。如果去尝试从那里产卵它左边,它会产卵一个右边,然后休息左边。如此等等。
这件事让我失去了最后一个脑细胞。请帮帮我谢谢你。

carvr3hs

carvr3hs1#

攻击是一个预设。你不能给预置赋值,你需要访问在场景中示例化的游戏对象来移动它。
最好的方法是在示例化时将其分配给游戏对象,如下所示

my_spawned=Instantiate(prefab,transform.position,Quaternion.identity) as GameObject;

您可以使用my_spawned游戏对象来获取刚体并为其分配速度。
如果您需要更多的代码示例,请查看Unity Instantiate上的这篇文章。

相关问题