unity3d-小案例之角色简单漫游
2015-01-08 17:39 糯米粥 阅读(902) 评论(0) 编辑 收藏 举报准备资源
我这里从网上下载一个角色模型,里面有一组动画。有站立、奔跑、杀怪等
我们来实现角色的前后左后移动,即键盘上的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
本节资源模型下载
http://pan.baidu.com/s/1ARiBO 密钥:uqs8
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?