用于移动的Unity C#脚本无效

时间:2015-07-05 23:08:15

标签: c# oop unity3d

我正在学习OOP(我不知道它是如何调用的,这可能是错误的)。今天我想做一个非常基本的游戏,但我的代码不起作用。当用户按向左箭头或向右箭头时,我想左右移动对象。但它不起作用。这是一个2D项目。这是代码,抱歉我的英语不好。

using UnityEngine;
using System.Collections;

public class p1 : MonoBehaviour {

    public float hiz = 0.1f;
    Vector2 v2Pozisyon;

    void Start () {

    }

    void Update () {
        yuru ();
    }

    void yuru (){
        if (Input.GetKey (KeyCode.LeftArrow)) {
            v2Pozisyon.x = this.transform.position.x - hiz;
        }
        if (Input.GetKey (KeyCode.RightArrow)) {
            v2Pozisyon.x = this.transform.position.x + hiz;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

您必须为转换组件指定新位置。

matrix2

您还可以将 hiz 乘以 Time.deltaTime 。现在你的移动速度将取决于帧速率。当您的FPS更高时更快,而FPS更低则更慢。

答案 1 :(得分:1)

如果要移动对象,则必须指定转换的位置变量。

void yuru (){
    if (Input.GetKey (KeyCode.LeftArrow)) {
        v2Pozisyon.x = this.transform.position.x - hiz;
    }
    if (Input.GetKey (KeyCode.RightArrow)) {
        v2Pozisyon.x = this.transform.position.x + hiz;
    }
    this.transform.position = v2Pozisyon;
}

答案 2 :(得分:0)

您应该更改transform.localPosition。更改localPosition而不是position的原因是,很明显您仍然希望明确表示您正在移动对象&#39} ; s coord system,你可能还在做什么。

您应该做的另一件事是让您的移动框架独立,而不是设置每帧设置每秒速度的速度,或者您觉得合适的任何其他时间单位。然后你需要找出自上一帧以来经过了多少时间并将其用作移动中的增量。您的代码最终会看起来像这样:

using UnityEngine;
using System.Collections;

public class p1 : MonoBehaviour {

  public float hiz = 2.0f; //movement per second
  Vector2 v2Pozisyon;

  void Start () {

  }

  void Update () {
    yuru ();
  }

  void yuru (){
    if (Input.GetKey (KeyCode.LeftArrow)) {
        v2Pozisyon.x = this.transform.localPosition.x - hiz * Time.deltaTime;
    }
    if (Input.GetKey (KeyCode.RightArrow)) {
        v2Pozisyon.x = this.transform.localPosition.x + hiz * Time.deltaTime;
    }
  }
}

您可以阅读有关Time.deltaTime here的更多信息。