城市激斗
一、简介
1、所需知识点
(1)射线检测
(2)Mecanim动画系统
(3)Navigation寻路系统
(4)UGUI
(5)欧拉角与四元数、向量
(6)持久化数据
2、游戏需求
(1)开始界面(人物换装),到游戏场景角色诞生,诞生的角色穿着换装界面存储的服装。
(2)随机在3个诞生点,一共产生3波怪(每波怪2-3个即可)。
(3)怪物头顶有血条,随着波数的累加怪物越来越难打(血量多)。
(4)角色与怪之间动画互动(Mecanim动画系统),如:角色射线打到怪物,角色播放攻击动画,怪播放受到攻击的动画。
(5)敌人,角色血条效果。
(6)打敌人,随机产生掉装备,吃到掉的装备可实现例如加血的效果。
(7)打死3波怪后胜利画面,自己血条值为0时GameOver画面 。
二、开始界面
先上图,看看最终完成是什么样的!

在点击不同的按钮有不同的事件响应,按钮功能就不进行说明了。
按钮功能实现逻辑: 以上按钮可以分为四种按钮,分别是角色选择、服装选择、武器选择、动作预览。
那么我们就可以按这四种分类将功能进行实现,创建一个空物体,将一个种类的按钮作为此空物体的孩子,编写的脚本就给予空物体,那么给按钮添加事件就需要遍历所有的子物体,然后添加按钮点击事件。而点击按钮需要实现功能,我就拿角色选择按钮来举例,另外三种按钮的脚本可以仿照此逻辑进行编写;
角色选择按钮功能实现: 在点击按钮后,我需要进行角色物体的创建,那么按钮和预制件之间就需要有响应,那么如何根据我们点击的按钮来创建指定的角色呢?我们可以通过按钮名字与预制件名字来进行联系,将按钮名字设置成为预制件的名字 (按钮名字也可以不和预制件名字相同,但是必须包含预制件名字),那么功能的实现就比较简单了,可以创建字典,key值为按钮名字,value值为gameobject类型,存储角色预制件,那么我们在点击按钮的时候就可以根据按钮名字直接获取预制件进行创建角色物体了。另三种按钮功能请自行类推了~
温馨提示:代码编写当中的细节问题在代码注释中有说明
1、开始界面按钮功能代码
- 角色选择功能
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class GenerateRole : MonoBehaviour
{
public GameObject[] gameRole;
public Transform vec;
private Dictionary<string,GameObject> dic;
public static GameObject Role {
get; set; }
public GenerateRole() {
}
private void Start()
{
//初始化字典
dic = new Dictionary<string, GameObject>();
//遍历所有的孩子,给按钮添加点击事件
AddEevent();
}
//因按钮和预制件的名字不一样
//所以需要对name进行切割
private void GetButtonName()
{
var button = EventSystem.current.currentSelectedGameObject;
CreateRole(button.name.Substring(4));
}
//遍历所有孩子添加,给按钮添加点击时间
private void AddEevent()
{
string name;
for (int i=0;i<transform.childCount;i++)
{
name = transform.GetChild(i).name.Substring(4);
//将游戏物体添加至字典当中
//每次点击按钮,就将按钮的名字和游戏物体存入字典
//避免重复点击按钮时,需要重复遍历
for (int x=0;x<gameRole.Length;x++)
{
if (gameRole[x].name == name)
{
dic.Add(name,gameRole[x]);
}
}
transform.GetChild(i).GetComponent<Button>().onClick
.AddListener(new UnityAction(GetButtonName));
}
}
//创建游戏物体
private void CreateRole(string name


2万+

被折叠的 条评论
为什么被折叠?



