正如标题所示,我正在努力让我的预制移动:(对于我的预制,我有精灵渲染组件,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部分得到延迟。例如;如果我是面向右,它将产生面向左的第一个投射物,然后下一个投射物将永远是右。如果去尝试从那里产卵它左边,它会产卵一个右边,然后休息左边。如此等等。
这件事让我失去了最后一个脑细胞。请帮帮我谢谢你。
1条答案
按热度按时间carvr3hs1#
攻击是一个预设。你不能给预置赋值,你需要访问在场景中示例化的游戏对象来移动它。
最好的方法是在示例化时将其分配给游戏对象,如下所示
您可以使用my_spawned游戏对象来获取刚体并为其分配速度。
如果您需要更多的代码示例,请查看Unity Instantiate上的这篇文章。