S老师 Top-Down RPG Starter Kit 学习
character creation
using UnityEngine; using System.Collections; public class CharacterCreation : MonoBehaviour { public GameObject[] characterPrefabs; public UIInput nameInput;//用来得到输入的文本 private GameObject[] characterGameObjects; ; private int length;//所有可供选择的角色的个数 // Use this for initialization void Start () { length = characterPrefabs.Length; characterGameObjects = new GameObject[length]; ; i < length; i++) { characterGameObjects[i] = GameObject.Instantiate(characterPrefabs[i], transform.position, transform.rotation) as GameObject; } UpdateCharacterShow(); } void UpdateCharacterShow() {//更新所有角色的显示 characterGameObjects[selectedIndex].SetActive(true); ; i < length; i++) { if (i != selectedIndex) { characterGameObjects[i].SetActive(false);//把为选择的角色设置为隐藏 } } } public void OnNextButtonClick() {//当我们点击了下一个按钮 selectedIndex++; selectedIndex %= length; UpdateCharacterShow(); } public void OnPrevButtonClick() {//当我们点击了上一个按钮 selectedIndex--; ) { selectedIndex = length - ; } UpdateCharacterShow(); } public void OnOkButtonClick() { PlayerPrefs.SetInt("SelectedCharacterIndex", selectedIndex);//存储选择的角色 PlayerPrefs.SetString("name", nameInput.value);//存储输入的名字 //加载下一个场景 Application.LoadLevel(); } }
CharacterCreation
custom
using UnityEngine; using System.Collections; public class CursorManager : MonoBehaviour { public static CursorManager _instance; public Texture2D cursor_normal; public Texture2D cursor_npc_talk; public Texture2D cursor_attack; public Texture2D cursor_lockTarget; public Texture2D cursor_pick; private Vector2 hotspot = Vector2.zero; private CursorMode mode = CursorMode.Auto; void Start() { _instance = this; } public void SetNormal() { Cursor.SetCursor(cursor_normal, hotspot, mode); } public void SetNpcTalk() { Cursor.SetCursor(cursor_npc_talk, hotspot, mode); } public void SetAttack() { Cursor.SetCursor(cursor_attack, hotspot, mode); } public void SetLockTarget() { Cursor.SetCursor(cursor_lockTarget, hotspot, mode); } }
CursorManager
using UnityEngine; using System.Collections; public class GameLoad : MonoBehaviour { public GameObject magicianPrefab; public GameObject swordmanPrefab; void Awake() { int selectdIndex = PlayerPrefs.GetInt("SelectedCharacterIndex"); string name = PlayerPrefs.GetString("name"); GameObject go = null; ) { go = GameObject.Instantiate(magicianPrefab) as GameObject; } ) { go = GameObject.Instantiate(swordmanPrefab) as GameObject; } go.GetComponent<PlayerStatus>().name = name; } }
GameLoad
using UnityEngine; using System.Collections; using System.Collections.Generic; public class ObjectsInfo : MonoBehaviour { public static ObjectsInfo _instance; private Dictionary<int, ObjectInfo> objectInfoDict = new Dictionary<int, ObjectInfo>(); public TextAsset objectsInfoListText; void Awake() { _instance = this; ReadInfo(); } public ObjectInfo GetObjectInfoById(int id) { ObjectInfo info=null; objectInfoDict.TryGetValue(id, out info); return info; } void ReadInfo() { string text = objectsInfoListText.text; string[] strArray = text.Split('\n'); foreach (string str in strArray) { string[] proArray = str.Split(','); ObjectInfo info = new ObjectInfo(); ]); ]; ]; ]; ObjectType type = ObjectType.Drug; switch (str_type) { case "Drug": type = ObjectType.Drug; break; case "Equip": type = ObjectType.Equip; break; case "Mat": type = ObjectType.Mat; break; } info.id = id; info.name = name; info.icon_name = icon_name; info.type = type; if (type == ObjectType.Drug) { ]); ]); ]); ]); info.hp = hp; info.mp = mp; info.price_buy = price_buy; info.price_sell = price_sell; } else if (type == ObjectType.Equip) { info.attack = ]); info.def = ]); info.speed = ]); info.price_sell = ]); info.price_buy = ]); ]; switch (str_dresstype) { case "Headgear": info.dressType = DressType.Headgear; break; case "Armor": info.dressType = DressType.Armor; break; case "LeftHand": info.dressType = DressType.LeftHand; break; case "RightHand": info.dressType = DressType.RightHand; break; case "Shoe": info.dressType = DressType.Shoe; break; case "Accessory": info.dressType = DressType.Accessory; break; } ]; switch (str_apptype) { case "Swordman": info.applicationType = ApplicationType.Swordman; break; case "Magician": info.applicationType = ApplicationType.Magician; break; case "Common": info.applicationType = ApplicationType.Common; break; } } objectInfoDict.Add(id, info);//添加到字典中,id为key,可以很方便的根据id查找到这个物品信息 } } } //id //名称 //icon名称 //类型(药品drug) //加血量值 //加魔法值 //出售价 //购买 public enum ObjectType { Drug, Equip, Mat } public enum DressType { Headgear, Armor, RightHand, LeftHand, Shoe, Accessory } public enum ApplicationType{ Swordman,//剑士 Magician,//魔法师 Common//通用 } public class ObjectInfo { public int id; public string name; public string icon_name;//这个名称是存储在图集中的名称 public ObjectType type; public int hp; public int mp; public int price_sell; public int price_buy; public int attack; public int def; public int speed; public DressType dressType; public ApplicationType applicationType; }
ObjectsInfo
using UnityEngine; using System.Collections; public class Status : MonoBehaviour { public static Status _instance; private TweenPosition tween; private bool isShow = false; private UILabel attackLabel; private UILabel defLabel; private UILabel speedLabel; private UILabel pointRemainLabel; private UILabel summaryLabel; private GameObject attackButtonGo; private GameObject defButtonGo; private GameObject speedButtonGo; private PlayerStatus ps; void Awake() { _instance = this; tween = this.GetComponent<TweenPosition>(); attackLabel = transform.Find("attack").GetComponent<UILabel>(); defLabel = transform.Find("def").GetComponent<UILabel>(); speedLabel = transform.Find("speed").GetComponent<UILabel>(); pointRemainLabel = transform.Find("point_remain").GetComponent<UILabel>(); summaryLabel = transform.Find("summary").GetComponent<UILabel>(); attackButtonGo = transform.Find("attack_plusbutton").gameObject; defButtonGo = transform.Find("def_plusbutton").gameObject; speedButtonGo = transform.Find("speed_plusbutton").gameObject; } void Start() { ps = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>(); } public void TransformState() { if (isShow == false) { UpdateShow(); tween.PlayForward(); isShow = true; } else { tween.PlayReverse(); isShow = false; } } void UpdateShow() {// 更新显示 根据ps playerstatus的属性值,去更新显示 attackLabel.text = ps.attack + " + " + ps.attack_plus; defLabel.text = ps.def + " + " + ps.def_plus; speedLabel.text = ps.speed + " + " + ps.speed_plus; pointRemainLabel.text = ps.point_remain.ToString(); summaryLabel.text = "伤害:" + (ps.attack + ps.attack_plus) + " " + "防御:" + (ps.def + ps.def_plus) + " " + "速度:" + (ps.speed + ps.speed_plus); ) { attackButtonGo.SetActive(true); defButtonGo.SetActive(true); speedButtonGo.SetActive(true); } else { attackButtonGo.SetActive(false); defButtonGo.SetActive(false); speedButtonGo.SetActive(false); } } public void OnAttackPlusClick() { bool success = ps.GetPoint(); if (success) { ps.attack_plus++; UpdateShow(); } } public void OnDefPlusClick() { bool success = ps.GetPoint(); if (success) { ps.def_plus++; UpdateShow(); } } public void OnSpeedPlusClick() { bool success = ps.GetPoint(); if (success) { ps.speed_plus++; UpdateShow(); } } }
Status
using UnityEngine; using System.Collections; public class Tags : MonoBehaviour { public const string ground = "Ground";//const 标明这个是一个共有的不可变的变量 public const string player = "Player"; public const string inventory_item = "InventoryItem"; public const string inventory_item_grid = "InventoryItemGrid"; public const string shortcut = "ShortCut"; public const string minimap = "Minimap"; public const string enemy = "Enemy"; }
Tags
enemy
using UnityEngine; using System.Collections; public enum WolfState{ Idle, Walk, Attack, Death } public class WolfBaby : MonoBehaviour { public WolfState state = WolfState.Idle; ; ; ; public float miss_rate = 0.2f; public string aniname_death; public string aniname_idle; public string aniname_walk; public string aniname_now; ; ; private CharacterController cc; ; private bool is_attacked = false; private Color normal; public AudioClip miss_sound; private GameObject hudtextFollow; private GameObject hudtextGo; public GameObject hudtextPrefab; private HUDText hudtext; private UIFollowTarget followTarget; public GameObject body; public string aniname_normalattack; public float time_normalattack; public string aniname_crazyattack; public float time_crazyattack; public float crazyattack_rate; public string aniname_attack_now; ;//攻击速率 每秒 ; public Transform target; ; ; public WolfSpawn spawn; private PlayerStatus ps; void Awake() { aniname_now = aniname_idle; cc = this.GetComponent<CharacterController>(); normal = body.GetComponent<Renderer>().material.color; hudtextFollow = transform.Find("HUDText").gameObject; } void Start() { //hudtextGo = GameObject.Instantiate(hudtextPrefab, Vector3.zero, Quaternion.identity) as GameObject; //hudtextGo.transform.parent = HUDTextParent._instance.gameObject.transform; hudtextGo= NGUITools.AddChild(HUDTextParent._instance.gameObject, hudtextPrefab); hudtext = hudtextGo.GetComponent<HUDText>(); followTarget = hudtextGo.GetComponent<UIFollowTarget>(); followTarget.target = hudtextFollow.transform; followTarget.gameCamera = Camera.main; ps = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>(); //followTarget.uiCamera = UICamera.current.GetComponent<Camera>(); } void Update() { if (state == WolfState.Death) {//死亡 GetComponent<Animation>().CrossFade(aniname_death); } else if (state == WolfState.Attack) {//自动攻击状态 AutoAttack(); } else {//巡逻 GetComponent<Animation>().CrossFade(aniname_now);//播放当前动画 if (aniname_now == aniname_walk) { cc.SimpleMove(transform.forward * speed); } timer += Time.deltaTime; if (timer >= time) {//计时结束 切换状态 timer = ; RandomState(); } } } void RandomState() { , ); ) { aniname_now = aniname_idle; } else { if (aniname_now != aniname_walk) { transform.Rotate(transform.up * Random.Range(, ));//当状态切换的时候,重新生成方向 } aniname_now = aniname_walk; } } public void TakeDamage(int attack) {//受到伤害 if (state == WolfState.Death) return; target = GameObject.FindGameObjectWithTag(Tags.player).transform; state = WolfState.Attack; float value = Random.Range(0f, 1f); if (value < miss_rate) {// Miss效果 AudioSource.PlayClipAtPoint(miss_sound, transform.position); hudtext.Add(); } else {//打中的效果 hudtext.Add(); this.hp -= attack; StartCoroutine( ShowBodyRed() ); ) { state = WolfState.Death; Destroy(); } } } IEnumerator ShowBodyRed() { body.GetComponent<Renderer>().material.color = Color.red; yield return new WaitForSeconds(1f); body.GetComponent<Renderer>().material.color = normal; } void AutoAttack() { if (target != null) { PlayerState playerState = target.GetComponent<PlayerAttack>().state; if (playerState == PlayerState.Death) { target = null; state = WolfState.Idle; return; } float distance = Vector3.Distance(target.position, transform.position); if (distance > maxDistance) {//停止自动攻击 target = null; state = WolfState.Idle; } else if (distance <= minDistance) {//自动攻击 attack_timer+=Time.deltaTime; GetComponent<Animation>().CrossFade(aniname_attack_now); if (aniname_attack_now == aniname_normalattack) { if (attack_timer > time_normalattack) { //产生伤害 target.GetComponent<PlayerAttack>().TakeDamage(attack); aniname_attack_now = aniname_idle; } } else if (aniname_attack_now == aniname_crazyattack) { if (attack_timer > time_crazyattack) { //产生伤害 target.GetComponent<PlayerAttack>().TakeDamage(attack); aniname_attack_now = aniname_idle; } } if (attack_timer > (1f / attack_rate)) { RandomAttack(); attack_timer = ; } } else {//朝着角色移动 transform.LookAt(target); cc.SimpleMove(transform.forward * speed); GetComponent<Animation>().CrossFade(aniname_walk); } } else { state = WolfState.Idle; } } void RandomAttack() { float value = Random.Range(0f, 1f); if (value < crazyattack_rate) {//进行疯狂攻击 aniname_attack_now = aniname_crazyattack; } else {//进行普通攻击 aniname_attack_now = aniname_normalattack; } } void OnDestroy() { spawn.MinusNumber(); ps.GetExp(exp); BarNPC._instance.OnKillWolf(); GameObject.Destroy(hudtextGo); } void OnMouseEnter() { if(PlayerAttack._instance.isLockingTarget==false) CursorManager._instance.SetAttack(); } void OnMouseExit() { if (PlayerAttack._instance.isLockingTarget == false) CursorManager._instance.SetNormal(); } }
WolfBaby
using UnityEngine; using System.Collections; public class WolfSpawn : MonoBehaviour { ; ; ; ; public GameObject prefab; void Update() { if (currentnum < maxnum) { timer += Time.deltaTime; if (timer > time) { Vector3 pos = transform.position; pos.x += Random.Range(-, ); pos.z += Random.Range(-, ); GameObject go = GameObject.Instantiate(prefab, pos, Quaternion.identity) as GameObject; go.GetComponent<WolfBaby>().spawn = this; timer = ; currentnum++; } } } public void MinusNumber() { this.currentnum--; } }
WolfSpawn
inventory
using UnityEngine; using System.Collections; using System.Collections.Generic; public class Inventory : MonoBehaviour { public static Inventory _instance; private TweenPosition tween; ;//金币数量 public List<InventoryItemGrid> itemGridList = new List<InventoryItemGrid>(); public UILabel coinNumberLabel; public GameObject inventoryItem; void Awake() { _instance = this; tween = this.GetComponent<TweenPosition>(); } void Update() { if (Input.GetKeyDown(KeyCode.X)) { GetId(Random.Range(, )); } } //拾取到id的物品,并添加到物品栏里面 //处理拾取物品的功能 ) { //第一步是查找在所有的物品中是否存在该物品 //第二 如果存在,让num +1 InventoryItemGrid grid = null; foreach (InventoryItemGrid temp in itemGridList) { if (temp.id == id) { grid = temp; break; } } if (grid != null) {//存在的情况 grid.PlusNumber(count); } else {//不存在的情况 foreach (InventoryItemGrid temp in itemGridList) { ) { grid = temp; break; } } if (grid != null) {//第三 不过不存在,查找空的方格,然后把新创建的Inventoryitem放到这个空的方格里面 GameObject itemGo = NGUITools.AddChild(grid.gameObject, inventoryItem); itemGo.transform.localPosition = Vector3.zero; itemGo.GetComponent<UISprite>().depth = ; grid.SetId(id,count); } } } ) { InventoryItemGrid grid = null; foreach (InventoryItemGrid temp in itemGridList) { if (temp.id == id) { grid = temp; break; } } if (grid == null) { return false; } else { bool isSuccess = grid.MinusNumber(count); return isSuccess; } } private bool isShow = false; void Show() { isShow = true; tween.PlayForward(); } void Hide() { isShow = false; tween.PlayReverse(); } public void TransformState() {// 转变状态 if (isShow == false) { Show(); } else { Hide(); } } public void AddCoin(int count) { coinCount += count; coinNumberLabel.text = coinCount.ToString();//更新金币的显示 } //这个是取款方法,返回true表示取款成功,返回false取款失败 public bool GetCoin(int count) { if (coinCount >= count) { coinCount -= count; coinNumberLabel.text = coinCount.ToString();//更新金币的显示 return true; } return false; } }
Inventory
using UnityEngine; using System.Collections; public class InventoryDes : MonoBehaviour { public static InventoryDes _instance; private UILabel label; ; void Awake() { _instance = this; label = this.GetComponentInChildren<UILabel>(); this.gameObject.SetActive(false); } // Update is called once per frame void Update () { if (this.gameObject.activeInHierarchy == true) { timer -= Time.deltaTime; ) { this.gameObject.SetActive(false); } } } public void Show(int id) { this.gameObject.SetActive(true); timer = 0.1f; transform.position = UICamera.currentCamera.ScreenToWorldPoint(Input.mousePosition); ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(id); string des = ""; switch (info.type) { case ObjectType.Drug: des = GetDrugDes(info); break; case ObjectType.Equip: des = GetEquipDes(info); break; } label.text = des; } string GetDrugDes(ObjectInfo info) { string str = ""; str += "名称:" + info.name + "\n"; str += "+HP : " + info.hp + "\n"; str += "+MP:" + info.mp + "\n"; str += "出售价:" + info.price_sell + "\n"; str += "购买价:" + info.price_buy; return str; } string GetEquipDes(ObjectInfo info) { string str = ""; str += "名称:" + info.name + "\n"; switch (info.dressType) { case DressType.Headgear: str += "穿戴类型:头盔\n"; break; case DressType.Armor: str += "穿戴类型:盔甲\n"; break; case DressType.LeftHand: str += "穿戴类型:左手\n"; break; case DressType.RightHand: str += "穿戴类型:右手\n"; break; case DressType.Shoe: str += "穿戴类型:鞋\n"; break; case DressType.Accessory: str += "穿戴类型:饰品\n"; break; } switch (info.applicationType) { case ApplicationType.Swordman: str += "适用类型:剑士\n"; break; case ApplicationType.Magician: str += "适用类型:魔法师\n"; break; case ApplicationType.Common: str += "适用类型:通用\n"; break; } str += "伤害值:" + info.attack + "\n"; str += "防御值:" + info.def + "\n"; str += "速度值:" + info.speed + "\n"; str += "出售价:" + info.price_sell + "\n"; str += "购买价:" + info.price_buy; return str; } }
InventoryDes
using UnityEngine; using System.Collections; public class InventoryItem : UIDragDropItem { private UISprite sprite; private int id; void Awake() { sprite = this.GetComponent<UISprite>(); } void Update() { if (isHover) { //显示提示信息 InventoryDes._instance.Show(id); )) { //出来穿戴功能 bool success = EquipmentUI._instance.Dress(id); if (success) { transform.parent.GetComponent<InventoryItemGrid>().MinusNumber(); } } } } protected override void OnDragDropRelease(GameObject surface) { base.OnDragDropRelease(surface); if (surface != null) { if (surface.tag == Tags.inventory_item_grid) {//当拖放到了一个空的格子里面 if (surface == this.transform.parent.gameObject) {//拖放到了自己的格子里面 } else { InventoryItemGrid oldParent = this.transform.parent.GetComponent<InventoryItemGrid>(); this.transform.parent = surface.transform; ResetPosition(); InventoryItemGrid newParent = surface.GetComponent<InventoryItemGrid>(); newParent.SetId(oldParent.id, oldParent.num); oldParent.ClearInfo(); } } else if (surface.tag == Tags.inventory_item) {//当拖放到了一个有物品的格子里面 InventoryItemGrid grid1 = this.transform.parent.GetComponent<InventoryItemGrid>(); InventoryItemGrid grid2 = surface.transform.parent.GetComponent<InventoryItemGrid>(); int id = grid1.id; int num = grid1.num; grid1.SetId(grid2.id, grid2.num); grid2.SetId(id, num); } else if (surface.tag == Tags.shortcut) {//拖到的快捷方式里面 surface.GetComponent<ShortCutGrid>().SetInventory(id); } } ResetPosition(); } void ResetPosition() { transform.localPosition = Vector3.zero; } public void SetId(int id) { ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(id); sprite.spriteName = info.icon_name; } public void SetIconName(int id,string icon_name) { sprite.spriteName = icon_name; this.id = id; } private bool isHover = false; public void OnHoverOver() { isHover = true; } public void OnHoverOut() { isHover = false; } }
InventoryItem
using UnityEngine; using System.Collections; public class InventoryItemGrid : MonoBehaviour { ; private ObjectInfo info = null; ; public UILabel numLabel; // Use this for initialization void Start () { numLabel = this.GetComponentInChildren<UILabel>(); } ) { this.id = id; info = ObjectsInfo._instance.GetObjectInfoById(id); InventoryItem item = this.GetComponentInChildren<InventoryItem>(); item.SetIconName(id,info.icon_name); numLabel.enabled = true; this.num = num; numLabel.text = num.ToString(); } ) { this.num += num; numLabel.text = this.num.ToString(); } //用来减去数量的,可以用来装备的穿戴,返回值,表示是否减去成功 ) { if (this.num >= num) { this.num -= num; numLabel.text = this.num.ToString(); ) { //要清空这个物品格子 ClearInfo();//清空存储的信息 GameObject.Destroy(this.GetComponentInChildren<InventoryItem>().gameObject);//销毁物品格子 } return true; } return false; } //清空 格子存的物品信息 public void ClearInfo() { id = ; info = null; num = ; numLabel.enabled = false; } }
InventoryItemGrid
npc
using UnityEngine; using System.Collections; public class BarNPC : NPC { public static BarNPC _instance; public TweenPosition questTween; public UILabel desLabel; public GameObject acceptBtnGo; public GameObject okBtnGo; public GameObject cancelBtnGo; public bool isInTask = false;//表示是否在任务中 ;//表示任务进度,已经杀死了几只小野狼 private PlayerStatus status; void Awake() { _instance = this; } void Start() { status = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>(); } void OnMouseOver() {//当鼠标位于这个collider之上的时候,会在每一帧调用这个方法 )) {//当点击了老爷爷 GetComponent<AudioSource>().Play(); if (isInTask) { ShowTaskProgress(); } else { ShowTaskDes(); } ShowQuest(); } } void ShowQuest() { questTween.gameObject.SetActive(true); questTween.PlayForward(); } void HideQuest() { questTween.PlayReverse(); } public void OnKillWolf() { if (isInTask) { killCount++; } } void ShowTaskDes(){ desLabel.text = "任务:\n杀死了10只狼\n\n奖励:\n1000金币"; okBtnGo.SetActive(false); acceptBtnGo.SetActive(true); cancelBtnGo.SetActive(true); } void ShowTaskProgress(){ desLabel.text = "任务:\n你已经杀死了" + killCount + "\\10只狼\n\n奖励:\n1000金币"; okBtnGo.SetActive(true); acceptBtnGo.SetActive(false); cancelBtnGo.SetActive(false); } //任务系统 任务对话框上的按钮点击时间的处理 public void OnCloseButtonClick() { HideQuest(); } public void OnAcceptButtonClick() { ShowTaskProgress(); isInTask = true;//表示在任务中 } public void OnOkButtonClick() { ){//完成任务 Inventory._instance.AddCoin(); killCount = ; ShowTaskDes(); }else{ //没有完成任务 HideQuest(); } } public void OnCancelButtonClick() { HideQuest(); } }
BarNPC
using UnityEngine; using System.Collections; public class NPC : MonoBehaviour { void OnMouseEnter() { CursorManager._instance.SetNpcTalk(); } void OnMouseExit() { CursorManager._instance.SetNormal(); } }
NPC
using UnityEngine; using System.Collections; public class ShopDrugNPC : NPC { public void OnMouseOver() {//当鼠标在这个游戏物体之上的时候,会一直调用这个方法 )) {//弹出来药品购买列表 GetComponent<AudioSource>().Play(); ShopDrug._instance.TransformState(); } } }
ShopDrugNPC
using UnityEngine; using System.Collections; public class ShopWeaponNPC : NPC { public void OnMouseOver() {//当鼠标在这个游戏物体之上的时候,会一直调用这个方法 )) {//弹出来武器商店 GetComponent<AudioSource>().Play(); ShopWeaponUI._instance.TransformState(); } } }
ShopWeaponNPC
player
using UnityEngine; using System.Collections; public class FollowPlayer : MonoBehaviour { private Transform player; private Vector3 offsetPosition;//位置偏移 private bool isRotating = false; ; ; ; // Use this for initialization void Start () { player = GameObject.FindGameObjectWithTag(Tags.player).transform; transform.LookAt(player.position); offsetPosition = transform.position - player.position; } // Update is called once per frame void Update () { transform.position = offsetPosition + player.position; //处理视野的旋转 RotateView(); //处理视野的拉近和拉远效果 ScrollView(); } void ScrollView() { //print(Input.GetAxis("Mouse ScrollWheel"));//向后 返回负值 (拉近视野) 向前滑动 返回正值(拉远视野) distance = offsetPosition.magnitude; distance += Input.GetAxis("Mouse ScrollWheel")*scrollSpeed; distance = Mathf.Clamp(distance, , ); offsetPosition = offsetPosition.normalized * distance; } void RotateView() { //Input.GetAxis("Mouse X");//得到鼠标在水平方向的滑动 //Input.GetAxis("Mouse Y");//得到鼠标在垂直方向的滑动 )) { isRotating = true; } )) { isRotating = false; } if (isRotating) { transform.RotateAround(player.position,player.up, rotateSpeed * Input.GetAxis("Mouse X")); Vector3 originalPos = transform.position; Quaternion originalRotation = transform.rotation; transform.RotateAround(player.position,transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));//影响的属性有两个 一个是position 一个是rotation float x = transform.eulerAngles.x; || x > ) {//当超出范围之后,我们将属性归位原来的,就是让旋转无效 transform.position = originalPos; transform.rotation = originalRotation; } } offsetPosition = transform.position - player.position; } }
FollowPlayer
using UnityEngine; using System.Collections; using System.Collections.Generic; public class MagicSphere : MonoBehaviour { ; private List<WolfBaby> wolfList = new List<WolfBaby>(); public void OnTriggerEnter(Collider col) { if (col.tag == Tags.enemy) { WolfBaby baby = col.GetComponent<WolfBaby>(); int index = wolfList.IndexOf(baby); ) { baby.TakeDamage((int) attack); wolfList.Add(baby); } } } }
MagicSphere
using UnityEngine; using System.Collections; public class PlayerAnimation : MonoBehaviour { private PlayerMove move; private PlayerAttack attack; // Use this for initialization void Start () { move = this.GetComponent<PlayerMove>(); attack = this.GetComponent<PlayerAttack>(); } // Update is called once per frame void LateUpdate () { if (attack.state == PlayerState.ControlWalk) { if (move.state == ControlWalkState.Moving) { PlayAnim("Run"); } else if (move.state == ControlWalkState.Idle) { PlayAnim("Idle"); } } else if (attack.state == PlayerState.NormalAttack) { if (attack.attack_state == AttackState.Moving) { PlayAnim("Run"); } } } void PlayAnim(string animName) { GetComponent<Animation>().CrossFade(animName); } }
PlayerAnimation
using UnityEngine; using System.Collections; using System.Collections.Generic; public enum PlayerState { ControlWalk, NormalAttack, SkillAttack, Death } public enum AttackState {//攻击时候的状态 Moving, Idle, Attack } public class PlayerAttack : MonoBehaviour { public static PlayerAttack _instance; public PlayerState state = PlayerState.ControlWalk; public AttackState attack_state = AttackState.Idle; public string aniname_normalattack;//普通攻击的动画 public string aniname_idle; public string aniname_now; public float time_normalattack;//普通攻击的时间 ; ; ;//默认攻击的最小距离 private Transform target_normalattack; private PlayerMove move; public GameObject effect; private bool showEffect = false; private PlayerStatus ps; public float miss_rate = 0.25f; public GameObject hudtextPrefab; private GameObject hudtextFollow; private GameObject hudtextGo; private HUDText hudtext; public AudioClip miss_sound; public GameObject body; private Color normal; public string aniname_death; public GameObject[] efxArray; private Dictionary<string, GameObject> efxDict = new Dictionary<string, GameObject>(); public bool isLockingTarget = false;//是否正在选择目标 private SkillInfo info = null; void Awake() { _instance = this; move = this.GetComponent<PlayerMove>(); ps = this.GetComponent<PlayerStatus>(); normal = body.GetComponent<Renderer>().material.color; hudtextFollow = transform.Find("HUDText").gameObject; foreach (GameObject go in efxArray) { efxDict.Add(go.name, go); } } void Start() { hudtextGo = NGUITools.AddChild(HUDTextParent._instance.gameObject, hudtextPrefab); hudtext = hudtextGo.GetComponent<HUDText>(); UIFollowTarget followTarget = hudtextGo.GetComponent<UIFollowTarget>(); followTarget.target = hudtextFollow.transform; followTarget.gameCamera = Camera.main; } void Update() { ) && state != PlayerState.Death ) { //做射线检测 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; bool isCollider = Physics.Raycast(ray, out hitInfo); if (isCollider && hitInfo.collider.tag == Tags.enemy) { //当我们点击了一个敌人的时候 target_normalattack = hitInfo.collider.transform; state = PlayerState.NormalAttack;//进入普通攻击的模式 timer = ; showEffect = false; } else { state = PlayerState.ControlWalk; target_normalattack = null; } } if (state == PlayerState.NormalAttack) { if (target_normalattack == null) { state = PlayerState.ControlWalk; } else { float distance = Vector3.Distance(transform.position, target_normalattack.position); if (distance <= min_distance) {//进行攻击 transform.LookAt(target_normalattack.position); attack_state = AttackState.Attack; timer += Time.deltaTime; GetComponent<Animation>().CrossFade(aniname_now); if (timer >= time_normalattack) { aniname_now = aniname_idle; if (showEffect == false) { showEffect = true; //播放特效 GameObject.Instantiate(effect, target_normalattack.position, Quaternion.identity); target_normalattack.GetComponent<WolfBaby>().TakeDamage(GetAttack()); } } if (timer >= (1f / rate_normalattack)) { timer = ; showEffect = false; aniname_now = aniname_normalattack; } } else {//走向敌人 attack_state = AttackState.Moving; move.SimpleMove(target_normalattack.position); } } } else if (state == PlayerState.Death) {//如果死亡就播放死亡动画 GetComponent<Animation>().CrossFade(aniname_death); } )) { OnLockTarget(); } } public int GetAttack() { return (int)(EquipmentUI._instance.attack + ps.attack + ps.attack_plus); } public void TakeDamage(int attack) { if (state == PlayerState.Death) return; float def = EquipmentUI._instance.def + ps.def + ps.def_plus; - def) / ); ) temp = ; float value = Random.Range(0f, 1f); if (value < miss_rate) {//MISS AudioSource.PlayClipAtPoint(miss_sound, transform.position); hudtext.Add(); } else { hudtext.Add(); ps.hp_remain -= (int)temp; StartCoroutine(ShowBodyRed()); ) { state = PlayerState.Death; } } HeadStatusUI._instance.UpdateShow(); } IEnumerator ShowBodyRed() { body.GetComponent<Renderer>().material.color = Color.red; yield return new WaitForSeconds(1f); body.GetComponent<Renderer>().material.color = normal; } void OnDestroy() { GameObject.Destroy(hudtextGo); } public void UseSkill(SkillInfo info) { if (ps.heroType == HeroType.Magician) { if (info.applicableRole == ApplicableRole.Swordman) { return; } } if (ps.heroType == HeroType.Swordman) { if (info.applicableRole == ApplicableRole.Magician) { return; } } switch (info.applyType) { case ApplyType.Passive: StartCoroutine( OnPassiveSkillUse(info)); break; case ApplyType.Buff: StartCoroutine(OnBuffSkillUse(info)); break; case ApplyType.SingleTarget: OnSingleTargetSkillUse(info) ; break; case ApplyType.MultiTarget: OnMultiTargetSkillUse(info); break; } } //处理增益技能 IEnumerator OnPassiveSkillUse(SkillInfo info ) { state = PlayerState.SkillAttack; GetComponent<Animation>().CrossFade(info.aniname); yield return new WaitForSeconds(info.anitime); state = PlayerState.ControlWalk; , mp = ; if (info.applyProperty == ApplyProperty.HP) { hp = info.applyValue; } else if (info.applyProperty == ApplyProperty.MP) { mp = info.applyValue; } ps.GetDrug(hp,mp); //实例化特效 GameObject prefab = null; efxDict.TryGetValue(info.efx_name, out prefab); GameObject.Instantiate(prefab, transform.position, Quaternion.identity); } //处理增强技能 IEnumerator OnBuffSkillUse(SkillInfo info) { state = PlayerState.SkillAttack; GetComponent<Animation>().CrossFade(info.aniname); yield return new WaitForSeconds(info.anitime); state = PlayerState.ControlWalk; //实例化特效 GameObject prefab = null; efxDict.TryGetValue(info.efx_name, out prefab); GameObject.Instantiate(prefab, transform.position, Quaternion.identity); switch (info.applyProperty) { case ApplyProperty.Attack: ps.attack *= (info.applyValue / 100f); break; case ApplyProperty.AttackSpeed: rate_normalattack *= (info.applyValue / 100f); break; case ApplyProperty.Def: ps.def *= (info.applyValue / 100f); break; case ApplyProperty.Speed: move.speed *= (info.applyValue / 100f); break; } yield return new WaitForSeconds(info.applyTime); switch (info.applyProperty) { case ApplyProperty.Attack: ps.attack /= (info.applyValue / 100f); break; case ApplyProperty.AttackSpeed: rate_normalattack /= (info.applyValue / 100f); break; case ApplyProperty.Def: ps.def /= (info.applyValue / 100f); break; case ApplyProperty.Speed: move.speed /= (info.applyValue / 100f); break; } } //准备选择目标 void OnSingleTargetSkillUse(SkillInfo info) { state = PlayerState.SkillAttack; CursorManager._instance.SetLockTarget(); isLockingTarget = true; this.info = info; } //选择目标完成,开始技能的释放 void OnLockTarget() { isLockingTarget = false; switch (info.applyType) { case ApplyType.SingleTarget: StartCoroutine( OnLockSingleTarget()); break; case ApplyType.MultiTarget: StartCoroutine(OnLockMultiTarget()); break; } } IEnumerator OnLockSingleTarget() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; bool isCollider = Physics.Raycast(ray, out hitInfo); if (isCollider && hitInfo.collider.tag == Tags.enemy) {//选择了一个敌人 GetComponent<Animation>().CrossFade(info.aniname); yield return new WaitForSeconds(info.anitime); state = PlayerState.ControlWalk; //实例化特效 GameObject prefab = null; efxDict.TryGetValue(info.efx_name, out prefab); GameObject.Instantiate(prefab, hitInfo.collider.transform.position, Quaternion.identity); hitInfo.collider.GetComponent<WolfBaby>().TakeDamage((int)(GetAttack() * (info.applyValue / 100f))); } else { state = PlayerState.NormalAttack; } CursorManager._instance.SetNormal(); } void OnMultiTargetSkillUse(SkillInfo info) { state = PlayerState.SkillAttack; CursorManager._instance.SetLockTarget(); isLockingTarget = true; this.info = info; } IEnumerator OnLockMultiTarget() { CursorManager._instance.SetNormal(); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; ); if (isCollider) { GetComponent<Animation>().CrossFade(info.aniname); yield return new WaitForSeconds(info.anitime); state = PlayerState.ControlWalk; //实例化特效 GameObject prefab = null; efxDict.TryGetValue(info.efx_name, out prefab); GameObject go = GameObject.Instantiate(prefab, hitInfo.point + Vector3.up * 0.5f, Quaternion.identity) as GameObject; go.GetComponent<MagicSphere>().attack = GetAttack() * (info.applyValue / 100f); } else { state = PlayerState.ControlWalk; } } }
PlayerAttack
using UnityEngine; using System.Collections; public class PlayerDir : MonoBehaviour { public GameObject effect_click_prefab; public Vector3 targetPosition = Vector3.zero; private bool isMoving = false;//表示鼠标是否按下 private PlayerMove playerMove; private PlayerAttack attack; void Start() { targetPosition = transform.position; playerMove = this.GetComponent<PlayerMove>(); attack = this.GetComponent<PlayerAttack>(); } // Update is called once per frame void Update () { if (attack.state == PlayerState.Death) return; ) && UICamera.hoveredObject == null) { Ray ray =Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; bool isCollider = Physics.Raycast(ray, out hitInfo); if (isCollider && hitInfo.collider.tag == Tags.ground) { isMoving = true; ShowClickEffect(hitInfo.point); LookAtTarget(hitInfo.point); } } )) { isMoving = false; } if (isMoving) { //得到要移动的目标位置 //让主角朝向目标位置 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; bool isCollider = Physics.Raycast(ray, out hitInfo); if (isCollider && hitInfo.collider.tag == Tags.ground) { LookAtTarget(hitInfo.point); } } else { if (playerMove.isMoving) { LookAtTarget(targetPosition); } } } //实例化出来点击的效果 void ShowClickEffect( Vector3 hitPoint ) { hitPoint = new Vector3( hitPoint.x,hitPoint.y + 0.1f ,hitPoint.z ); GameObject.Instantiate(effect_click_prefab, hitPoint, Quaternion.identity); } //让主角朝向目标位置 void LookAtTarget(Vector3 hitPoint) { targetPosition = hitPoint; targetPosition = new Vector3(targetPosition.x, transform.position.y, targetPosition.z); this.transform.LookAt(targetPosition); } }
PlayerDir
using UnityEngine; using System.Collections; public enum ControlWalkState { Moving, Idle } public class PlayerMove : MonoBehaviour { ; public ControlWalkState state = ControlWalkState.Idle; private PlayerDir dir; private PlayerAttack attack; private CharacterController controller; public bool isMoving = false; void Start() { dir = this.GetComponent<PlayerDir>(); controller = this.GetComponent<CharacterController>(); attack = this.GetComponent<PlayerAttack>(); } // Update is called once per frame void Update () { if (attack.state == PlayerState.ControlWalk) { float distance = Vector3.Distance(dir.targetPosition, transform.position); if (distance > 0.3f) { isMoving = true; state = ControlWalkState.Moving; controller.SimpleMove(transform.forward * speed); } else { isMoving = false; state = ControlWalkState.Idle; } } } public void SimpleMove(Vector3 targetPos) { transform.LookAt(targetPos); controller.SimpleMove(transform.forward * speed); } }
PlayerMove
using UnityEngine; using System.Collections; public enum HeroType { Swordman, Magician } public class PlayerStatus : MonoBehaviour { public HeroType heroType; ; // 100+level*30 public string name = "默认名称"; ;//hp最大值 ;//mp最大值 ; ; ;//当前已经获得的经验 ; ; ; ; ; ; ;//剩余的点数 void Start() { GetExp(); } public void GetDrug(int hp,int mp) {//获得治疗 hp_remain += hp; mp_remain += mp; if (hp_remain > this.hp) { hp_remain = this.hp; } if (mp_remain > this.mp) { mp_remain = this.mp; } HeadStatusUI._instance.UpdateShow(); } ) {//获得点数 if (point_remain >= point) { point_remain -= point; return true; } return false; } public void GetExp(int exp) { this.exp += exp; + level * ; while (this.exp >= total_exp) { //TODO 升级 this.level++; this.exp -= total_exp; total_exp = + level * ; } ExpBar._instance.SetValue(this.exp/total_exp ); } public bool TakeMP(int count) { if (mp_remain >= count) { mp_remain -= count; HeadStatusUI._instance.UpdateShow(); return true; } else { return false; } } }
PlayerStatus
skill
using UnityEngine; using System.Collections; public class SkillItem : MonoBehaviour { public int id; private SkillInfo info; private UISprite iconname_sprite; private UILabel name_label; private UILabel applytype_label; private UILabel des_label; private UILabel mp_label; private GameObject icon_mask; void InitProperty() { iconname_sprite = transform.Find("icon_name").GetComponent<UISprite>(); name_label = transform.Find("property/name_bg/name").GetComponent<UILabel>(); applytype_label = transform.Find("property/applytype_bg/applytype").GetComponent<UILabel>(); des_label = transform.Find("property/des_bg/des").GetComponent<UILabel>(); mp_label = transform.Find("property/mp_bg/mp").GetComponent<UILabel>(); icon_mask = transform.Find("icon_mask").gameObject; icon_mask.SetActive(false); } public void UpdateShow(int level) { if (info.level <= level) {//技能可用 icon_mask.SetActive(false); iconname_sprite.GetComponent<SkillItemIcon>().enabled = true; } else { icon_mask.SetActive(true); iconname_sprite.GetComponent<SkillItemIcon>().enabled = false; } } //通过调用这个方法,来更新显示 public void SetId(int id) { InitProperty(); this.id = id; info = SkillsInfo._instance.GetSkillInfoById(id); iconname_sprite.spriteName = info.icon_name; name_label.text = info.name; switch (info.applyType) { case ApplyType.Passive: applytype_label.text = "增益"; break; case ApplyType.Buff: applytype_label.text = "增强"; break; case ApplyType.SingleTarget: applytype_label.text = "单个目标"; break; case ApplyType.MultiTarget: applytype_label.text = "群体技能"; break; } des_label.text = info.des; mp_label.text = info.mp + "MP"; } }
SkillItem
using UnityEngine; using System.Collections; public class SkillItemIcon : UIDragDropItem { private int skillId; protected override void OnDragDropStart() {//在克隆的icon上调用的 base.OnDragDropStart(); skillId = transform.parent.GetComponent<SkillItem>().id; transform.parent = transform.root; ; } protected override void OnDragDropRelease(GameObject surface) { base.OnDragDropRelease(surface); if (surface != null && surface.tag == Tags.shortcut) {//当一个技能拖到了快捷方式上的时候 surface.GetComponent<ShortCutGrid>().SetSkill(skillId); } } }
SkillItemIcon
using UnityEngine; using System.Collections; using System.Collections.Generic; public class SkillsInfo : MonoBehaviour { public static SkillsInfo _instance; public TextAsset skillsInfoText; private Dictionary<int, SkillInfo> skillInfoDict = new Dictionary<int, SkillInfo>(); void Awake() { _instance = this; InitSkillInfoDict();//初始化技能信息字典 } //我们可以通过在这个方法,根据id查找到一个技能信息 public SkillInfo GetSkillInfoById(int id) { SkillInfo info = null; skillInfoDict.TryGetValue(id, out info); return info; } //初始化技能信息字典 void InitSkillInfoDict() { string text = skillsInfoText.text; string[] skillinfoArray = text.Split('\n'); foreach (string skillinfoStr in skillinfoArray) { string[] pa = skillinfoStr.Split(','); SkillInfo info = new SkillInfo(); info.id = ]); info.name = pa[]; info.icon_name = pa[]; info.des = pa[]; ]; switch (str_applytype) { case "Passive": info.applyType = ApplyType.Passive; break; case "Buff": info.applyType = ApplyType.Buff; break; case "SingleTarget": info.applyType = ApplyType.SingleTarget; break; case "MultiTarget": info.applyType = ApplyType.MultiTarget; break; } ]; switch (str_applypro) { case "Attack": info.applyProperty = ApplyProperty.Attack; break; case "Def": info.applyProperty = ApplyProperty.Def; break; case "Speed": info.applyProperty = ApplyProperty.Speed; break; case "AttackSpeed": info.applyProperty = ApplyProperty.AttackSpeed; break; case "HP": info.applyProperty = ApplyProperty.HP; break; case "MP": info.applyProperty = ApplyProperty.MP; break; } info.applyValue = ]); info.applyTime = ]); info.mp = ]); info.coldTime = ]); ]) { case "Swordman": info.applicableRole = ApplicableRole.Swordman; break; case "Magician": info.applicableRole = ApplicableRole.Magician; break; } info.level = ]); ]) { case "Self": info.releaseType = ReleaseType.Self; break; case "Enemy": info.releaseType = ReleaseType.Enemy; break; case "Position": info.releaseType = ReleaseType.Position; break; } info.distance = ]); info.efx_name = pa[]; info.aniname = pa[]; info.anitime = ]); skillInfoDict.Add(info.id, info); } } } //适用角色 public enum ApplicableRole { Swordman, Magician } //作用类型 public enum ApplyType { Passive, Buff, SingleTarget, MultiTarget } //作用属性 public enum ApplyProperty { Attack, Def, Speed, AttackSpeed, HP, MP } //释放类型 public enum ReleaseType { Self, Enemy, Position } //技能信息 public class SkillInfo { public int id; public string name; public string icon_name; public string des; public ApplyType applyType; public ApplyProperty applyProperty; public int applyValue; public int applyTime; public int mp; public int coldTime; public ApplicableRole applicableRole; public int level; public ReleaseType releaseType; public float distance; public string efx_name; public string aniname; ; }
SkillsInfo
using UnityEngine; using System.Collections; public class SkillUI : MonoBehaviour { public static SkillUI _instance; private TweenPosition tween; private bool isShow = false; private PlayerStatus ps; public UIGrid grid; public GameObject skillItemPrefab; public int[] magicianSkillIdList; public int[] swordmanSkillIdList; void Awake() { _instance = this; tween = this.GetComponent<TweenPosition>(); } void Start() { ps = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>(); int[] idList = null; switch (ps.heroType) { case HeroType.Magician: idList = magicianSkillIdList; break; case HeroType.Swordman: idList = swordmanSkillIdList; break; } foreach (int id in idList) { GameObject itemGo = NGUITools.AddChild(grid.gameObject, skillItemPrefab); grid.AddChild(itemGo.transform); itemGo.GetComponent<SkillItem>().SetId(id); } } public void TransformState() { if (isShow) { tween.PlayReverse(); isShow = false; } else { tween.PlayForward(); isShow = true; UpdateShow(); } } void UpdateShow() { SkillItem[] items = this.GetComponentsInChildren<SkillItem>(); foreach (SkillItem item in items) { item.UpdateShow(ps.level); } } }
SkillUI
start
using UnityEngine; using System.Collections; public class ButtonContainer : MonoBehaviour { //1,游戏数据的保存,和场景之间游戏数据的传递使用 PlayerPrefs //2,场景的分类 //2.1开始场景 //2.2角色选择界面 //2.3游戏玩家打怪的界面,就是游戏实际的运行场景 村庄有野兽。。。 //开始新游戏 public void OnNewGame() { PlayerPrefs.SetInt(); // 加载我们的选择角色的场景 2 Application.LoadLevel(); } //加载已经保存的游戏 public void OnLoadGame() { PlayerPrefs.SetInt(); //DataFromSave表示数据来自保存 //加载我们的play场景3 } }
ButtonContainer
using UnityEngine; using System.Collections; public class MovieCamera : MonoBehaviour { ; ; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (transform.position.z < endZ) {//还没有达到目标位置,需要移动 transform.Translate( Vector3.forward*speed*Time.deltaTime); } } }
MovieCamera
using UnityEngine; using System.Collections; public class PressAnyKey : MonoBehaviour { private bool isAnyKeyDown = false;//表示是否有任何按键按下 private GameObject buttonContainer; void Start() { buttonContainer = this.transform.parent.Find("buttonContainer").gameObject; } // Update is called once per frame void Update () { if (isAnyKeyDown == false) { if (Input.anyKey) { // show button container //hide self ShowButton(); } } } void ShowButton() { buttonContainer.SetActive(true); this.gameObject.SetActive(false); isAnyKeyDown = true; } }
PressAnyKey
ui
using UnityEngine; using System.Collections; public class EquipmentItem : MonoBehaviour { private UISprite sprite; public int id; private bool isHover = false; void Awake() { sprite = this.GetComponent<UISprite>(); } void Update() { if (isHover) {//当鼠标在这个装备栏之上的时候,检测鼠标右键的点击 )) {//鼠标右键的点击,表示卸下该装备 EquipmentUI._instance.TakeOff(id,this.gameObject); } } } public void SetId(int id) { this.id = id; ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(id); SetInfo(info); } public void SetInfo(ObjectInfo info) { this.id = info.id; sprite.spriteName = info.icon_name; } public void OnHover(bool isOver) { isHover = isOver; } }
EquipmentItem
using UnityEngine; using System.Collections; public class EquipmentUI : MonoBehaviour { public static EquipmentUI _instance; private TweenPosition tween; private bool isShow = false; private GameObject headgear; private GameObject armor; private GameObject rightHand; private GameObject leftHand; private GameObject shoe; private GameObject accessory; private PlayerStatus ps; public GameObject equipmentItem; ; ; ; void Awake() { _instance = this; tween = this.GetComponent<TweenPosition>(); headgear = transform.Find("Headgear").gameObject; armor = transform.Find("Armor").gameObject; rightHand = transform.Find("RightHand").gameObject; leftHand = transform.Find("LeftHand").gameObject; shoe = transform.Find("Shoe").gameObject; accessory = transform.Find("Accessory").gameObject; ps = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>(); } public void TransformState() { if (isShow == false) { tween.PlayForward(); isShow = true; } else { tween.PlayReverse(); isShow = false; } } //处理装备穿戴功能 public bool Dress(int id) { ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(id); if (info.type != ObjectType.Equip) { return false;//穿戴不成功 } if (ps.heroType == HeroType.Magician) { if (info.applicationType == ApplicationType.Swordman) { return false; } } if (ps.heroType == HeroType.Swordman) { if (info.applicationType == ApplicationType.Magician) { return false; } } GameObject parent = null; switch (info.dressType) { case DressType.Headgear: parent = headgear; break; case DressType.Armor: parent = armor; break; case DressType.RightHand: parent = rightHand; break; case DressType.LeftHand: parent = leftHand; break; case DressType.Shoe: parent = shoe; break; case DressType.Accessory: parent = accessory; break; } EquipmentItem item = parent.GetComponentInChildren<EquipmentItem>(); if (item != null) {//说明已经穿戴了同样类型的装备 Inventory._instance.GetId(item.id);//把已经穿戴的装备卸下,放回物品栏 item.SetInfo(info); } else {//没有穿戴同样类型的装备 GameObject itemGo = NGUITools.AddChild(parent, equipmentItem); itemGo.transform.localPosition = Vector3.zero; itemGo.GetComponent<EquipmentItem>().SetInfo(info); } UpdateProperty(); return true; } public void TakeOff(int id,GameObject go) { Inventory._instance.GetId(id); GameObject.Destroy(go); UpdateProperty(); } void UpdateProperty() { ; ; ; EquipmentItem headgearItem = headgear.GetComponentInChildren<EquipmentItem>(); PlusProperty(headgearItem); EquipmentItem armorItem = armor.GetComponentInChildren<EquipmentItem>(); PlusProperty(armorItem); EquipmentItem leftHandItem = leftHand.GetComponentInChildren<EquipmentItem>(); PlusProperty(leftHandItem); EquipmentItem rightHandItem = rightHand.GetComponentInChildren<EquipmentItem>(); PlusProperty(rightHandItem); EquipmentItem shoeItem = shoe.GetComponentInChildren<EquipmentItem>(); PlusProperty(shoeItem); EquipmentItem accessoryItem = accessory.GetComponentInChildren<EquipmentItem>(); PlusProperty(accessoryItem); } void PlusProperty(EquipmentItem item) { if (item != null) { ObjectInfo equipInfo = ObjectsInfo._instance.GetObjectInfoById(item.id); this.attack += equipInfo.attack; this.def += equipInfo.def; this.speed += equipInfo.speed; } } }
EquipmentUI
using UnityEngine; using System.Collections; public class ExpBar : MonoBehaviour { public static ExpBar _instance; private UISlider progressBar; void Awake() { _instance = this; progressBar = this.GetComponent<UISlider>(); } public void SetValue(float value) { progressBar.value = value; } }
ExpBar
using UnityEngine; using System.Collections; public class FunctionBar : MonoBehaviour { public void OnStatusButtonClick() { Status._instance.TransformState(); } public void OnBagButtonClick() { Inventory._instance.TransformState(); } public void OnEquipButtonClick() { EquipmentUI._instance.TransformState(); } public void OnSkillButtonClick() { SkillUI._instance.TransformState(); } public void OnSettingButtonClick() { } }
FunctionBar
using UnityEngine; using System.Collections; public class HeadStatusUI : MonoBehaviour { public static HeadStatusUI _instance; private UILabel name; private UISlider hpBar; private UISlider mpBar; private UILabel hpLabel; private UILabel mpLabel; private PlayerStatus ps; void Awake() { _instance = this; name = transform.Find("Name").GetComponent<UILabel>(); hpBar = transform.Find("HP").GetComponent<UISlider>(); mpBar = transform.Find("MP").GetComponent<UISlider>(); hpLabel = transform.Find("HP/Thumb/Label").GetComponent<UILabel>(); mpLabel = transform.Find("MP/Thumb/Label").GetComponent<UILabel>(); } void Start() { ps = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>(); UpdateShow(); } public void UpdateShow() { name.text = "Lv." + ps.level + " " + ps.name; hpBar.value = ps.hp_remain / ps.hp; mpBar.value = ps.mp_remain / ps.mp; hpLabel.text = ps.hp_remain + "/" + ps.hp; mpLabel.text = ps.mp_remain + "/" + ps.mp; } }
HeadStatusUI
using UnityEngine; using System.Collections; public class HUDTextParent : MonoBehaviour { public static HUDTextParent _instance; void Awake() { _instance = this; } }
HUDTextParent
using UnityEngine; using System.Collections; public class Minimap : MonoBehaviour { private Camera minimapCamera; void Start() { minimapCamera = GameObject.FindGameObjectWithTag(Tags.minimap).GetComponent<Camera>(); } public void OnZoomInClick() { //放大 minimapCamera.orthographicSize--; } public void OnZoomOutClick() { //缩小 minimapCamera.orthographicSize++; } }
Minimap
using UnityEngine; using System.Collections; public class ShopDrug : MonoBehaviour { public static ShopDrug _instance; private TweenPosition tween; private bool isShow = false; private GameObject numberDialog; private UIInput numberInput; ; void Awake() { _instance = this; tween = this.GetComponent<TweenPosition>(); numberDialog = this.transform.Find("NumberDialog").gameObject; numberInput = transform.Find("NumberDialog/NumberInput").GetComponent<UIInput>(); numberDialog.SetActive(false); } public void TransformState() { if (isShow == false) { tween.PlayForward(); isShow = true; } else { tween.PlayReverse(); isShow = false; } } public void OnCloseButtonClick() { TransformState(); } public void OnBuyId1001() { Buy(); } public void OnBuyId1002() { Buy(); } public void OnBuyId1003() { Buy(); } void Buy(int id) { ShowNumberDialog(); buy_id = id; } public void OnOKButtonClick() { int count = int.Parse(numberInput.value ); ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(buy_id); int price = info.price_buy; int price_total = price * count; bool success = Inventory._instance.GetCoin(price_total); if (success) {//取款成功,可以购买 ) { Inventory._instance.GetId(buy_id, count); } } numberDialog.SetActive(false); } void ShowNumberDialog() { numberDialog.SetActive(true); numberInput.value = "; } }
ShopDrug
using UnityEngine; using System.Collections; public enum ShortCutType{ Skill, Drug, None } public class ShortCutGrid : MonoBehaviour { public KeyCode keyCode; private ShortCutType type = ShortCutType.None; private UISprite icon; private int id; private SkillInfo skillInfo; private ObjectInfo objectInfo; private PlayerStatus ps; private PlayerAttack pa; void Awake() { icon = transform.Find("icon").GetComponent<UISprite>(); icon.gameObject.SetActive(false); } void Start() { ps = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>(); pa = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerAttack>(); } void Update() { if (Input.GetKeyDown(keyCode)) { if (type == ShortCutType.Drug) { OnDrugUse(); } else if (type == ShortCutType.Skill) { //释放技能 //1,得到该技能需要的mp bool success = ps.TakeMP(skillInfo.mp); if (success == false) { } else { //2,获得mp之后,要去释放这个技能 pa.UseSkill(skillInfo); } } } } public void SetSkill(int id) { this.id = id; this.skillInfo = SkillsInfo._instance.GetSkillInfoById(id); icon.gameObject.SetActive(true); icon.spriteName = skillInfo.icon_name; type = ShortCutType.Skill; } public void SetInventory(int id) { this.id = id; objectInfo = ObjectsInfo._instance.GetObjectInfoById(id); if (objectInfo.type == ObjectType.Drug) { icon.gameObject.SetActive(true); icon.spriteName = objectInfo.icon_name; type = ShortCutType.Drug; } } public void OnDrugUse() { ); if (success) { ps.GetDrug(objectInfo.hp, objectInfo.mp); } else { type = ShortCutType.None; icon.gameObject.SetActive(false); id = ; skillInfo = null; objectInfo = null; } } }
ShortCutGrid
weaponshop
using UnityEngine; using System.Collections; public class ShopWeaponItem : MonoBehaviour { private int id; private ObjectInfo info; private UISprite icon_sprite; private UILabel name_label; private UILabel effect_label; private UILabel pricesell_label; void Awake() { icon_sprite = transform.Find("icon").GetComponent<UISprite>(); name_label = transform.Find("name").GetComponent<UILabel>(); effect_label = transform.Find("effect").GetComponent<UILabel>(); pricesell_label = transform.Find("price_sell").GetComponent<UILabel>(); } //通过调用这个方法,更新装备的显示 public void SetId(int id) { this.id = id; info = ObjectsInfo._instance.GetObjectInfoById(id); icon_sprite.spriteName = info.icon_name; name_label.text = info.name; ) { effect_label.text = "+伤害 " + info.attack; } ) { effect_label.text = "+防御 " + info.def; } ){ effect_label.text = "+速度 " + info.speed; } pricesell_label.text = info.price_sell.ToString(); } public void OnBuyClick() { ShopWeaponUI._instance.OnBuyClick(id); } }
ShopWeaponItem
using UnityEngine; using System.Collections; public class ShopWeaponUI : MonoBehaviour { public static ShopWeaponUI _instance; public int[] weaponidArray; public UIGrid grid; public GameObject weaponItem; private TweenPosition tween; private bool isShow = false; private GameObject numberDialog; private UIInput numberInput; ; void Awake() { _instance = this; tween = this.GetComponent<TweenPosition>(); numberDialog = transform.Find("Panel/NumberDialog").gameObject; numberInput = transform.Find("Panel/NumberDialog/NumberInput").GetComponent<UIInput>(); numberDialog.SetActive(false); } void Start() { InitShopWeapon(); } public void TransformState() { if (isShow) { tween.PlayReverse(); isShow = false; } else { tween.PlayForward(); isShow = true; } } public void OnCloseButtonClick() { TransformState(); } void InitShopWeapon() {//初始化武器商店的信息 foreach (int id in weaponidArray) { GameObject itemGo = NGUITools.AddChild(grid.gameObject, weaponItem); grid.AddChild(itemGo.transform); itemGo.GetComponent<ShopWeaponItem>().SetId(id); } } //ok按钮点击的时候 public void OnOkBtnClick() { int count = int.Parse( numberInput.value ); ) { int price = ObjectsInfo._instance.GetObjectInfoById(buyid).price_buy; int total_price = price * count; bool success = Inventory._instance.GetCoin(total_price); if (success) { Inventory._instance.GetId(buyid, count); } } buyid = ; numberInput.value = "; numberDialog.SetActive(false); } public void OnBuyClick(int id) { buyid = id; numberDialog.SetActive(true); numberInput.value = "; } public void OnClick() { numberDialog.SetActive(false); } }
ShopWeaponUI
自己写的没保存,拿老师项目留个记号
项目:https://pan.baidu.com/s/1bpCHbtX
S老师 Top-Down RPG Starter Kit 学习的更多相关文章
- asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料
asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料 NET Pet Shop .NET Pet Shop是一个电子商务的实例, ...
- Window 64bit环境搭建Web Starter Kit
最近在学习https://developers.google.com/web/fundamentals/这里的内容,其中就有一部分是安装Web Starter Kit的教程,我总结一下自己的安装过程. ...
- 介绍使用Cordova和Web Starter Kit开发Android
介绍 如今,每个人都想制作移动应用程序,为什么不呢?世界上有更多的移动设备比任何其他用户设备.Android尤其流行,但是为什么不从一个众所周知的跨平台应用的基础开始呢?Android的开发显然比其他 ...
- 《C#微信开发系列(Top)-微信开发完整学习路线》
年前就答应要将微信开发的学习路线整理给到大家,但是因为年后回来这段时间学校还有公司那边有很多事情需要兼顾,所以没能及时更新文章.今天特地花时间整理了下,话不多说,上图,希望对大家的学习有所帮助哈. 如 ...
- Microsoft IoT Starter Kit 开发初体验
1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...
- iOS7 Sprite Kit 学习
iOS7 Sprite Kit 学习 iOS 7有一个新功能 Sprite Kit 这个有点类似cocos2d 感觉用法都差不多.下面简单来介绍下Sprite Kit About Sprite Kit ...
- Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储
在上一篇文章<Microsoft IoT Starter Kit 开发初体验>中,讲述了微软中国发布的Microsoft IoT Starter Kit所包含的硬件介绍.开发环境搭建.硬件 ...
- React Starter Kit 中文文档
最近没事又翻译了个玩意. Github上的一个Star 非常高的 React 样板程序. 由Node.js,Express,GraphQL和React构建,可选加入Redux等,并可以包含Webpac ...
- Unity Game Starter Kit for Windows Store and Windows Phone Store games
原地址:http://digitalerr0r.wordpress.com/2013/09/30/unity-game-starter-kit-for-windows-store-and-window ...
随机推荐
- python三目运算符
python 可通过 if 语句来实现三目运算符的功能,因此可以近似地把这种if语句当成三目运算符.作为三目运算符的 if 语句的语法格式如下: True_statements if expressi ...
- mvc4使用百度ueditor编辑器
前言 配置.net mvc4项目使用ueditor编辑器,在配置过程中遇见了好几个问题,以此来记录解决办法.编辑器可以到http://ueditor.baidu.com/website/downloa ...
- Java学习笔记11(this,super)
this在构造方法间的使用, public class Person { private String name; private int age; public Person() { //this( ...
- 莫烦tensorflow(3)-Variable
import tensorflow as tf state = tf.Variable(0,name='counter') one = tf.constant(1) new_value = tf.ad ...
- ES6 Module的语法
下面比较一下默认输出和正常输出. // 第一组 export default function crc32() { // 输出 // ... } import crc32 from 'crc32'; ...
- maven导出项目依赖的jar包
摘要: 在进行项目部署时,需要将maven项目所依赖的jar导出到指定目录,本文讲解如何导出项目依赖的jar包 一.导出到默认目录 targed/dependency 从Maven项目中导出项目依赖的 ...
- Scrum_Sprint
1.计划会议过程 经过一天的讨论研究,我们对该项目进行了需求分析,确定了这周所要实现的各个功能 并做好了任务看板,并将项目的各个功能分成一个个任务,进行了初步的分工 2.backlog BACKLOG ...
- 【c++基础】c++提升速度的方法总结
参考 1. C++程序提高运行速度的方法; 2. 提高C++程序运行效率的10个简单方法; 3. C++编程中提高程序运行效率的方式(不断更新); 完
- Linux批量解压文件
最近下载了Imagenet2012的数据文件,训练数据下有很多tar文件,这些tar文件都在一个目录内,所以想批量解压到该目录下每个单独的文件夹内 批量解压的步骤是, 1.列出所有的以tar为后缀的文 ...
- html播放音乐
如何在网站网页中添加音乐代码 告诉你多种格式文件的详细使用代码. width_num——指定一个作为宽度的数字: height_num——指定一个作为高度的数字: 1.mp3 ...