Unity3D制作3D虚拟漫游场景(二)
传送门:
--------------------------------------------------------------------------
昨天已经完成了场景的基本搭建,今天先简单的实现城市漫游功能,具体细节之后再进行添加
1.导入人物
在Assets文件夹下,新建一个文件夹,用于存放预制体,命名为Prefabs

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

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

这样人物就准备就绪了。
2.设置场景
回到游戏场景(我命名的是“GameScene”),全选所有的地形(摄像机暂时除外),道路啊建筑啊,统一加上组件“MeshCollider”,方便与人物碰撞
3.将人物放置于场景
拖拽Prefabs文件夹里的人物到Scene视图,并为其添加CharacterController,设置属性如下

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

(报了很多错误,不过以前没有出现,并且错误暂时不影响游戏运行,最近会找一下原因所在,大家也可以在评论区指点一下,人多力量大^_^)
这时候人物就不会掉下去了,但是我们会发现,没有办法控制人物的移动,这就需要添加脚本进行控制了。
4.控制人物移动
在Scripts文件夹下,新建一个C#脚本,命名为“CharacterControl.cs”,代码如下
using UnityEngine;
using System.Collections; public class CharacterControl : MonoBehaviour
{
//控制速度
public float moveSpeed = 10.0f;
public float rotateSpeed = 1.0f;
public float jumpSpeed = 4.0f; //跳跃速度
public float gravity = ; //重力拉扯 private bool isMainPlayer = false;
private Animator personAnimator;
private CharacterController cc; public bool isJump;
private bool isMove; private CollisionFlags flags; private Vector3 moveDirection; // Use this for initialization
void Start()
{
if (this.gameObject.tag == "Player")
{
isMainPlayer = true;
cc = this.GetComponent<CharacterController>();
}
personAnimator = gameObject.GetComponent<Animator>();
} // Update is called once per frame
void Update()
{
//如果当前脚本的对象是游戏者
if (isMainPlayer)
{
//控制移动或旋转
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
h *= Time.deltaTime * moveSpeed;
v *= Time.deltaTime * moveSpeed;
transform.Translate(h, , v);
transform.Rotate(, h * rotateSpeed, ); //FIX THIS BUG:无法后退,因为还没有设置后退的动画
if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1f)
{
personAnimator.SetFloat("Speed_f", moveSpeed);
} else
{
personAnimator.SetFloat("Speed_f", );
} //按下空格跳跃
//两种跳跃情况:原地跳和一边跑一边跳(脑补出表情包...)
if (Input.GetKeyDown(KeyCode.Space) && !isJump)
{
personAnimator.SetBool("Jump_b", true); isJump = true;
moveDirection = transform.TransformDirection(moveDirection);
moveDirection.y = jumpSpeed; }
else if (Input.GetKeyUp(KeyCode.Space))
{
personAnimator.SetBool("Jump_b", false);
} //if (isJump)
///{
//模拟重力
moveDirection.y -= gravity * Time.deltaTime;
flags = cc.Move(moveDirection * Time.deltaTime); //when hit the ground
if (flags == CollisionFlags.Below)
{
isJump = false;
}
// }
} }
}
接下来把脚本赋给人物,需要注意的就是,这段代码是根据Tag去判断是否为游戏者的(因为后期可能会添加一些自由移动的NPC),所以需要把人物的Tag设置为Player。

进入游戏,发现人物可以移动了,不过摄像机还不会跟随人物移动。
5.设置摄像机跟随
unity5.x的摄像机脚本与4有不同之处,所以我们先选一种简单的方法。
首先将Hierarchy中_Scene下的摄像机拖动到人物下。
设置摄像机属性如图

现在就可以漫游了。接下来就是控制动画的播放以及其他的细节处理了。
Unity3D制作3D虚拟漫游场景(二)的更多相关文章
- Unity3D制作3D虚拟漫游场景(一)
开始前先说一些题外话,本来这个工程是已经完成了超过一半了,然而由于手残重装了系统不小心删除了,现在只好再做一遍了.顺便写一下博供今后写代码参考. 这是一款使用unity3D开发的虚拟城市漫游游戏,实际 ...
- 【Unity3d】3d网页游戏场景打包与加载
http://www.cnblogs.com/dosomething/archive/2012/04/07/2436353.html 3d游戏中 一个场景往往比较大 如果游戏的进行需要下载一个10 ...
- 使用WPF实现3D场景[二]
原文:使用WPF实现3D场景[二] 在上一篇的文章里我们知道如何构造一个简单的三维场景,这次的课程我将和大家一起来研究如何用代码,完成对建立好了的三维场景的观察. 首先看一下DEMO的界面: ...
- iOS 10 SceneKit 新特性 – SceneKit 制作 3D 场景框架
来源:scauos(@大朕东) 链接:http://www.jianshu.com/p/b30785bb6c97 开头语: 今天的主题是探索iOS10 SceneKit的新功能,你可以观看今年WWDC ...
- 打造H5里的“3D全景漫游”秘籍
近来风生水起的VR虚拟现实技术,抽空想起年初完成的“星球计划”项目,总结篇文章与各位分享一下制作基于Html5的3D全景漫游秘籍. QQ物联与深圳市天文台合作,在手Q“发现新设备”-“公共设备”里,连 ...
- Unity3D 之3D游戏入门Hello world(一)
这几天开始玩Unity3D 有关3D的内容了,去年开始玩过一段时间的2D制作,不过因为年初找工作,所以放了一段时间, 现在再捡起来发现忘的已经差不多了,只能再从头开始,所以就从3D开始算了.下面是3D ...
- Unity3D实现3D立体游戏原理及过程
Unity3D实现3D立体游戏原理及过程 183 0 0 下面的教程是我今天整理的资料,教大家一步步完成自己的3D立体游戏,并向大家介绍一些3D成像的原理. 理论上,每个普通的非立体3 ...
- Unity3D教程:无缝地形场景切换的解决方法
http://www.unitymanual.com/6718.html 当我们开发一个大型项目的时候-会遇到这样的问题(地形场景的切换)这个只是字面意思-并不是重场景1的100 100 100坐标 ...
- 打造自己的3D全景漫游
three.js 示例: 打造H5里的"3D全景漫游"秘籍 - 腾讯ISUX QQ物联星球计划 通过pano2vr直接将鱼眼全景图生成立体空间的六个面:也可通过Photos ...
随机推荐
- 非常简洁简单的tcp socket库 XKSocket
一个非常简洁简单的异步tcp socket库,主要就是分包的问题,处理组包,粘包等问题 非常适合新手:) 项目中带有使用示例. http://git.oschina.net/dreamzgj/XKSo ...
- #《H.264和MPEG-4视频压缩》# 一. 色彩空间
多数的数字视频应用需要播放彩色的视频信号,所以需要捕获和重现颜色信息.一幅黑白图像的每一个采样点只需要一个像素表示明暗或亮度,而在彩色图像中至少需要3个像素来表示每个像素的色彩.表示亮度和色彩的不同方 ...
- DNS | named.run文件很大的处理方法
在查看/var/named/data目录中发现named.run文件260G+ 总用量 267G -rw-r--r-- 1 named named 1.3K 9月 2 21:27 named.run ...
- C# WPF之Material Design自定义颜色
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF之Material Design自定义颜色 阅读导航 本文背景 代码实现 本文参考 ...
- (办公)记事本_linux压缩命令
参考谷粒学院的linux视频教程:http://www.gulixueyuan.com/course/300/task/7091/show 在Linux中可以识别的常见的压缩格式有十几种,比如&quo ...
- opencv —— imread、namedWindow & imshow、cvtColor、imwrite 加载、显示、修改、保存图像
加载图像:imread 函数 Mat imread(const string& filename, int flags = 1): filename:需要载入的图像的路径名. flags:加载 ...
- scrapy框架爬取多级页面
spides.py # -*- coding: utf-8 -*- import scrapy from weather.items import WeatherItem from scrapy.cr ...
- Winform中怎样对窗体进行隐藏,再次打开时仍然保留上次的窗体
场景 点击按钮后打开窗口,点击窗口的确定按钮后即使窗体返回了Ok,此时不关闭窗体,将窗体隐藏. 再次点击按钮后,仍然打开上次的窗体. 注: 博客主页: https://blog.csdn.net/ba ...
- Java 运行报错:不支持发行版本 5
解决方案: 第一步:在Intellij中点击“File” -->“Project Structure”,看一下“Project”和“Module”栏目中Java版本是否与本地一致: 第二步:点击 ...
- ng-核心特性(模型概念)
angular核心特性 很多开发者已经做过非常多的项目,但是当你跟他聊的时候,你很快就会发现他并没有掌握这门框架的精髓.打几个比方,当别人提到 Spring 的时候,你的大脑里面第一个想到一定是 DI ...