unity的transform.position 只移动了collider?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity的transform.position 只移动了collider?相关的知识,希望对你有一定的参考价值。

我写了个脚本用鼠标拖拽来移动Object。如果从unity中直接创建3d object,拖拽很成功,但如果是使用了从unity store中下载的一个object的话,被移动的就只有那个object中的collider了,请问是什么情况?

另注:下文代码中返回的DragGameobject.name是要拖拽对象的本身名字。

if (Physics.Raycast(GetComponent<Camera>().ScreenPointToRay(Input.mousePosition), out hit, 1000, planelayer))


if (Input.GetKey(KeyCode.Mouse0) && DragGameobject)

Debug.Log(DragGameobject.name+" 原本位置"+
DragGameobject.transform.position);
Debug.Log("目标位置:" + hit.transform.position);
DragGameobject.transform.position = hit.point;


参考技术A 你要知道unity创建的3D object是没有子物体的,collider直接挂在他自己身上,DragGameObject就是他本身。

从unity store下载的object最外层父物体没挂collider组件,就好比一个人下面有四肢,四肢上分别挂了四个collider,你拖拽只是拖拽挂了collider 的一肢,人整体不会走。

unity3d让物体移动固定距离

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个坐标后停止呢?

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、完成效果图。

参考技术A 稍微修改了下,看看是不是你想要的结果。

注意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的话就移动距离很短没有到达终点坐标。

本回答被提问者采纳

以上是关于unity的transform.position 只移动了collider?的主要内容,如果未能解决你的问题,请参考以下文章

unity的transform.position 只移动了collider?

unity---背景循环滚动

unity3d让物体移动固定距离

unity 点积的使用 转化为角度

unity 射线怎么检测ngui

Unity相机跟随小结