zoukankan      html  css  js  c++  java
  • unity3d小案例之角色简单漫游

    准备资源

    我这里从网上下载一个角色模型,里面有一组动画。有站立、奔跑、杀怪等

    我们来实现角色的前后左后移动,即键盘上的WSDA键,这里因为没有行走的动画。索性就用奔跑代替了!!

    暂时先不计较代码冗余的情况。因为我也是刚学习的新手。一切为了先实现效果。

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class modelMove : MonoBehaviour
     5 {
     6 
     7     public float speed = 2;
     8     // Use this for initialization
     9     void Start()
    10     {
    11 
    12     }
    13 
    14     // Update is called once per frame
    15     void Update()
    16     {
    17 
    18         //保存移动前位置
    19         Vector3 oldPosition = transform.position;
    20         if (Input.GetKey(KeyCode.W))
    21         {
    22             transform.Translate(Vector3.forward * Time.deltaTime * speed, Space.World);
    23             animation.Play("run");//开始奔跑
    24 
    25         }
    26         if (Input.GetKey(KeyCode.S))
    27         {
    28             transform.Translate(Vector3.back * Time.deltaTime * speed, Space.World);
    29             animation.Play("run");//开始奔跑
    30 
    31         }
    32         if (Input.GetKey(KeyCode.A))
    33         {
    34             transform.Translate(Vector3.left * Time.deltaTime * speed, Space.World);
    35             animation.Play("run");//开始奔跑
    36 
    37         }
    38         if (Input.GetKey(KeyCode.D))
    39         {
    40             transform.Translate(Vector3.right * Time.deltaTime * speed, Space.World);
    41             animation.Play("run");//开始奔跑
    42 
    43         }
    44 
    45 
    46         //设置角色方向
    47         /*
    48          * LookAt(Vector3 worldPosition);
    49          * 手册上的解释:旋转物体,这个向前向量指向target的当前位置。
    50 
    51          * 我是这样理解的:
    52            假设:
    53          * 移动前的向量为 v1
    54          * 移动后的向量为 v2
    55          * 那么当前目标物体就会旋转指向v2-v1的方向向量
    56          * LookAt()方法。要使用世界坐标系 Space.World
    57          * transform.position - oldPosition :移动前的方向-移动后的方向=目标向量
    58          * transform.position + transform.position - oldPosition :在当前位置转向
    59          */
    60         transform.LookAt(transform.position + transform.position - oldPosition);
    61     }
    62 }

    看到这里是不是发现。角色跑远后,越来越小了。因为这里角色在跑。摄像机并没有跟着跑动。那怎么办?
     
    这里要让摄像机跟着角色移动,实现漫游的效果,这里很简单。只需要把camera拖到角色对象中。作为角色的子对象即可
     
     
     
    这样一比较效果是不是很明显了
     
    在上面的代码中。我们提到了LookAt方法。那它究竟是一个什么样的方法呢。上面的代码也有解释,如果还不懂。我们来对比下。
     
    当移动角色。没有使用LookAt方法就是什么样的效果,看下图中。左边角色是使用了LookAt,右边角色是没有使用
     
    理解这句话:LookAt是使:旋转物体,这个向前向量指向target的当前位置(来自手册的解释)
     
     
    刚接触unity3d不久。但我已经深深的被他所吸引了。加油。我一定要成为Game Boy
     
     本节资源模型下载
    作者: niboy
    出处: http://niboy.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,共同学习、共同进步、但不能乱搞!未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    09.MyBatis的逆向工程
    08.MyBatis整合Log4j
    07.MyBatis中的关联查询
    06.动态SQL和foreach
    05.MyBtais两种取值符号以及输入参数和输出参数
    04.MyBatis别名的设置和类型转换器
    03.Mybatis优化
    02.Mybatis的动态代理方式实现增删改查
    01.MyBatis入门
    网络安全之网络安全(数通安全)0
  • 原文地址:https://www.cnblogs.com/niboy/p/4211549.html
Copyright © 2011-2022 走看看