游戏界面的跳转
第一种方式:
需要扩充命名空间:using UnityEngine.SceneManagement;
加载新的场景:SceneManager.LoadScene("场景名称");
第二种方式:
public void OnStartGame(string sceneName)
{
Application.LoadLevel(sceneName);
}
第三种方式:
public void OnStartGame(int a)
{
Application.LoadLevel(a);
}
游戏开发技能图标冷却效果
public Button mButton;//图标
public Image maImage;//遮罩
public Text mText;//技能CD
public const float MAX_CODE_TIME = 3;//技能冷却时间
private float curTime;
void Start()
{
EndSkill();
mButton.onClick.AddListener(OnClickSkillBtnEvent);
}
void Update()
{
if(false == mButton.interactable)
{
//表明我们的技能按钮被点击了,这个时候,就需要CD显示和遮罩旋转处理
//得让我们的Image(Mask)遮罩旋转起来
if(mImage,fillAmount <= 1f && mImage.fillAmount >=0f)
{
//这个时候需要让它旋转
//Time.deltaTime表示当前帧与上一帧时间的差值(就是做线性插值用的,这样cuiTime变化对遮罩旋转,就不会生硬了)
curTime += Time.deltaTime;
//MAX_CODE_TIME - curTime 就是剩下多少冷却时间
//(MAX_CODE_TIME - curTime) / MAX_CODE_TIME 就是剩下的这个冷却时间 / 总的冷却时间,算出来一个旋转比例,这个比例正好介于0--1之间
mImage.fillAmount = (MAX_CODE_TIME - curTime) / MAX_CODE_TIME;
mText.text = Mathf.CeilToInt(MAX_CODE_TIME-curTime).ToString();
//这个意思是说,当技能CD冷却结束了,就是转圈结束了,我们立即将技能按钮恢复到初始状态
if(mImage.fillAmount == 0)
{
EndSkill();
}
}
}
}
void OnClickSkillBtnEvent()
{
//单机时,调用这个状态
StartSkill();
}
void StartSkill()
{
//开始时,设置fillAmount不可用
mButton.interactable = false;
//设置fillAmount开始转圈
mImage.fillAmount = 1f;
//设置冷却时间
mText.text = MAX_CODE_TIME.ToString();
curTime = 0f;
}
void EndSkill()
{
//还原StartSkill设置
mButton.interactable = true;
mImage.fillAmount = 0f;
mText.text = string.Empty;
curTime = 0f;
}
UI——游戏场景加载进度条的实现
public Image mImage;
public Text text;
private AsyncOperation async;
//AsyncOperation跟踪异步操作
private int curProgressValue = 0;
//设置一个计数器
void Start()
{
StartCoroutine(LoadScene());
//调用协程
}
IEnumerator LoadScene()
{
async = SceneManger.LoadSceneAsync("youxi_1");
//加载异步场景
async.allowSceneActivation = false;
//就是加载完(90%)这个youxi_1场景之后呢,我们不让它直接跳转到youxi_1的场景
yield return async;
}
void Update()
{
if(async == null)
{
return;
}
int progressValu = 0;
if(async.progress < 0.9f)//async.progress介于0--1之间
{
progressValu = (int)async.progress * 100;
}
else
{
progressValu = 100;
}
if(curProgressValue < progressValu)
{
curProgressValue++;
}
text.text = curProgressValue + "%";
mImage.fillAmount = curProgressValue / 100f;
if(curProgressValue == 100)
{
async.allowSceneActivation = true;
//curProgressValue == 100时,跳转场景
}
}
UI——游戏背包的拖拽事件
ShowImage的编写脚本
public Sprite[] sprites;
public int index = 0;
void Start()
{
Image img = GetComponent<Image>();
img.sprite = sprites[index];
}
Drag的编写脚本
需要使用UnityEngine.EventSystems;命名空间
public class Drag:MonoBehaviour,IBeginDragHandler,IDragHandler,IEndDragHandler
{
public GameObject grid;
GameObject Instead_gameObject;
public void OnBeginDrag(PointerEventData eventData)
{
if(eventData.button == PointerEventData.InputButton.Left)
//如果当前是按下鼠标左键
{
transform.llocalScale = new Vector3(0.5f,0.5f,0.5f);
//缩放物体
Instead_gameObject = transform.parent.gameObject;
//移动物体的父对象
transform.SetParent(grid.transform,true);
//指定拖拽图片的父控件
transform.GetComponent<CanvasGroup>().blocksRaycasts = false;
//设定它自己不需要碰撞检测
}
}
public void OnDrag(PointerEventData eventData)
{
//正在拖拽事件
if(eventData.button == PointerEventData.InputButton.Left)
//如果当时是按下鼠标左键
{
GetComponent<RectTransform>().pivot.Set(0,0);
//调整原点
transform.position = Input.mousePosition;
//让物体随着鼠标移动
}
}
public void OnEndDrag(PointerEventData eventData)
//拖拽结束事件
{
if(eventData.button == PointerEventData.InputButton.Left)
{
transform.localScale = new Vector3(1f,1f,1f);
//还原物体的大小
if(eventData.pointerCurrentRaycast.gameObject != null && eventData.pointerCurrentRaycast.gameObject.tag == "cell")
//如果松开鼠标时下面有物体并且这个物体的名字叫cell
{
transform.SetParent(eventData.pointerCurrentRaycast.gameObject.transform);
//把拖拽物体放到碰到的物体上
}
else if(eventData.pointerCurrentRaycast.gameObject != null && eventData.pointerCurrentRaycast.gameObject.tag == "item")
{
Transform transform_A = eventData.pointerCurrentRaycast.gameObject.transform;
//记下放到的物体
Transform transfomr_B _parent = transform_A.parent.transform;
//得到它的父物体
transform_A.SetParent(Instead_gameObject.transform,true);
//把拖拽的物体放到它里面
transform_A.localPosition = Vector3.zero;
//还原位置为0
transform.SetParent(transform_B_parent);
/把另外的物体放过去
}
else//如果没有碰到空的单元或物体
{
transform.SetParent(Instead_gameObject.transform,true);
//把拖拽物品放回
}
transform.localPosition = Vector3.zero;
//还原位置
transform.GetComponent<CanvasGroup>().blocksRaycasts = true;
//设定它可以碰撞检测
}
}
}
MouseEvent的编写脚本
需要使用UnityEngine.EventSystems;命名空间
public class MouseEvent:MonoBehaviour,IPointerEnterHandler,IPointerExitHandler
{
public void OnPointerEnter(PointerEventData eventData)
{
print("this is Enter");
}
public void OnPoitnerExit(PointerEventData eventData)
{
print("this is Exit");
}
}