Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一教程-游戏对象赢得';不毁灭_C#_Unity3d_Destroy - Fatal编程技术网

C# 统一教程-游戏对象赢得';不毁灭

C# 统一教程-游戏对象赢得';不毁灭,c#,unity3d,destroy,C#,Unity3d,Destroy,我在Unity中遵循我的2D教程创建2D像素游戏。语言是C#。我只是简单地复制代码,因为我不熟悉编码,但是我将代码复制到了T,我的一个游戏对象出现了问题。目标是每次我启动剑类游戏时都要摧毁它,否则会有一堆副本出现在我的层次结构中。复制品不会自我毁灭。 如果我没有读错,这可能不是因为我不是程序员,这是由另一段代码产生的,该代码说明在剑发射时角色无法移动,但是该复选框不会切换回canMove=true,使角色卡在原地。当canMove=false时,剑类游戏对象不会被摧毁。用我的代码解释可能更容易

我在Unity中遵循我的2D教程创建2D像素游戏。语言是C#。我只是简单地复制代码,因为我不熟悉编码,但是我将代码复制到了T,我的一个游戏对象出现了问题。目标是每次我启动剑类游戏时都要摧毁它,否则会有一堆副本出现在我的层次结构中。复制品不会自我毁灭。 如果我没有读错,这可能不是因为我不是程序员,这是由另一段代码产生的,该代码说明在剑发射时角色无法移动,但是该复选框不会切换回canMove=true,使角色卡在原地。当canMove=false时,剑类游戏对象不会被摧毁。用我的代码解释可能更容易

这是我的玩家可以移动的代码:

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;
    }
void攻击()
{
canMove=false;
GameObject newSword=实例化(剑、变换.位置、剑、变换.旋转);
#地区//
int swordir=anim.GetInteger(“dir”);
如果(swordDir==0)
{
newword.transform.Rotate(0,0,0);
newSword.GetComponent().AddForce(Vector2.up*purstpower);
}
else if(swordir==1)
{
newword.transform.Rotate(0,0180);
newSword.GetComponent().AddForce(Vector2.up*-strushpower);
}
否则如果(swordir==2)
{
newword.transform.Rotate(0,0,90);
newSword.GetComponent().AddForce(Vector2.right*-strushpower);
}
否则如果(swordir==3)
{
newword.transform.Rotate(0,0,-90);
newSword.GetComponent().AddForce(Vector2.right*pustpower);
}
#端区
}
空位移动()
{
如果(!可以移动)
返回;
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(速度*Time.deltaTime,0,0);anim.SetInteger(“dir”,3);anim.speed=1;}
其他的
动画速度=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);
    }
    }
}
公共类剑:单一行为
{
浮动定时器=.15f;
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
timer-=Time.deltaTime;

如果(计时器我在我的环境中检查了剑代码,并且计时器似乎工作正常。 如果有任何问题,请检查Player对象是否具有分配给它的标记“Player”。如果无法找到所需的对象,代码可能会停止在那里

可以在inspector中的标记选项旁边的下拉列表中找到分配标记的位置

如果您已经这样做了,请检查是否有任何其他对象具有分配给它的“Player”标记。FindGameObjectWithTag将只查找一个对象,可能不是您要查找的对象。 如果有疑问,请在代码中的以下行中放置:

gameobjectplayer=GameObject.FindGameObjectWithTag(“player”);
Debug.Log(player.name);
这将返回您试图查找的对象的名称。 如果返回为空,则无法找到它。

Destroy(gameObject);
在剑代码中。将其更改为
Destroy(this.gameObject);


剑现在不见了。

你的剑启用了/激活了吗?它在层次结构中变灰了吗?@ErikOverflow是的,它启用了而没有变灰
这个
是不相关的。任何代码的上下文都已经是
这个
这个
了。gameObject
gameObject
指的是相同的东西(除非)。