Player移动:

  1. public float speed = 6f;
  2. Vector3 movement;
  3. Rigidbody playerRididbody;
  4.  
  5. void FixedUpdate () {
  6. float h = Input.GetAxisRaw("Horizontal");
  7. float v = Input.GetAxisRaw("Vertical");
  8. Move(h, v);
  9. Animating(h, v);
  10. }
  11. void Move(float h, float v) {
  12. movement.Set(h, 0f, v);
  13. movement = movement.normalized * speed * Time.deltaTime;
  14. playerRididbody.MovePosition(transform.position + movement);
  15. }

通过h和v的值判断Player是否移动

  1. void Animating(float h, float v) {
  2.  
  3. bool walking = h != || v != ; //判断Player是否移动
  4.  
  5. anim.SetBool("IsWalking", walking);
  6. }

Player跟随鼠标旋转:

首先建立一个面片作为地板(Floor)层,Layer也要设置成Floor.

然后删除地板的Mesh Renderer组件

  1. int floorMask;
  2.  
  3. float camRayLength = 1000f;
  4.  
  5. 同时还要获取Floor
  6.  
  7. floorMask = LayerMask.GetMask("Floor");
  8.  
  9. //Camera.main.ScreenPointToRay方法向某位置发射一条射线,射线与地面碰撞体产生碰撞。取得碰撞点,然后旋转Player。
  10.  
  11. void Truing() {
  12.  
  13. Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);//返回一条射线
  14.  
  15. RaycastHit floorHit;
  16.  
  17. if (Physics.Raycast(camRay, out floorHit, camRayLength, floorMask)) {
  18.  
  19. Vector3 playerToMouse = floorHit.point - transform.position;
  20.  
  21. playerToMouse.y = 0f;
  22.  
  23. Quaternion newRotation = Quaternion.LookRotation(playerToMouse);
  24.  
  25. playerRididbody.MoveRotation(newRotation);
  26.  
  27. }
  28.  
  29. }

Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers)

参数

ray

射线的起点和方向

hitInfo

如果返回true,hitInfo将包含碰到器碰撞的更多信息。

distance

射线的长度

layerMask

只选定Layermask层内的碰撞器,其它层内碰撞器忽略。

完整代码:

  1. using UnityEngine;
  2.  
  3. using System.Collections;
  4.  
  5. public class PlayerMovement : MonoBehaviour {
  6.  
  7. public float speed = 6f;//人物移动速度
  8.  
  9. Vector3 movement;
  10.  
  11. Rigidbody playerRididbody;
  12.  
  13. Animator anim;
  14.  
  15. int floorMask;
  16.  
  17. float camRayLength = 100f;
  18.  
  19. void Awake() {
  20.  
  21. floorMask = LayerMask.GetMask("Floor");
  22.  
  23. playerRididbody = GetComponent<Rigidbody>();//获取Player身上的刚体
  24.  
  25. anim = GetComponent<Animator>();//获取动画组件
  26.  
  27. }
  28.  
  29. void Start () {
  30.  
  31. }
  32.  
  33. // Update is called once per frame
  34.  
  35. void FixedUpdate () {
  36.  
  37. float h = Input.GetAxisRaw("Horizontal");
  38.  
  39. float v = Input.GetAxisRaw("Vertical");
  40.  
  41. Move(h, v);
  42.  
  43. Truing();
  44.  
  45. Animating(h, v);
  46.  
  47. }
  48.  
  49. //Camera.main.ScreenPointToRay方法向某位置发射一条射线,射线与地面碰撞体产生碰撞。取得碰撞点,然后旋转Player。
  50.  
  51. void Truing() {
  52.  
  53. Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);//返回一条射线
  54.  
  55. RaycastHit floorHit;
  56.  
  57. if (Physics.Raycast(camRay, out floorHit, camRayLength, floorMask)) {
  58.  
  59. Vector3 playerToMouse = floorHit.point - transform.position;
  60.  
  61. playerToMouse.y = 0f;
  62.  
  63. Quaternion newRotation = Quaternion.LookRotation(playerToMouse);
  64.  
  65. playerRididbody.MoveRotation(newRotation);
  66.  
  67. }
  68.  
  69. }
  70.  
  71. void Move(float h, float v) {
  72.  
  73. movement.Set(h, 0f, v);
  74.  
  75. movement = movement.normalized * speed * Time.deltaTime;
  76.  
  77. playerRididbody.MovePosition(transform.position + movement);
  78.  
  79. }
  80.  
  81. void Animating(float h, float v) {
  82.  
  83. bool walking = h != || v != ; //判断Player是否移动
  84.  
  85. anim.SetBool("IsWalking", walking);
  86.  
  87. }
  88.  
  89. }

小白的Unity5之路(一)的更多相关文章

  1. 小白的Unity5之路(二)镜头平滑跟随角色

    这次要完成Camera跟随Player移动, 首先考虑Camera的跟随目标target和平滑移动速度smothing再考虑Camera与Player的偏移量(就是Camera与Player有一个永恒 ...

  2. 小白的springboot之路(一)、环境搭建、第一个实例

    小白的springboot之路(一).环境搭建.第一个实例 0- 前言 Spring boot + spring cloud + vue 的微服务架构技术栈,那简直是爽得不要不要的,怎么爽法,自行度娘 ...

  3. 小白的Python之路 day1

    Python之路,Day1 - Python基础1 本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van ...

  4. 小白的Python之路 day1 变量

    Python之路,Day1 - Python基础1 变量 变量用于存储在计算机程序中引用和操作的信息.它们还提供了一种用描述性名称标记数据的方法,这样我们的程序就能更清晰地被读者和我们自己理解.将变量 ...

  5. 小白学习Python之路---开发环境的搭建

    本节内容 1.Python的介绍 2.发展史 3.安装Python 4.搭建开发环境 5.Hello World程序 一.Python的介绍 Python的创始人为荷兰人吉多·范罗苏姆(Guido v ...

  6. 小白的学习之路(hello wold!)

    Hello word ! 一直想写博客,但是都拖延了,正好两天有假期就开始弄这个事情了.开始觉得写博客也没有什么,一路学习以来都是看别人的博客进行学习,也收藏了不少博客,学到了不少东西,所以我觉的博客 ...

  7. 小白学习python之路(一):安装python3

    引言 作为一个python小白,之前学的是java,不过听说python很流行,功能很强大,可以用很少的代码实现更强的功能,因此我也是被吸引了过来,并且把我的学习经历记录下来.     当然了,要学习 ...

  8. Python小白的发展之路之Python基础(二)

    列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1.列表.元组操作 (1)列表 列表是可变的(mutable)--可以改变列表的内容,这不同于字符串和元组,字符串和元组都是不 ...

  9. Python小白的发展之路之Python基础(一)

    Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...

随机推荐

  1. HiJson工具 && 火狐浏览器中的jsonHandle插件(以及乱码问题的解决)-->来转换json串的格式

    原文:http://blog.csdn.net/cjm2484836553/article/details/72453907 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] ...

  2. 理解android中ListFragment和Loader

    一直以来不知Android中Loader怎么用,今天晚上特意花了时间来研究,算是基本上搞明白了,现在把相关的注释和代码发出来,以便笔记和给网友一个参考,错误之处还望大家给我留言,共同进步,这个例子采用 ...

  3. CSS background 属性详解

    CSS background Property 语法: background: bg-color bg-image position/bg-size bg-repeat bg-origin bg-cl ...

  4. C#模拟HTTP POST 请求

    GET请求: /// <summary> /// 获取accessToken /// </summary> /// <param name="corpid&qu ...

  5. vuejs plus d3

    vuejs 是一个数据驱动视图的前端框架,一切皆可以作为可重用的组件加以使用. d3则是数据可视化javascript库,如何将二者的长处相结合是一个挑战. https://tyronetudehop ...

  6. java正则表达式校验移动电话、固话、邮编的校验

    package com.tmall.epp.web.module.util; import java.util.regex.Pattern; /** * 移动电话.固话.邮编的校验 * @since  ...

  7. Ionic控件之——按钮(Button)

    Ionic提供丰富的按钮特性,足以满足大部分的按钮实现需求. 一.HTML实现一个简单按钮: <button class="button"> 我是按钮 </but ...

  8. 安装PHPphp-5.4.4

    一.下载PHPphp-5.4.4 [root@aliyun software]# pwd /software[root@aliyun software]# wget http://mirrors.so ...

  9. Centos7 下编译 Openjdk8

    本文主要介绍如何在 Centos7 下编译 Openjdk8 源码,<深入理解java虚拟机>第二版网上好多 openjdk7 的帖子,编译 jdk8 和 7 还是有些差别的,比如大家经常 ...

  10. July 29th 2017 Week 30th Saturday

    Where there is great love, there are always miracles. 哪里有真爱存在,哪里就有奇迹发生. Everyone expects there can b ...