教学课件 07项目七:角色控制器-控制角色运动_第1页
教学课件 07项目七:角色控制器-控制角色运动_第2页
教学课件 07项目七:角色控制器-控制角色运动_第3页
教学课件 07项目七:角色控制器-控制角色运动_第4页
教学课件 07项目七:角色控制器-控制角色运动_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模块二:使用物理引擎项目七:角色控制器—控制角色运动UnityGameEngineUNITY模块二使用物理引擎刚体——力的模拟碰撞体——物体碰撞检测角色控制器——控制角色运动物理材质与射线——射线技术应用项目五项目六项目七项目八关节——关节模拟动画项目九任务概述虚拟数字人展示了数字技术的强大和多样性,它们可以像真实世界的人一样做出各种动作。而游戏中的角色除了会有移动、爬楼梯等各种动作之外,还常常要与物体或其余的角色进行交互,这都需要用到角色控制器。本项目主要介绍物理引擎中角色控制器的使用以及如何在不同视角下进行角色运动控制。行业PPT模板/hangye/学习目标011.能够正确设置角色控制器的属性参数2.能够正确应用角色控制器函数制作角色移动动画教学目标重难点重点:角色控制器的使用难点:角色控制函数的应用项目实现02任务1:第三人称视角控制角色移动1.利用Plane、Cube和Capsule搭建场景,场景中胶囊代表角色,右侧的台阶高度为0.5,最上层的台阶高度为1,左侧的斜坡坡度分别为30度和60度,正面的斜坡坡度为45度,其余场景可自行设计。制作步骤提示2.选中胶囊,移除自带的胶囊碰撞体组件,为其添加一个角色控制器组件CharacterController。项目实现02任务1:第三人称视角控制角色移动3.为胶囊添加ccController脚本。4.在胶囊的角色控制器组件中,设置允许其爬坡的角度(SlopeLimit)为45度,允许其行走的台阶高度(StepOffset)为0.5。制作步骤提示voidUpdate(){if(cc.isGrounded)//判断角色是否在地面

{if(Input.GetKey(KeyCode.D))//按D键向右走

{cc.Move(Vector3.right*speed*Time.deltaTime);}if(Input.GetKey(KeyCode.A))//按A键向左走

{cc.Move(Vector3.left*speed*Time.deltaTime);}if(Input.GetKey(KeyCode.W))//按W键向前走

{cc.Move(Vector3.forward*speed*Time.deltaTime);}if(Input.GetKey(KeyCode.S))//按S键向后走

{cc.Move(Vector3.back*speed*Time.deltaTime);}}else{cc.Move(Vector3.down*speed*Time.deltaTime);//若不在地面,则让其落到地面

}}}publicclassccController:MonoBehaviour{publicfloatspeed=3;//设置移动速度

privateCharacterControllercc;//声明角色控制器

voidStart(){cc=GetComponent<CharacterController>();

}

项目实现02任务1:第三人称视角控制角色移动5.为摄像机添加follow脚本,制作摄像机跟随动画。6.运行游戏,可以实现第三人称角色的移动。制作步骤提示usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassfollow:MonoBehaviour{publicTransformmyTransform;privateVector3distance;voidStart(){distance=transform.position-myTransform.position;}voidUpdate(){transform.position=myTransform.position+distance;}}项目实现02任务1:第三人称视角控制角色移动7.将胶囊移动的代码简化,更改为CCMove,仍然可以实现第三人称角色的移动。制作步骤提示usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassCCMove:MonoBehaviour{privateCharacterControllercc;privatefloatspeed=5f;voidStart(){cc=GetComponent<CharacterController>();}voidUpdate(){floatx=Input.GetAxis("Horizontal");floaty=Input.GetAxis("Vertical");cc.SimpleMove(newVector3(x*speed,transform.localPosition.y,y*speed));}}项目实现02任务2:第一人称视角控制角色移动1.用与上一任务同样的方法布置场景。制作步骤提示2.在场景中添加若干个Cube和Sphere,并为他们添加Rigidbody(刚体)组件。3.为摄像机添加CharacterController(角色碰撞器)组件。项目实现02任务2:第一人称视角控制角色移动4.为主摄像机添加CCMove脚本。5.运行游戏,可以实现第一人称视角角色的移动。制作步骤提示voidUpdate(){transform.Rotate(newVector3(0,Input.GetAxis("Horizontal")*rotateSpeed,0));

Vector3forward=transform.TransformDirection(Vector3.forward);

cc.SimpleMove(forward*speed*Input.GetAxis("Vertical"));

}privatevoidOnControllerColliderHit(ControllerColliderHithit)

{Rigidbodyrig=hit.collider.attachedRigidbody;

if(rig==null||rig.isKinematic)return;if(hit.moveDirection.y<-0.3f)

return;

Vector3pushDirection=newVector3(hit.moveDirection.x,0,hit.moveDirection.z);

rig.velocity=pushDirection*pushForce;

}}publicclassCCMove:MonoBehaviour{publicfloatspeed=5f;//角色移动速度

publicfloatpushForce=5f;//推动物体的力量

publicfloatrotateSpeed=3f;//角色转身速度

privateCharacterControllercc;voidStart(){cc=GetComponent<CharacterController>();}

项目实现02任务3:实现上帝视角1.新建一个大一些的plane,在上面放一些Cube,利用给出的素材为其添加材质。2.调整摄像机的高度和角度,让其显示部分场景。制作步骤提示项目实现02任务3:实现上帝视角3.为主摄像机添加CameraController脚本。制作步骤提示

floatmovez=Input.GetAxis("MouseY");Vector3cameraPos=Camera.transform.position;cameraPos-=newVector3(movex*moveSpeed,0,0);cameraPos-=newVector3(0,0,movez*moveSpeed);if(cameraPos.x>moveRangeX.x&&cameraPos.x<moveRangeX.y&&cameraPos.z>moveRangeZ.x&&cameraPos.z<moveRangeZ.y){Camera.transform.position=cameraPos;}}floatscrollWheelValue=Input.GetAxis("MouseScrollWheel");if(scrollWheelValue!=0)//按鼠标中键实现场景的缩放

{Vector3cameraPos=Camera.transform.position;cameraPos+=Camera.transform.forward*scrollWheelValue*moveSpeed*5;if(cameraPos.y>moveRangeY.x&&cameraPos.y<moveRangeY.y&&cameraPos.z>moveRangeZ.x&&cameraPos.z<moveRangeZ.y){Camera.transform.position=cameraPos;}}}}usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassCameraController:MonoBehaviour{publicGameObjectCamera;//声明摄像机游戏物体

publicVector2moveRangeX;//声明摄像机的移动范围

publicVector2moveRangeY;publicVector2moveRangeZ;publicfloatmoveSpeed=1;//声明摄像机的移动速度voidUpdate(){if(Input.GetMouseButton(1))

{floatmovex=Input.GetAxis("MouseX");项目实现02

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论