Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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 - Fatal编程技术网

C# 我子弹的位置不起作用

C# 我子弹的位置不起作用,c#,unity3d,C#,Unity3d,MovePosition函数在我的脚本中不起作用: 我试着让它成为肯尼派并增加力量。我还尝试在inspector中增加速度。我尝试添加强制并使更新函数成为“FixedUpdate” 这是我的更新功能中的内容: if (target != null) { Action(target); GameObject TemporaryBulletHandler; TemporaryBulletHandl

MovePosition函数在我的脚本中不起作用: 我试着让它成为肯尼派并增加力量。我还尝试在inspector中增加速度。我尝试添加强制并使更新函数成为“FixedUpdate” 这是我的更新功能中的内容:

if (target != null)
             {
             Action(target);
             GameObject TemporaryBulletHandler;
             TemporaryBulletHandler = Instantiate(Sphere, Bullet_Emitter.transform.position, Bullet_Emitter.transform.rotation) as GameObject;

             Rigidbody TemporaryRigidBody;
             TemporaryRigidBody = TemporaryBulletHandler.GetComponent<Rigidbody>();

             float step = speed * Time.deltaTime;
             pos = Vector3.MoveTowards(transform.position, target.position, step);
             TemporaryRigidBody.MovePosition(pos);

             Destroy(TemporaryBulletHandler, 10.0f);
if(目标!=null)
{
行动(目标);
游戏对象临时BulletHandler;
TemporaryBulletHandler=实例化(球体、子弹头发射器.transform.position、子弹头发射器.transform.rotation)作为游戏对象;
刚体时间刚体;
TemporaryRigidBody=TemporaryBulletHandler.GetComponent();
浮动步长=速度*时间.deltaTime;
pos=矢量3.向(变换位置、目标位置、步长)移动;
时间刚体移动位置(pos);
销毁(临时BulletHandler,10.0f);
创建的球体不会移动。

根据刚体。MovePosition创建平滑移动,因此需要在固定更新的每一帧调用它

unity文档中的示例:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Vector3 teleportPoint;
    public Rigidbody rb;
    void Start() {
        rb = GetComponent<Rigidbody>();
    }
    void FixedUpdate() {
        rb.MovePosition(transform.position + transform.forward * Time.deltaTime);
    }
}
使用UnityEngine;
使用系统集合;
公共类示例类:单一行为{
公共向量3传送点;
公共刚体;
void Start(){
rb=GetComponent();
}
void FixedUpdate(){
rb.MovePosition(transform.position+transform.forward*Time.deltaTime);
}
}
如果你想传送刚体,你应该看看If(target!=null) { 行动(目标); 游戏对象临时BulletHandler; TemporaryBulletHandler=实例化(球体、子弹头发射器.transform.position、子弹头发射器.transform.rotation)作为游戏对象; 刚体时间刚体; TemporaryRigidBody=TemporaryBulletHandler.GetComponent(); 浮动步长=速度*时间.deltaTime; TemporaryRigidBody.MovePosition(transform.position+(target.position-transform.position).normalized*step); 销毁(临时BulletHandler,10.0f);
您应该将脚本应用于项目符号预制,并将移动代码添加到该脚本的FixedUpdate方法中,以便每个项目符号自行处理其移动逻辑。

如果将上述代码放在Update()中,则项目符号将在同一位置实例化(在本例中为bullet_发射器)在每一帧中,你不会看到它在移动,它只是在每一帧中一次又一次地生成。要解决这个问题,你可以将实例化代码放在Update()之外,并将项目符号放在Update()中。不鼓励只使用代码的答案,因为它们不会为将来的读者提供太多信息。请对你所写的内容提供一些解释
if (target != null)
 {
         Action(target);
         GameObject TemporaryBulletHandler;
         TemporaryBulletHandler = Instantiate(Sphere, Bullet_Emitter.transform.position, Bullet_Emitter.transform.rotation) as GameObject;

         Rigidbody TemporaryRigidBody;
         TemporaryRigidBody = TemporaryBulletHandler.GetComponent<Rigidbody>();

         float step = speed * Time.deltaTime;

         TemporaryRigidBody.MovePosition ( transform.position +(target.position - transform.position ). normalized * step );

         Destroy(TemporaryBulletHandler, 10.0f);