移动的Unity C#脚本不起作用

本文关键字:脚本 不起作用 Unity 移动 | 更新日期: 2023-09-27 18:01:04

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

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

移动的Unity C#脚本不起作用

您必须为转换组件分配新的位置。

void yuru (){
    v2Pozisyon = this.transform.position;
    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;
}

你也可以用hiz乘以Time.deltaTime。现在你的移动速度将取决于帧速率。FPS越高,速度越快;FPS越低,速度越慢。

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

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

您可能应该更改transform.localPosition。更改localPosition而不是position的原因是,很明显,您仍然希望明确您正在相对于对象的父坐标系移动对象,而您可能无论如何都在这样做。

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

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的内容。