[英]Unity C# script for move is not working
我正在学习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;
}
}
}
您必须为转换组件指定新位置。
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;
}
您还可以通过Time.deltaTime乘HIZ。 现在你的移动速度将取决于帧速率。 当您的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
更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.