Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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# 如何在unity中移动游戏预制件_C#_Unity3d - Fatal编程技术网

C# 如何在unity中移动游戏预制件

C# 如何在unity中移动游戏预制件,c#,unity3d,C#,Unity3d,下面是我的代码,但我不知道为什么当\u lazerprefact生成时它不会移动,即使\u lazerSpeed!=0。我不知道问题出在哪里 if (Input.GetKeyDown(KeyCode.Space)) { Instantiate(_lazerPrefab, transform.position, Quaternion.identity); _lazerPrefab.transform.Translate(Vector3.up * _lazerSpeed * Time

下面是我的代码,但我不知道为什么当
\u lazerprefact
生成时它不会移动,即使
\u lazerSpeed!=0
。我不知道问题出在哪里

if (Input.GetKeyDown(KeyCode.Space))
{
    Instantiate(_lazerPrefab, transform.position, Quaternion.identity);
    _lazerPrefab.transform.Translate(Vector3.up * _lazerSpeed * Time.deltaTime);
}

您不能移动预置本身,因为预置就像用于构造真实对象实例的“蓝图”,因此得名。您确实可以移动这些实例。实例化()将返回对新创建的副本/实例的引用

if (Input.GetKeyDown(KeyCode.Space))
{
    GameObject new_lazer = Instantiate(_lazerPrefab, transform.position, Quaternion.identity);
    new_lazer.transform.Translate(Vector3.up * _lazerSpeed * Time.deltaTime);
}
但当您按空格键时,此代码将始终生成一个新实例。一旦您生成了第二个实例,您将不再移动第一个实例,因为第一个实例的
Translate
调用不再执行


所以你需要调整你的逻辑。在lazers上放置一个“向前移动/加速”脚本,或者将从
Instantiate()
返回的引用保留在一个列表中,并维护它们及其生存期。

Input.GetKeyDown(KeyCode.Space)
为true时,您仅移动
\u Lazerprefact

如果要在按空格键后多次移动
gameObject
,则需要将移动代码添加到gameObjects
Update()
方法本身

您需要将此脚本附加到
\u lazerprefab
游戏对象

脚本示例:

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共阶层障碍:单一行为{
[序列化字段]
专用浮球_lazerSpeed=10f;
私有void FixedUpdate(){
gameObject.transform.Translate(Vector3.up*_lazerSpeed*Time.deltaTime);
}
}

我们现在可以只调用
实例化()
函数,实例化的
游戏对象将在每一帧自动移动

移动呼叫示例:

if(Input.GetKeyDown(KeyCode.Space)){
实例化(_lazerprefact,transform.position,Quaternion.identity);
}