c# - 改变 Transform.Position.Y
问题描述
-150
我有一个游戏对象,每次用户按下向下箭头时,我都想在其 Y 轴上移动它,以便模仿它向下移动。这是我的代码:
public GameObject groupHolder;
public float groupHolderY = 100f;
public Vector3 groupPos;
...
if(Input.GetKeyDown("down"))
{
//groupHolder.transform.position = new Vector3(transform.position.x, 20, transform.position.z);
groupPos = groupHolder.transform.position;
float newX = groupHolder.transform.position.x;
float newY = groupHolder.transform.position.y - 150f;
float newZ = groupHolder.transform.position.z;
groupHolder.transform.position = new Vector3(newX, newY, newZ);
}
当我按下向下箭头键时,我的游戏对象会从我的屏幕上消失。我检查了检查器,它的 Y 轴现在是19097
. 如果我尝试-1f
将 Y 轴更改为27
然后更改为155
.
到底是怎么回事?150
每次按下向下键时,我只想从其 Y 轴中减去 a :
Y=0 > (向下键按下) > Y=-150 >(向下键按下) > Y=-300 > (向下键按下) > Y=-450
我怎样才能实现这样的目标?谢谢!
顺便说一句,我正在开发 2D 游戏。
解决方案
乘以deltaTime
这是因为如果您每帧检查一个 keydown 事件,每秒运行 30-60 帧,按下一个键一秒钟将连续应用该转换 30-60 次。
public GameObject groupHolder;
public float groupHolderY = 100f;
public Vector3 groupPos;
...
if(Input.GetKeyDown("down"))
{
//groupHolder.transform.position = new Vector3(transform.position.x, 20, transform.position.z);
groupPos = groupHolder.transform.position;
float newX = groupHolder.transform.position.x;
float newY = groupHolder.transform.position.y - (150f * Time.deltaTime);
float newZ = groupHolder.transform.position.z;
groupHolder.transform.position = new Vector3(newX, newY, newZ);
}
但是,当按键被按下时,上面会进行平滑的移动。如果您希望每次点击一个动作,您需要像这样创建一个布尔值:
public GameObject groupHolder;
public float groupHolderY = 100f;
public Vector3 groupPos;
protected bool moved = false;
...
if(Input.GetKeyUp("down"))
moved = false;
if(Input.GetKeyDown("down") && !moved)
{
moved = true;
//groupHolder.transform.position = new Vector3(transform.position.x, 20, transform.position.z);
groupPos = groupHolder.transform.position;
float newX = groupHolder.transform.position.x;
float newY = groupHolder.transform.position.y - 150f;
float newZ = groupHolder.transform.position.z;
groupHolder.transform.position = new Vector3(newX, newY, newZ);
}
推荐阅读
- groovy - 如何将每个采样器的开始和结束时间捕获到变量中,并将其作为输入传递给采样器请求?
- sublimetext3 - 是否可以为每个项目定义不同的配色方案?
- android - EditText 文本下的行是如何创建的?
- javascript - 有没有办法让一个重定向的 html 页面作为图像的来源?
- aws-sdk-js - AWS JS SDK S3 使用自定义配置文件
- laravel - 如何在 Laravel 资源中发送特定字段
- c# - Aspose.Word .Net Core 3 设置问题
- c# - 可以使用自动映射器对资源中的数据进行分组吗?
- nginx - nginx为位置a提供404,而位置b工作正常
- tr - busybox和Ubuntu / Raspbian / etc之间“破折号”(-)上“tr”命令的行为差异