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

时间:2023-03-09 13:21:42
Unity3D制作3D虚拟漫游场景(二)

传送门:

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

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

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

1.导入人物

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

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

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

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

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

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

这样人物就准备就绪了。

2.设置场景

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

3.将人物放置于场景

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

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

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

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

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

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

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。

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

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

5.设置摄像机跟随

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

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

设置摄像机属性如图

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

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