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


    传送门:

    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下的摄像机拖动到人物下。

    设置摄像机属性如图

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

  • 相关阅读:
    【转】ios输入框被键盘挡住的解决办法
    【转】操作系统Unix、Windows、Mac OS、Linux的故事
    mac 下删除非空文件夹
    解决Win7 64bit + VS2013 使用opencv时出现提“应用程序无法正常启动(0xc000007b)”错误
    图的邻接表表示
    图的邻接矩阵表示
    并查集
    05-树9 Huffman Codes及基本操作
    05-树7 堆中的路径
    堆的操作集
  • 原文地址:https://www.cnblogs.com/sc2015/p/5697805.html
Copyright © 2020-2023  润新知