传送门:

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

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

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

5.设置摄像机跟随

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

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

设置摄像机属性如图

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

Unity3D制作3D虚拟漫游场景(二)的更多相关文章

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

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

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

    http://www.cnblogs.com/dosomething/archive/2012/04/07/2436353.html 3d游戏中  一个场景往往比较大  如果游戏的进行需要下载一个10 ...

  3. 使用WPF实现3D场景[二]

    原文:使用WPF实现3D场景[二] 在上一篇的文章里我们知道如何构造一个简单的三维场景,这次的课程我将和大家一起来研究如何用代码,完成对建立好了的三维场景的观察. 首先看一下DEMO的界面:     ...

  4. iOS 10 SceneKit 新特性 – SceneKit 制作 3D 场景框架

    来源:scauos(@大朕东) 链接:http://www.jianshu.com/p/b30785bb6c97 开头语: 今天的主题是探索iOS10 SceneKit的新功能,你可以观看今年WWDC ...

  5. 打造H5里的“3D全景漫游”秘籍

    近来风生水起的VR虚拟现实技术,抽空想起年初完成的“星球计划”项目,总结篇文章与各位分享一下制作基于Html5的3D全景漫游秘籍. QQ物联与深圳市天文台合作,在手Q“发现新设备”-“公共设备”里,连 ...

  6. Unity3D 之3D游戏入门Hello world(一)

    这几天开始玩Unity3D 有关3D的内容了,去年开始玩过一段时间的2D制作,不过因为年初找工作,所以放了一段时间, 现在再捡起来发现忘的已经差不多了,只能再从头开始,所以就从3D开始算了.下面是3D ...

  7. Unity3D实现3D立体游戏原理及过程

    Unity3D实现3D立体游戏原理及过程 183 0 0     下面的教程是我今天整理的资料,教大家一步步完成自己的3D立体游戏,并向大家介绍一些3D成像的原理.     理论上,每个普通的非立体3 ...

  8. Unity3D教程:无缝地形场景切换的解决方法

    http://www.unitymanual.com/6718.html 当我们开发一个大型项目的时候-会遇到这样的问题(地形场景的切换)这个只是字面意思-并不是重场景1的100  100 100坐标 ...

  9. 打造自己的3D全景漫游

    three.js 示例: ​ 打造H5里的"3D全景漫游"秘籍 - 腾讯ISUX ​ QQ物联星球计划 通过pano2vr直接将鱼眼全景图生成立体空间的六个面:也可通过Photos ...

随机推荐

  1. Play! 1.x Eclipse Debug调试报错解决方法记录

    使用Play eclipsify xxxx[项目路径],可以把play new xxxx[项目路径]创建的工程生成为Eclipse的项目 但是在Debug AS 调试的时候,会报以下错误 Error ...

  2. Ajax工作原理及优缺点

    1. Ajax是什么? 全称是 asynchronous javascript and xml,是已有技术的组合,主要用来实现客户端与服务器端的异步通信效果(无需重新加载整个网页的情况下),实现页面的 ...

  3. Eclipse中Git图标表示内容

    Eclipse中->属性->Team->Git->Label Decorations

  4. rxjs简单的Observable用例

    import React from 'react'; import { Observable } from 'rxjs'; const FlowPage = () => { const onSu ...

  5. CF 150E Freezing with Style [长链剖分,线段树]

    \(sol:\) 给一种大常数 \(n \log^2 n\) 的做法 考虑二分,由于是中位数,我们就二分这个中位数,\(x>=mid\)则设为 \(1\),否则为 \(-1\) 所以我们只需要找 ...

  6. VMware Workstation Pro工具

    安装包 链接:https://pan.baidu.com/s/1n-URb83lHtric3Ds8UbF9Q 提取码:c9z5 密钥 FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA CV7 ...

  7. Entity Framework 6 Code First的简单使用和更新数据库结构

    一.安装Entity Framework 6 在项目中右击选择“管理NuGet程序包",联机搜索Entity Framework,点击安装 二.配置数据库连接 在App.config中加入数 ...

  8. matlab逐行读取text文件,编写函数提取需要的文字

    在数学建模中遇到的数据比较难处理,而且给的是text格式,自己想了好长时间才编出来,现在分享一下,可以交流学习 目标的text文件是 只提取里面的数据 需要自编函数 clc,clear path='D ...

  9. vs2015运行时提示未加载vcruntime140.adm64.pb

    后调试查看发现 vs2015运行时提示未加载vcruntime140.adm64.pb 解决方案:去微软官网下载安装 vc_redist.exe ,安装就可以了.有64位版和32位版,根据计算机配置进 ...

  10. Java中的实体类--Serializable接口、transient 关键字

    在java中,实体类是一个非常重要的概念,我们可以在实体类中封装对象.设置其属性和方法等.关于实体类,也经常涉及到适配器模式.装饰者模式等设计模式.那么在实际代码开发中,关于实体类的注意事项有哪些呢? ...