【问题标题】:unity moveposition of my bullet doesnt work我的子弹的统一移动位置不起作用
【发布时间】:2017-11-06 23:34:40
【问题描述】:

MovePosition 函数在我的脚本中不起作用: 我试过让它变质并增加力量。我也尝试过在检查器中增加速度。我尝试增加力量并使更新功能成为“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);

生成的球体不会移动。

【问题讨论】:

  • 如果上面的代码放在Update()中,子弹会在每一帧的相同位置(在这种情况下为Bullet_Emitter)实例化,所以你不会看到它在移动,它只是生成的在每一帧中一次又一次。为了解决这个问题,您可以将实例化代码放在 Update() 之外,并将项目符号移到 Update() 中。

标签: c# unity3d


【解决方案1】:

您应该将脚本应用到您的子弹预制件中,并在该脚本的 FixedUpdate 方法中添加移动代码,以便每个子弹自行处理其移动逻辑。

【讨论】:

    【解决方案2】:

    根据Unity Docs Rigidbody.MovePosition 创建平滑运动,因此需要在固定更新的每一帧调用它。

    统一文档中的示例:

    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);
        }
    }
    

    如果你想要传送刚体,你应该看看Rigidbody.position

    【讨论】:

      【解决方案3】:
      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);
      

      【讨论】:

      • 不鼓励仅使用代码回答,因为它们没有为未来的读者提供太多信息,请对您所写的内容提供一些解释
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多