复制场景
可以沿用start的场景,删除Logo和按钮即可
通过command+D复制start修改名字
添加水波纹
创建一个3D的plane
先将plane清零,取出碰撞体,坐标不是固定的,由实际情况而定,将plane放在镜头和Main Camera之间,让plane将其挡住
为其拖一个水波纹的材质,对图片进行特殊处理,但是是静态的,需要脚本让其跑起来
效果图
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<MeshRenderer>().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挂上脚本,再赋值
返回按钮
创建一个新的Canvas,让其Order in Layer为90,即这个Canvas里的所有控件都在默认层下,次序为90
在新的Canvas中创建返回按钮
同样的方法创建一个设置按钮,创建一个空项目对他们进行分类,空项目的锚点要用按住option的右下角的那个
倒计时
等级
填充物
然后再调整填充物和被填充的尺寸
取消滑动条的可交互,不然用户可以更改经验值
炮台
底座
炮的组装
杂七杂八最终显示效果如图
炮随鼠标转动
要让中间的那根轴和鼠标一起转动
在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);
}
}