unity3d让物体移动固定距离
voidUpdate(){if(Input.GetKeyDown(KeyCode.UpArrow)){Vector3endpos=newVector3(person.tr...
void Update(){
if (Input.GetKeyDown(KeyCode.UpArrow)){
Vector3 endpos=new Vector3(person.transform.position.x,person.transform.position.y+10,0); person.transform.position = Vector3.Lerp(person.transform.position,endpos,Time.deltaTime *2);}
}
我想实现按一下键盘,让物体y轴移动+10,但是这样写完总是快速键盘按完没有移动到终点就停在半路了,去掉Input.GetKeyDown的话发现这样会使物体一直移动,因为要取物体当前位置然后y+10,所以会一直移动怎样才能让他只移动10个坐标后停止呢? 展开
if (Input.GetKeyDown(KeyCode.UpArrow)){
Vector3 endpos=new Vector3(person.transform.position.x,person.transform.position.y+10,0); person.transform.position = Vector3.Lerp(person.transform.position,endpos,Time.deltaTime *2);}
}
我想实现按一下键盘,让物体y轴移动+10,但是这样写完总是快速键盘按完没有移动到终点就停在半路了,去掉Input.GetKeyDown的话发现这样会使物体一直移动,因为要取物体当前位置然后y+10,所以会一直移动怎样才能让他只移动10个坐标后停止呢? 展开
展开全部
1、打开unity3d创建一个“立方体”,作为要移动的物体。
2、创建一个“红色立方体”作为要移动到的点位置。
3、在项目文件夹中创建一个“move_point”脚本文件。
4、在脚本创建三个变量,start(起始点)、end(目的点),speed是移动的速度,然后在update中使用movetowards方法进行移动。
transform.position=Vector3.MoveTowards(start.position,end.position,speed*Time.deltaTime);
5、把脚本放在立方体“Cube(1)”上面,在属性中start中放的是立方体"cube(1)",end中放的是红色立方体“cube(2)”,speed设置为“30”。
6、运行游戏发现立方体会慢慢移动到红色立方体的位置,这样就完成了点到点的移动。
7、完成效果图。
黄先生
2024-12-27 广告
2024-12-27 广告
矩阵切换器就是将一路或多路视音频信号分别传输给一个或者多个显示设备,如两台电脑主机要共用一个显示器,矩阵切换器可以将两台电脑主机上的内容renyi切换到同一个或多个显示器上;迈拓维矩矩阵切换器种类齐全,性价比高,支持多种控制方式,为工程商采...
点击进入详情页
本回答由黄先生提供
展开全部
稍微修改了下,看看是不是你想要的结果。
注意Input.GetKeyDown(KeyCode.UpArrow) 这个返回值只在按下的那一帧为true。
还有就是Vector3.Lerp()这个函数的第三个参数的有效范围是0~1,不多说了,你懂得。
private bool sMove = false;
private Vector3 endpos;
private float process = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
if (!sMove)
{
endpos = new Vector3(person.transform.position.x, person.transform.position.y + 10, 0);
process = 0;
sMove = true;
}
}
if (sMove)
{
process += Time.deltaTime * 2;
if (process < 1)
person.transform.position = Vector3.Lerp(person.transform.position, endpos, process);
else
{
sMove = false;
}
}
}
注意Input.GetKeyDown(KeyCode.UpArrow) 这个返回值只在按下的那一帧为true。
还有就是Vector3.Lerp()这个函数的第三个参数的有效范围是0~1,不多说了,你懂得。
private bool sMove = false;
private Vector3 endpos;
private float process = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
if (!sMove)
{
endpos = new Vector3(person.transform.position.x, person.transform.position.y + 10, 0);
process = 0;
sMove = true;
}
}
if (sMove)
{
process += Time.deltaTime * 2;
if (process < 1)
person.transform.position = Vector3.Lerp(person.transform.position, endpos, process);
else
{
sMove = false;
}
}
}
追问
谢谢了 就是这个意思 if (process < 1)这个值怎么估算的呢?我试了试改成process < 0.1的话就移动距离很短没有到达终点坐标。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询