Player移动:

 public float speed = 6f;
Vector3 movement;
Rigidbody playerRididbody; void FixedUpdate () {
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Move(h, v);
Animating(h, v);
}
void Move(float h, float v) {
movement.Set(h, 0f, v);
movement = movement.normalized * speed * Time.deltaTime;
playerRididbody.MovePosition(transform.position + movement);
}

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

 void Animating(float h, float v) {

         bool walking = h !=  || v != ;   //判断Player是否移动

         anim.SetBool("IsWalking", walking);
}

Player跟随鼠标旋转:

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

然后删除地板的Mesh Renderer组件

 int floorMask;

   float camRayLength = 1000f;

 同时还要获取Floor层

  floorMask = LayerMask.GetMask("Floor");

  //Camera.main.ScreenPointToRay方法向某位置发射一条射线,射线与地面碰撞体产生碰撞。取得碰撞点,然后旋转Player。

     void Truing() {

         Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);//返回一条射线

         RaycastHit floorHit;

         if (Physics.Raycast(camRay, out floorHit, camRayLength, floorMask)) {

             Vector3 playerToMouse = floorHit.point - transform.position;

             playerToMouse.y = 0f;

             Quaternion newRotation = Quaternion.LookRotation(playerToMouse);

             playerRididbody.MoveRotation(newRotation);

         }

 }

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

参数

ray

射线的起点和方向

hitInfo

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

distance

射线的长度

layerMask

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

完整代码:

 using UnityEngine;

 using System.Collections;

 public class PlayerMovement : MonoBehaviour {

     public float speed = 6f;//人物移动速度

     Vector3 movement;

     Rigidbody playerRididbody;

     Animator anim;

     int floorMask;

     float camRayLength = 100f;

     void Awake() {

         floorMask = LayerMask.GetMask("Floor");

         playerRididbody = GetComponent<Rigidbody>();//获取Player身上的刚体

         anim = GetComponent<Animator>();//获取动画组件

     }

 void Start () {

 }

 // Update is called once per frame

 void FixedUpdate () {

         float h = Input.GetAxisRaw("Horizontal");

         float v = Input.GetAxisRaw("Vertical");

         Move(h, v);

         Truing();

         Animating(h, v);

     }

     //Camera.main.ScreenPointToRay方法向某位置发射一条射线,射线与地面碰撞体产生碰撞。取得碰撞点,然后旋转Player。

     void Truing() {

         Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);//返回一条射线

         RaycastHit floorHit;

         if (Physics.Raycast(camRay, out floorHit, camRayLength, floorMask)) {

             Vector3 playerToMouse = floorHit.point - transform.position;

             playerToMouse.y = 0f;

             Quaternion newRotation = Quaternion.LookRotation(playerToMouse);

             playerRididbody.MoveRotation(newRotation);

         }

     }

     void Move(float h, float v) {

         movement.Set(h, 0f, v);

         movement = movement.normalized * speed * Time.deltaTime;

         playerRididbody.MovePosition(transform.position + movement);

     }

     void Animating(float h, float v) {

         bool walking = h !=  || v != ;   //判断Player是否移动

         anim.SetBool("IsWalking", walking);

     }

 }

小白的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. 如何提高 Java 中锁的性能

    锁不是问题的根源,锁之间的竞争才是 通常在多线程的代码中遇到性能方面的问题时,一般都会抱怨是锁的问题.毕竟锁会降低程序的运行速度和其较低的扩展性是众所周知的.因此,如果带着这种“常识”开始优化代码,其 ...

  2. Java容器之HashMap源码分析

    在java的容器框架中,hashMap是最常用的容器之一,下面我们就来深入了解下它的数据结构和实现原理 先看下HashMap的继承结构图 下面针对各个实现类的特点进行下说明:1)HashMap: 它是 ...

  3. Git访问TFS出现权限不足(Using Personal Access Tokens to access Visual Studio Online)

    使用GIT克隆TFS服务器上的代码到本地时出现错误如下: fatal: Authentication failed for 'https://***.visualstudio.com/***Proje ...

  4. 打通版微社区(4):微信第三方服务部署——JSP的IIS部署

    写在前面: 本机环境2008R2.tomcat8 网上搜了很多JSP的IIS部署,内容大部分是相近的,这些文章最早出现在2012的样子.大概的原理就是通过ISAPI方式对IIS进行扩展(这个扩展是to ...

  5. Visual Studio Code (vscode)编译C++

    Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮.智能代码补全.自定义热键.括号匹配.代码片段. ...

  6. Queue<T>队列与Stack<T>堆栈

    一.概述: Queue<T>队列,对象的先进先出集合("FIFO").Stack<T>栈,对象的后进先出集合("LIFO"). Queu ...

  7. 用ABAP代码读取S/4HANA生产订单工序明细

    在S/4HANA事务码CO03显示的Production Order里,我希望用ABAP代码显示出该订单的operation(工序)ID,描述和状态Status,如下图所示: 很简单的几行ABAP代码 ...

  8. unittest:1 用例编写

    unittest是python自带的单元测试框架,包含测试用例case,测试集suite,测试集加载loader,测试执行runner,测试结果result等. 简单使用:写一个用例类继承自unitt ...

  9. 离散对数&&大步小步算法及扩展

    bsgs algorithm ax≡b(mod n) 大步小步算法,这个算法有一定的局限性,只有当gcd(a,m)=1时才可以用 原理 此处讨论n为素数的时候. ax≡b(mod n)(n为素数) 由 ...

  10. python 中的set与list,tuple

    __author__ = 'liunnis' #-*-coding:utf-8 -*- a=[1,2,3,4,4] print a print list(set(a)) b=[str(i) for i ...