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