Unity-3D捕鱼达人小游戏开发 —— 游戏中场景

复制场景

可以沿用start的场景,删除Logo和按钮即可
通过command+D复制start修改名字


这里写图片描述

添加水波纹

创建一个3D的plane


Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第1张图片
这里写图片描述

先将plane清零,取出碰撞体,坐标不是固定的,由实际情况而定,将plane放在镜头和Main Camera之间,让plane将其挡住


Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第2张图片
这里写图片描述

为其拖一个水波纹的材质,对图片进行特殊处理,但是是静态的,需要脚本让其跑起来
Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第3张图片
这里写图片描述

效果图


这里写图片描述

Ef_WaterWave.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ef_WaterWave : MonoBehaviour {
    // 材质
    public Material material;
    // 材质里面的图片数组
    public Texture[] textures;
    // 当前已经放到图片的编号
    private int index = 0;

    void Start () {
        // 获取当前plane的材质
        material = GetComponent().material;
        // 因为Update是按照一帧一帧计算的,太快了所以使用InvokeRepeating
        // p1:方法名 p2:时间间隔 p3:速率
        InvokeRepeating("changeText", 0, 0.1f);
    }
    // 切换材质里图片的函数
    void changeText(){
        // 主材质里的索引图
        material.mainTexture = textures[index];
        // index按照textures长度循坏
        index = (index + 1) % textures.Length;

    }
    void Update () {
        
    }
}

给plane挂上脚本,再赋值


Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第4张图片
这里写图片描述

返回按钮

创建一个新的Canvas,让其Order in Layer为90,即这个Canvas里的所有控件都在默认层下,次序为90


Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第5张图片
这里写图片描述

在新的Canvas中创建返回按钮


Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第6张图片
这里写图片描述

同样的方法创建一个设置按钮,创建一个空项目对他们进行分类,空项目的锚点要用按住option的右下角的那个


Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第7张图片
这里写图片描述

倒计时

这里写图片描述

等级

Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第8张图片
这里写图片描述

填充物


Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第9张图片
这里写图片描述

Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第10张图片
这里写图片描述

然后再调整填充物和被填充的尺寸


Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第11张图片
这里写图片描述

取消滑动条的可交互,不然用户可以更改经验值

炮台

底座

这里写图片描述

炮的组装

Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第12张图片
这里写图片描述

杂七杂八最终显示效果如图


这里写图片描述

Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第13张图片
这里写图片描述

炮随鼠标转动

Unity-3D捕鱼达人小游戏开发 —— 游戏中场景_第14张图片
这里写图片描述

要让中间的那根轴和鼠标一起转动
在API中找到一个方法

public static bool ScreenPointToWorldPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector3 worldPoint); 

返回鼠标在当前Canvas的坐标

为炮台旋转写的脚本GunFollow.cs

public class GunFollow : MonoBehaviour {
    // 枪在Canvas中,需要取到Canvas
    public RectTransform UGUICanvas;
    // 方法需要传入Camera,可以用Camera.main代替,但是有多个Camera可能会出现问题
    public Camera mainCamera;
    void Start () {
        
    }
    
    void Update () {
        // 方法返回的计算好的值,鼠标在当前Canvas的坐标
        Vector3 mousePost;
        RectTransformUtility.ScreenPointToWorldPointInRectangle
                            (UGUICanvas,
                             new Vector2(Input.mousePosition.x, Input.mousePosition.y),
                             mainCamera,out mousePost);
        // 获得旋转的角度
        float z;
        // 判断鼠标在炮台的左方还是右方
        if (mousePost.x > transform.position.x)
        {
            // 返回的永远是正值,右边的角度是负值,所以要变号
            z = -Vector3.Angle(Vector3.up, mousePost - transform.position);
        }
        else
        {
            z = Vector3.Angle(Vector3.up, mousePost - transform.position);
        }
        // Quaternion四元数,localRotation只接受四元数
        // Quaternion.Euler:欧拉角对应的四元数
        transform.localRotation = Quaternion.Euler(0, 0, z);
    }
}
这里写图片描述

你可能感兴趣的:(Unity-3D捕鱼达人小游戏开发 —— 游戏中场景)