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
,则需要将移动代码添加到gameObjectsUpdate()
方法本身
您需要将此脚本附加到\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);
}