移动的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;
}
}
}
您必须为转换组件分配新的位置。
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
的内容。