核心1、新建工程,取名Exercise_3D。
2、新建个文件夹(3D_Assets),将所有素材资源,导入或拖入。
3、新建一个3DObject——Plane,取名(Ground)作为地面。
4、新建一个空物体,取名Player,然后将3D人物模型拖入,作为子物体。
5、对Player添加Animator组件和CharacterController组件。
5、选中Player,在Animator窗口,新建BlendTree(混合树动画),并将 idle动画、walk动画、run动画拖入。然后 创建Speed,作为速度判断的阀值条件。Jump动画拖入,创建Bool条件。
6、对 Player添加脚本(PlayerController)。
       1.获取private CharacterController、并创建其他需要的条件;
       2.Start里:_characterController=GetComponent<CharacterController>();
       3.新建方法PlayerMove(); 里面写 移动和转向代码、鼠标旋转视角代码、动画播放。***(移动和跳跃代码放FixedUpdate里)
         3.1.动画播放:使用混合树动画,用BlandSpeed做切换动画的条件,并 写播放动画的代码
7、在Player脚本里,新建方法playerJump(); 里面写 跳跃代码、动画播放。
       1.创建 bool值(isJump,表示是否按下跳跃键),创建float值(jumpVelocity表示跳跃速度;jumpForce表示跳跃时给的力)
       2.创建3个if方法,表示:跳跃、受重力影响下落、停止播放跳跃动画。
8、在Player脚本里,新建方法CameraRotation(); 里面写 相机的跟随和旋转代码。(相机方法在LateUpdate里调用)
       1.新建空物体(取名Follow),作为Player的子物体,挂在人物头顶(作为相机跟随的对象)。
       2.下载Cinema组件,并添加CinemachineVirtualCamera组件(取名PlayerFollowCamera),并进行一些设置。
       3.在方法内写脚本
*******(目前来说,简单的移动、跳跃和相机跟随就完成了,没有判断是否接触地面,所以现在可以无限跳跃)******

代码:

public class PlayerController : MonoBehaviour
{private CharacterController _characterController;public float walkSpeed = 2f;//走路速度public float runSpeed = 5f;//跑步速度public float smoothTime = 0.2f;//平滑转向用时public float targetSpeed;//当前速度private Vector3 targetDirection;//当前前进的方向private float targetRotation;//当前旋转角度private float currentVelocity;//当前旋转速度(使旋转平滑用的)(固定写法,必须要的)public bool isRun;//是否按下跑步键public bool isJump;//是否按下跳跃键public float jumpForce = 10.0f;//跳跃力private float jumpVelocity = -1.0f;//跳跃速度public float _gravity = -9.8f;//重力private Animator _animator;private float animationBlend;//混合树动画条件public GameObject _mainCamera;//获取 主相机private float _cinemachineTargetYaw;//获取 鼠标输入X(水平左右旋转)(偏航)private float _cinemachineTargetPitch;//获取 鼠标输入Y(竖直上下旋转)(倾斜、坠落)public float mouseMoveSpeed = 2;//鼠标旋转的速度public float bottomClamp = -30.0f;//鼠标向下限制,你能把相机向下移动多少public float topClamp = 70.0f;//鼠标向上限制,你能把相机向上移动多少public GameObject cinemachineCameraTarget;//获取 相机跟随的目标private void Start(){_characterController = GetComponent<CharacterController>();//初始化组件_animator = GetComponent<Animator>();}private void Update(){IsRun();IsJump();}private void FixedUpdate(){PlayerMove();PlayerJump();}private void LateUpdate(){CameraRotation();//鼠标旋转视角}//是否按下了 跑步键(Shift)private void IsRun(){if (Input.GetKeyDown(KeyCode.LeftShift)){isRun = true;}if (Input.GetKeyUp(KeyCode.LeftShift)){isRun = false;}}//是否按下了 跳跃键(空格)private void IsJump(){if (Input.GetButtonDown("Jump")){isJump = true;}}//玩家 移动public void PlayerMove(){//获取 前后左右 的键盘输入Vector2 _input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));Vector2 inputDir = _input.normalized;//向量单位化//根据 是否按下跑步键,判断玩家此时状态(跑步?还是走路?)targetSpeed = isRun ? runSpeed : walkSpeed;//如果没有输入,将目标速度设置为0if (inputDir == Vector2.zero){targetSpeed = 0.0f;}//只用于 混合树动画 的Speed值animationBlend = Mathf.Lerp(0.0f, targetSpeed, Time.deltaTime * 95.0f);if (inputDir != Vector2.zero){//获取 转动的角度(+按住方向键时玩家突然转动鼠标时,相机跟随转动)  弧度转换为度targetRotation = Mathf.Atan2(inputDir.x, inputDir.y) * Mathf.Rad2Deg + _mainCamera.transform.eulerAngles.y;//平滑旋转(用于欧拉角的)float _rotation = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref currentVelocity, smoothTime);//将平滑旋转 (以欧拉角的形式)给到 玩家transform.rotation = Quaternion.Euler(0.0f, _rotation, 0.0f);}//获取 前进的方向(这是一个Vector3)targetDirection = Quaternion.Euler(0.0f, targetRotation, 0.0f) * Vector3.forward;//动起来(+垂直速度(下落))_characterController.Move(targetDirection.normalized * targetSpeed * Time.deltaTime + new Vector3(0.0f, jumpVelocity, 0.0f) * Time.deltaTime);_animator.SetFloat("Speed", animationBlend);//移动动画}//玩家 跳跃public void PlayerJump(){if (isJump){//如果按下了 跳跃键jumpVelocity = jumpForce;//获得跳跃力_animator.SetBool("Jump", true);//跳跃动画isJump = false;//防止长按一直跳}if (jumpVelocity < 50.0f){jumpVelocity += _gravity * Time.deltaTime;//受重力影响,使玩家一直有一个下坠力//Debug.Log(jumpVelocity);}if (jumpVelocity < 0){_animator.SetBool("Jump", false);//停止播放 跳跃动画}}//鼠标旋转视角public void CameraRotation(){_cinemachineTargetYaw += Input.GetAxis("Mouse X") * mouseMoveSpeed;//获取 鼠标输入X(水平左右旋转)_cinemachineTargetPitch -= Input.GetAxis("Mouse Y") * mouseMoveSpeed;//获取 鼠标输入Y(竖直上下旋转)//限制鼠标角度_cinemachineTargetYaw = ClampAngle(_cinemachineTargetYaw, float.MinValue, float.MaxValue);_cinemachineTargetPitch = ClampAngle(_cinemachineTargetPitch, bottomClamp, topClamp);//让相机跟随的目标旋转(相机也就跟着转)*****************(鼠标的旋转传给Follow,相机是跟随Follow旋转的,也就是Follow旋转,相机才旋转)cinemachineCameraTarget.transform.rotation = Quaternion.Euler(_cinemachineTargetPitch, _cinemachineTargetYaw, 0.0f);}//限制鼠标角度private static float ClampAngle(float Angle, float MinAngle, float MaxAngle){if (Angle < -360f){Angle += 360f;}if (Angle > 360f){Angle -= 360f;}return Mathf.Clamp(Angle, MinAngle, MaxAngle);}}

跟随相机的设置:

3D人物移动和相机跟随_学习整理资料相关推荐

  1. 吃鸡(遥杆)人物移动及相机跟随的实现

    抽空做的一个小Demo,基本功能还是能实现的. 1.左下遥杆控制移动 2.右下区域遥杆控制人物转向及相机跟随转向 3.右上遥杆控制视野(相机角度) 项目下载:https://download.csdn ...

  2. 横版2D小游戏开局_学习整理记录

    核心1.新建工程,取名Exercise_2D. 2.新建个文件夹(2D_Assets),将所有素材资源,导入或拖入. 3.修改图片像素为16或32,或适合人物的尺寸. 4.新建个空物体,取名Back, ...

  3. 友盟统计+渠道包_学习笔记

    友盟统计+渠道包_学习笔记 资料: 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898 视频资 ...

  4. 学习Unity3D之探照灯效果和相机跟随。

    欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌 ...

  5. 3D人物建模到底需要掌握哪些技术,大佬年薪百万前都在学习这些知识

    3D人物建模需要的美术基础包括:造型+色彩+审美 造型,决定你的模型做出来的型是否好看:色彩,决定你的贴图和材质是否出彩: 审美,更高层次对美术的理解和美感.空间造型能力简单来讲就是要在3D空间里准确 ...

  6. unity3d怎么让模型动起来_Unity3D 学习笔记(一) 创建3d人物并让其动起来

    Unity3D 学习笔记 创建3d人物并让其动起来 2020年2月9日 17:03 学习内容:b站傅老师的U3D黑魂复刻课程 # 创建地板,添加地板砖材质 调整大小,调整贴图 # 创建一个胶囊,并添加 ...

  7. vc6.0opengl绘制人物模型_学习游戏建模?游戏人物建模软件都有哪些?

    如何学习游戏建模??对于有兴趣.有时间的小伙伴,相信自主学习的选择,也许你会在网上寻找很多素材.教程,然后开始你的探索之旅,当然,在我看来,自主学习是一个比科学教学更有效.更深刻的过程,在这个过程中, ...

  8. python实现3d人物建模_放心的python实现3d人物建模容易学吗?,zbrush不规则金属硬边...

    湖南知了教育科技有限公司是一家以用心做教育为宗旨的互联网教育机构,让所有想学习的人获得蜕变,成为一家极具有口碑的教育企业,为社会的进步和发展做贡献,既为经师,更为人师.以身传道,用心授业.企业总部坐落 ...

  9. Unity中相机跟随人物移动

    方法1:将相机拖到人物的游戏对象上,也就是让相机成为角色的子物体,这样相机就会跟随角色移动 但是这样会存在问题,1.相机会随着人物的翻转而翻转,2.相机跟随人物没有缓冲效果,移动比较僵硬 方法2:代码 ...

最新文章

  1. 【支付专区】之解析微信支付返回xml
  2. Silverlight 开发入门1
  3. php生成extjs下拉树json数据格式
  4. 编写第一个 .NET 微服务
  5. Redis数据持久化管理之RDB模式
  6. 玩转 SpringBoot 2 快速整合 | 丝袜哥(Swagger)
  7. 解压出来的文件md5会改变吗_监控Linux文件变化,防止系统被黑
  8. 多学一点(十二)——使用extundelete恢复Linux下误删除文件
  9. IEWebBrowser
  10. Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。...
  11. php从数据库删除数据,php怎么从数据库中删除数据
  12. java代码生成器,springboot代码生成器—增加生成添加信息,导出excel功能(持续更新)
  13. 随心测试_Python Se_003操作浏览器对象
  14. matlab常用函数总结
  15. html涂鸦画板插件,sketchpad-简单的HTML5 Canvas涂鸦画板插件 -HTML5功能
  16. idea打断点是白色的
  17. js php活动倒计时,JS活动倒计时代码
  18. 逻辑右移、算术右移与循环逻辑右移
  19. NMN是什么概念,nmn是真的还是假的,你一定要知道
  20. LeetCode - 点菜展示表

热门文章

  1. Android源码国内源下载
  2. Android的历史
  3. unity-摄像机跟随
  4. ppp概念股什么意思?
  5. Day 1: 音标学习
  6. 【nodejs】mocha+chai+nyc基础
  7. 点击按钮复制链接(实现点击按钮,复制文本框中的的内容)
  8. 访问后端服务 报错504 问题记录
  9. (翻译)Understanding Convolutional Neural Networks for NLP
  10. 将应用程序添加到鼠标右键发送到