复制场景
可以沿用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);
}
}
这里写图片描述
网友评论