【问题标题】:Unity C# script for move is not working用于移动的 Unity C# 脚本不起作用
【发布时间】:2015-09-23 00:15:24
【问题描述】:

我正在学习 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;
        }
    }
}

【问题讨论】:

    标签: c# oop unity3d


    【解决方案1】:

    你必须为变换组件分配新的位置。

    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 较低时速度较慢。

    【讨论】:

      【解决方案2】:

      如果要移动对象,则必须分配给变换的位置变量。

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

      【讨论】:

        【解决方案3】:

        您可能应该更改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.deltaTimehere的信息。

        【讨论】:

          猜你喜欢
          • 2015-11-03
          • 1970-01-01
          • 1970-01-01
          • 2018-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多