传送门:

Unity3D制作3D虚拟漫游场景(一)

--------------------------------------------------------------------------

昨天已经完成了场景的基本搭建,今天先简单的实现城市漫游功能,具体细节之后再进行添加

1.导入人物

在Assets文件夹下,新建一个文件夹,用于存放预制体,命名为Prefabs

打开昨天导入进去的SimplePeople资源包,打开其中的示例场景,然后我们可以进去挑选人物啦~

博主在这里选了一个画风清奇,很像程序员的一个人物“SimplePeople_BusinessMan_White”,选中,并将其拖放到Prefabs文件夹下

这样人物就准备就绪了。

2.设置场景

回到游戏场景(我命名的是“GameScene”),全选所有的地形(摄像机暂时除外),道路啊建筑啊,统一加上组件“MeshCollider”,方便与人物碰撞

3.将人物放置于场景

拖拽Prefabs文件夹里的人物到Scene视图,并为其添加CharacterController,设置属性如下

找到人物的位置,点击运行,可能会发现人物往下掉,这是因为刚才添加MeshCollider的时候,部分折叠的没有被添加上去,我们手动添加。

(报了很多错误,不过以前没有出现,并且错误暂时不影响游戏运行,最近会找一下原因所在,大家也可以在评论区指点一下,人多力量大^_^)

这时候人物就不会掉下去了,但是我们会发现,没有办法控制人物的移动,这就需要添加脚本进行控制了。

4.控制人物移动

在Scripts文件夹下,新建一个C#脚本,命名为“CharacterControl.cs”,代码如下

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class CharacterControl : MonoBehaviour
 5 {
 6     //控制速度
 7     public float moveSpeed = 10.0f;
 8     public float rotateSpeed = 1.0f;
 9     public float jumpSpeed = 4.0f;      //跳跃速度
10     public float gravity = 1;           //重力拉扯
11
12     private bool isMainPlayer = false;
13     private Animator personAnimator;
14     private CharacterController cc;
15
16     public bool isJump;
17     private bool isMove;
18
19     private CollisionFlags flags;
20
21     private Vector3 moveDirection;
22
23
24     // Use this for initialization
25     void Start()
26     {
27         if (this.gameObject.tag == "Player")
28         {
29             isMainPlayer = true;
30             cc = this.GetComponent<CharacterController>();
31         }
32         personAnimator = gameObject.GetComponent<Animator>();
33     }
34
35     // Update is called once per frame
36     void Update()
37     {
38         //如果当前脚本的对象是游戏者
39         if (isMainPlayer)
40         {
41             //控制移动或旋转
42             float h = Input.GetAxis("Horizontal");
43             float v = Input.GetAxis("Vertical");
44             h *= Time.deltaTime * moveSpeed;
45             v *= Time.deltaTime * moveSpeed;
46             transform.Translate(h, 0, v);
47             transform.Rotate(0, h * rotateSpeed, 0);
48
49             //FIX THIS BUG:无法后退,因为还没有设置后退的动画
50             if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1f)
51             {
52                 personAnimator.SetFloat("Speed_f", moveSpeed);
53             }
54
55             else
56             {
57                 personAnimator.SetFloat("Speed_f", 0);
58             }
59
60
61
62
63             //按下空格跳跃
64             //两种跳跃情况:原地跳和一边跑一边跳(脑补出表情包...)
65             if (Input.GetKeyDown(KeyCode.Space) && !isJump)
66             {
67                 personAnimator.SetBool("Jump_b", true);
68
69                 isJump = true;
70                 moveDirection = transform.TransformDirection(moveDirection);
71                 moveDirection.y = jumpSpeed;
72
73             }
74             else if (Input.GetKeyUp(KeyCode.Space))
75             {
76                 personAnimator.SetBool("Jump_b", false);
77             }
78
79             //if (isJump)
80             ///{81             //模拟重力
82             moveDirection.y -= gravity * Time.deltaTime;
83             flags = cc.Move(moveDirection * Time.deltaTime);
84
85             //when hit the ground
86             if (flags == CollisionFlags.Below)
87             {
88                 isJump = false;
89             }
90             // }
91         }
92
93     }
94 }

接下来把脚本赋给人物,需要注意的就是,这段代码是根据Tag去判断是否为游戏者的(因为后期可能会添加一些自由移动的NPC),所以需要把人物的Tag设置为Player。

进入游戏,发现人物可以移动了,不过摄像机还不会跟随人物移动。

5.设置摄像机跟随

unity5.x的摄像机脚本与4有不同之处,所以我们先选一种简单的方法。

首先将Hierarchy中_Scene下的摄像机拖动到人物下。

设置摄像机属性如图

现在就可以漫游了。接下来就是控制动画的播放以及其他的细节处理了。

转载于:https://www.cnblogs.com/sc2015/p/5697805.html

Unity3D制作3D虚拟漫游场景(二)相关推荐

  1. Unity3D制作3D虚拟漫游场景(一)

    开始前先说一些题外话,本来这个工程是已经完成了超过一半了,然而由于手残重装了系统不小心删除了,现在只好再做一遍了.顺便写一下博供今后写代码参考. 这是一款使用unity3D开发的虚拟城市漫游游戏,实际 ...

  2. 虚幻4 虚拟漫游场景 制作过程

    先看看渲染效果. 虚幻场景中的物品其实也需要全部由3Dmax制作好导入 虚幻由于有一部分是动态光影,还需要预渲染,所以模型的面数要尽可能降低. 原来3000多个面降到41个面. 3Dmax自身渲染的话 ...

  3. unity3d制作自己简单游戏场景

    下面演示一下如何用unity3d制作一个自己的游戏场景 1. 导入环境资源 Assets -> import packet -> environments 2. 新建terrain 3.在 ...

  4. Unity3d游戏开发之漫游场景的制作

    Unity3d中场景漫游的制作. 1.       首先在3d软件中准备好模型,我找了个maya制作的房子. 注意:我这里用的是真实世界的比例,旁边测量工具测量的是1000cm,10米高. 2.  导 ...

  5. 【Unity3d】3d网页游戏场景打包与加载

    http://www.mysjtu.com/page/M0/S716/716482.html 3d游戏中 一个场景往往斗劲大 若是游戏的进行须要下载一个10M甚至更大的场景时 加载所用的时候会导致很大 ...

  6. Unity3D 建筑类 虚拟漫游 PC 端 优化

    一:Mesh.Masterial 量的问题(影响最大.最基础) 二:遮挡剔除(本方法 功能针对的是整个场景渲染,Adding 模式下,只对第一个场景起作用,所以 设置渲染只能在第一个场景中Bake) ...

  7. 全景虚拟漫游技术实现(three.js vs ThingJS) Javascript 3D开发 前端 物联网 webgl 三维建模 3D模型 虚拟 全景

    三维建模无非就是通过专业技能加工成立体图形,使之图形成为直观.易懂,容易判读的立体图件.对于开发者来说,选择一个好的3D开发框架,在全景虚拟漫游场景上实现3D动效,ThingJS vs three.j ...

  8. 用python制作3d动画_-用 Python 做科学计算--Visual-制作3D演示动画

    # Visual-制作3D演示动画 [Visual](http://vpython.org) 是Python的一个简单易用的3D图形库,使用它可以快速创建3D场景.动画.和TVTK相比它更加适合于创建 ...

  9. dw如何制作图片自动切换效果_什么是3D虚拟展厅,虚拟展厅如何在线3D漫游!

    昨天小迪分享了什么是3D虚拟展厅,今天小迪将继续分享,虚拟展厅是如何在线3D漫游!以及web3d虚拟展厅技术呈现的,具体模块及功能描述(一): 什么是3D虚拟展厅,虚拟展厅如何在线3D漫游! 1.lo ...

最新文章

  1. 【JavaScript总结】JavaScript语法基础:JS高级语法
  2. three.js 弹出二维图片
  3. 在linux中如何高效的使用帮助
  4. 主要的窗体控件的概述
  5. Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
  6. 去掉 Idea 中注入 Mapper 警告的方法
  7. iOS - Easy Custom View
  8. 【学习】009 NIO编程
  9. Examine Scheduling Policies
  10. unity3D 5中如何修改及显示Text的值
  11. 【10月17日】2020年十月蓝桥杯A组题目【感想与总结】(热乎的)
  12. rest api 可选参数_可选类型API
  13. 【CodeForces - 1084D】The Fair Nut and the Best Path (树形dp)
  14. C++匿名函数Lambda
  15. java代码查询索引文件实例_关于使用pdfbox的对PDF文件通过lucene生成索引文件IndexPDFFiles类代码示例...
  16. MYSQL GDB 崩溃调试
  17. 类的继承与派生的基础学习
  18. 华南理工大学811信号与系统真题
  19. 计算机专业英语大作业,专业英语大作业
  20. mac版ps快捷键大全

热门文章

  1. python进入目录 cd_Linux cd命令:切换目录
  2. 胶囊网络中挤压函数Squash的实现(tensorflow和pytorch)
  3. 西门子博图指令(定时器操作二)
  4. win10如何修改C盘User下的用户名
  5. java 获取星期_java中如何获取日期时间中的星期几?
  6. 美国心理求助电话暴涨10倍,斯坦福AI聊天机器人抚慰受伤心灵
  7. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170315
  8. 怎么开发联机小游戏_惊!!!个人游戏开发者的福音来了!
  9. 机器学习 --基础入门介绍 他来啦!!!
  10. 伽玛函数(Gamma函数)C++实现