您的位置:首页 > 移动开发 > Unity3D

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

2018-03-01 19:42 405 查看

复制场景

可以沿用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:时间
ac7d
间隔 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);
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: