【发布时间】:2020-03-08 17:02:53
【问题描述】:
我正在学习 Unity 中的 Udemy 2D 教程来创建 2D 像素游戏。语言是 C#。我只是复制代码,因为我不熟悉编码,但是我将代码复制到 T 并且我的一个 GameObjects 出现问题。目标是每次启动我的剑游戏对象时都销毁它,否则我的层次结构中会出现一堆副本。副本不会自我毁灭。 如果我没看错,我可能不是因为我不是程序员,这源于另一段代码,说明角色在剑启动时无法移动,但是此复选框不会切换回 canMove=真的,让角色卡在原地。当 canMove = false 时,Sword 游戏对象不会破坏。用我的代码可能更容易解释。
这是我的 Player canMove 代码:
void Attack()
{
canMove = false;
GameObject newSword = Instantiate(sword, transform.position, sword.transform.rotation);
#region //SwordRotation
int swordDir = anim.GetInteger("dir");
if(swordDir == 0)
{
newSword.transform.Rotate(0, 0, 0);
newSword.GetComponent<Rigidbody2D>().AddForce(Vector2.up * thrustPower);
}
else if (swordDir == 1)
{
newSword.transform.Rotate(0, 0, 180);
newSword.GetComponent<Rigidbody2D>().AddForce(Vector2.up * -thrustPower);
}
else if (swordDir == 2)
{
newSword.transform.Rotate(0, 0, 90);
newSword.GetComponent<Rigidbody2D>().AddForce(Vector2.right * -thrustPower);
}
else if (swordDir == 3)
{
newSword.transform.Rotate(0, 0, -90);
newSword.GetComponent<Rigidbody2D>().AddForce(Vector2.right * thrustPower);
}
#endregion
}
void Movement()
{
if (!canMove)
return;
if (Input.GetKey(KeyCode.W))
{ transform.Translate(0, speed * Time.deltaTime, 0); anim.SetInteger("dir", 0); anim.speed = 1; }
else if (Input.GetKey(KeyCode.S))
{ transform.Translate(0, -speed * Time.deltaTime, 0); anim.SetInteger("dir", 1); anim.speed = 1; }
else if (Input.GetKey(KeyCode.A))
{ transform.Translate(-speed * Time.deltaTime, 0, 0); anim.SetInteger("dir", 2); anim.speed = 1; }
else if (Input.GetKey(KeyCode.D))
{ transform.Translate(speed * Time.deltaTime, 0, 0); anim.SetInteger("dir", 3); anim.speed = 1; }
else
anim.speed = 0;
}
还有我的剑码:
public class Sword : MonoBehaviour
{
float timer = .15f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
timer -= Time.deltaTime;
if (timer <= 0)
{
GameObject.FindGameObjectWithTag("Player").GetComponent<Player>().canMove = true;
Destroy(gameObject);
}
}
}
【问题讨论】:
-
你的剑启用/激活了吗?它在层次结构中是灰色的吗?
-
@ErikOverflow 是的,它已启用且未变灰