在Unity 5中实现泛波的小舟

发表于2017-04-29
评论0 1.3k浏览
        前两天分享的优化文章相信让大多数已有Unity使用经验的开发者都有所收获。今天的教程面向Unity初学者,即便完全没接触过Unity也可以学着动手。这里为大家分享的就是在Unity 5中实现用方向键控制小船移动并切换视角的过程。

搭建场景

        新建一个3D工程,将其命名为The Boat,在Asset packages中勾选Cameras,Characters和Environment,将这些资源包添加到工程中。以上资源需要在官网先下载并安装StandardAssets资源包。如下图:



        依次点击菜单项Window>Asset Store,在搜索栏中输入Fishing Boat下载本课内容所需的免费小船模型。点击下载后导入可将小船模型直接添加到工程。如下图:



        依次点击菜单项Game Object>3D Object>Plane新建一个Plane命名为Ground。然后在Project视图中点击右键,在弹出菜单中依次选择Create>Material新建材质,同样命名为Ground,并将该材质赋给之前创建的Plane。

        下面设置Ground材质的相关属性,将图片SandAlbedo赋给材质的Albedo字段。然后将Plane沿X轴和Z轴方向放大100倍。此时,我们会发现图片被过度拉伸,修改材质中的Tiling属性使纹理恢复正常,如下图:



        在Project视图中,找到Water4Simple预制,将其直接拖入Hierarchy视图并将位置设为原点。将其Scale的x值设为20,z值设为10。选择Tile下的Water4Simple材质,设置Reflection color属性为你喜欢的颜色。如下图:

         


第一人称视角



        将小船拖入Hierarchy视图,删除小船的子物体fisher和net。

        接下来为小船添加碰撞体,直接在场景中新建一个Cube。然后点击Scene下方的小三角选择Wireframe进入网格模式,在网格模式下,调整Cube的大小和位置,让它适应整个船舱。如下图:



        勾选掉所有Cube的MeshRenderer属性,从而所有的Cube都不会被渲染。

        从Project视图中将FPSController预制拖拽至场景,放置在小船的正上方。删除场景中的Main Camera。运行场景,小船的第一人称视角便制作完成了。效果如下:



第三人称视角及移动

        先禁用场景中的FPSController。将Cameras目录下的MultipurposeCameraRig预制拖拽至场景中。将小船的Tag设置为Player,调节MultipurposeCameraRig的子物体Pivot至合适的高度。

小技巧: 通常在场景运行时才能看出物体的最佳坐标。这时,可以在运行时复制当前组件的坐标信息,停止运行后再拷贝给游戏对象,如下图:        



        新建C#脚本命名为BoatMove,用来实现小船的移动,代码如下:

[C#] 纯文本查看 复制代码
[align=center]using UnityEngine;
using System.Collections;
 
public class BoatMove : MonoBehaviour {
    Rigidbody _Rigidbody;
    float a;
    float b;
    public float forwardSpeed;
    public float RightSpeed;
        // Use this for initialization
        void Start () {
        _Rigidbody = GetComponent();
        }
         
        // Update is called once per frame
        void Update () {
        a = Input.GetAxis("Horizontal");
        b = Input.GetAxis("Vertical");
        _Rigidbody.AddTorque(0f,a*RightSpeed*Time.deltaTime,0f);
        _Rigidbody.AddForce(transform.right*b*forwardSpeed*Time.deltaTime);
         
 
    }
}
[/align]


        运行场景,小船就可以在海面自由的移动了。

切换视角

        在fishingboat下新建子物体playStartPos作为第一人称视角控制器的出生点,将其摆放置合适位置。新建空对象switchMode,用于控制切换视角。新建脚本SwitchMode并添加到switchMode对象,脚本代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[align=center]using UnityEngine;
using System.Collections;
  
public class SwitchMode : MonoBehaviour {
    public GameObject boat;
    public GameObject boatCamera;
    public GameObject player;
    public GameObject playerStartPos;
        // Use this for initialization
        void Start () {
          
        }
          
        // Update is called once per frame
        void Update () {
        if (Input.GetKey("1"))
        {
            boat.GetComponent().isKinematic = false;
            boat.GetComponent().enabled = true;
            boatCamera.SetActive(true);
            player.SetActive(false);
        }
        if (Input.GetKey("2"))
        {
            boat.GetComponent().isKinematic = true;
            boat.GetComponent().enabled = false;
            boatCamera.SetActive(true);
            player.SetActive(true);
            player.transform.position = playerStartPos.transform.position;
        }
        }
}
  
          
          
[/align]
  至此小船就可以通过方向键来控制转向及加速了,按下数字键1和2可切换小船到视角。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引