首页 > 代码库 > Unity3d中CharacterController的移动和碰撞分析
Unity3d中CharacterController的移动和碰撞分析
在Unity3d中系统提供的第一人称视角模型First Person Controller的移动可分为两种:
一.移动transform
这种移动方式为直接对该人物模型的transform属性做位移操作,移动方式为在Update函数中的写法:
void Update () { if(Input.GetKey(KeyCode.W)) { transform.Translate(Vector3.forward * Time.deltaTime * speed); } else if(Input.GetKey(KeyCode.S)) { transform.Translate(Vector3.forward * Time.deltaTime * -speed); } else if(Input.GetKey(KeyCode.A)) { transform.Translate(Vector3.right * Time.deltaTime * -speed); } else if(Input .GetKey(KeyCode.D)) { transform.Translate(Vector3.right * Time.deltaTime * speed); }}
人物模型的碰撞检测:
1.这种方法不会触发静态碰撞,即在静态碰撞器的物体中可以穿进,穿出。
2.在碰撞带有刚体组件的物体时能够发生刚体碰撞,若要检测刚体碰撞,必须将检测脚本附加在带刚体组件的物体上。
3.人物模型可以进行触发器检测。
二:利用系统提供的人物模型类CharacterController对象中的Move方法进行移动,具体代码如下:
CharacterController controller;controller.Move(Vector3.forward * Time.deltaTime * speed);
人物模型的碰撞检测:
1.这种移动方法的人物模型在静态碰撞器中可以发生静态碰撞,即不能够穿越物体,碰到有静态碰撞器的物体只能停下来。
2.在碰撞带刚体的物体时,不会穿越该物体,也不会触发任何的刚体碰撞检测函数,但是可以用另外一个函数用来检测人物模型接触到刚体物体。
检测函数举例:
void OnControllerColliderHit(ControllerColliderHit hit){ Rigidbody body = hit.collider.attachedRigidbody; if(body == null || body.isKinematic) { return; } else { Debug.Log("touch gameObject: " + hit.collider.gameObject.name); //摧毁物体 //Destroy(hit.collider.gameObject); //给物体一个移动的力 //body.velocity = new Vector3(hit.moveDirection.x,0,hit.moveDirection.z) * 30.0f; }}
3.这种移动方法也能执行触发器检测函数。
Unity3d中CharacterController的移动和碰撞分析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。