【问题标题】:Moving a GameObject using tags not working Unity使用标签移动游戏对象不起作用 Unity
【发布时间】:2018-08-04 05:01:01
【问题描述】:

我知道这是一个相当菜鸟的问题,但无论如何,只有一种学习方法。

我在 Unity 中创建了一个空的 GameObject,附加了一个应该移动立方体(我的玩家)的脚本,并给我的立方体添加了“玩家”标签。创建多维数据集后,我希望能够移动多维数据集,而不必将脚本放在多维数据集本身上。当脚本在立方体上时,它可以毫无问题地移动(我知道它可能应该这样做,但是为了尝试学习新事物,我想这样做)。

Player Controller script

Cube properties

在无法通过 Google 找到答案后,非常感谢任何见解!

谢谢


更新!


这是现在作为文本的代码,因为它是被要求的。

    public class GameCoreController : MonoBehaviour {

            private GameObject PlayerMove;
            public Rigidbody rb;

            void Start ()
            {
                 PlayerMove = GameObject.FindGameObjectWithTag("Player");
                 rb = GetComponent<Rigidbody>(); 
            }

            void Update()
            {
                 // character movement 
                 if (Input.GetKey(KeyCode.W))
                 {
                      PlayerMove.transform.Translate(0, 0, 0.25f);
                 }

                 if (Input.GetKey(KeyCode.S))
                 {
                      PlayerMove.transform.Translate(0, 0, -0.25f);
                 }

                 if (Input.GetKey(KeyCode.A))
                 {
                      PlayerMove.transform.Translate(-0.25f, 0, 0);
                 }

                 if (Input.GetKey(KeyCode.D))
                 {
                      PlayerMove.transform.Translate(0.25f, 0, -0);
                 }
             }

我已经更新了之前的代码以包含 PlayerMove.transform.Translate,但我仍然遇到与立方体音符移动相同的问题。我还包含了带有立方体和 GameCoreController 的场景的屏幕截图;持有应该控制立方体的脚本的空游戏对象。

再次感谢大家的帮助。


更新 2!


删除立方体并将其重新插入到现在移动的场景中。谢谢大家的帮助。

【问题讨论】:

  • @Caramiriel 当然可以!刚刚更新了帖子。

标签: c# unity3d


【解决方案1】:

立方体不会移动的原因是因为在您的代码中您没有移动它的transform,而是移动了您将此脚本附加到的游戏对象的transform

transform.Translate 移动该脚本附加到的游戏对象的变换。所以如果你想移动立方体,你需要做的就是从transform.Translate更改为PlayerMove.transform.Translate,这将移动PlayerMove游戏对象的变换,这是你的立方体,上面有“玩家”标签

【讨论】:

  • 此外,此脚本仍需要附加到场景中的某处(它是一种MonoBehaviour!)。
  • @Draco18s 脚本附加到场景中的空游戏对象。这行得通吗?
  • @K.J.Shamberger 一个空的游戏对象是“场景中的某处”所以是的。
【解决方案2】:

^ 以上所有。另外,在屏幕截图中,您的刚体没有设置为“是运动的”。这意味着物理学仍将应用于它(如重力)。经验法则:如果你有一个运动物体,碰撞很重要,它需要一个刚体和一个对撞机。如果对象没有通过物理命令(例如,rigidbody.AddForce())移动,而是按原样操作变换,请将刚体“isKinomatic”属性设置为 true。

【讨论】:

  • 还有 rb= PlayerMove.GetComponent();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多