一下所有素材和源码都来自unity商店的实例 Top-Down RPG Starter Kit ,这个demo是unity商店上最好的入门级rpg游戏实例,麻雀虽小,五脏俱全,想要弄清楚一个标准的rpg游戏的方方面面,这个是很好的选择。
ps:demo写得很高深,看得不是很懂,准备慢慢研究。
来一张工程全貌图。
这是一个俯视视角(可以调整视角)的卡通风格3D角色扮演游戏,配着动听又欢快的背景音乐,还有那萌萌哒的怪物,仿佛又回到了初中时玩冒险岛online的时候~~,额,不废话,主要模块如下:
<span style="white-space:pre"> </span>void OnMouseUp() { this.guiTexture.texture = buttonNormal; Invoke("LoadScene",0.1f); } void OnMouseDown() { if(buttonSfx != null) AudioSource.PlayClipAtPoint(buttonSfx,transform.position); this.guiTexture.texture = buttonDown; } void LoadScene() { Application.LoadLevel(loadSceneName);; }
public class SelectCharacter : MonoBehaviour { public GameObject[] hero; //your hero public GameObject buttonNext,buttonPrev; //button prev and button next [HideInInspector] public int indexHero = 0; //index select hero private GameObject[] heroInstance; //use to keep hero gameobject when Instantiate // Use this for initialization void Start () { heroInstance = new GameObject[hero.Length]; //add array size equal hero size indexHero = 0; //set default selected hero SpawnHero(); //spawn hero to display current selected //check if hero is less than 1 , button next and prev will disappear if(hero.Length <= 1) { buttonNext.SetActive(false); buttonPrev.SetActive(false); } } //Check show only selected character public void UpdateHero(int _indexHero) { for(int i=0; i<hero.Length;i++) { //Show only select character if(i == _indexHero) { heroInstance[i].SetActive(true); }else { //Hide Other Character heroInstance[i].SetActive(false); } } } //Spawn all hero public void SpawnHero() { for(int i=0;i<hero.Length;i++) { heroInstance[i] = (GameObject)Instantiate(hero[i],transform.position,transform.rotation); } UpdateHero(indexHero); } }
Quaternion rotation = Quaternion.Euler(y, x, 0); Vector3 calPos = new Vector3(0, 0, -distanceLerp); position = rotation * calPos + target.transform.position; transform.rotation = rotation;
bool CheckConditionItem(int id,int amout) { for(int i =0;i<inventory.bag_item.Count;i++) { if(inventory.bag_item[i].item_id == id && inventory.bag_item[i].item_amount >= amout) { inventory.bag_item[i].item_amount -= amout; if(inventory.bag_item[i].item_amount <= 0) { inventory.bag_item[i].item_id = 0; } return true; } } return false; } void GiveReward(int id) { for(int i=0;i<questData.questSetting.Count;i++) { if(questID == questData.questSetting[i].questID) { inventory.GiveItem((int)questData.questSetting[i].itemIDReward.x,(int)questData.questSetting[i].itemIDReward.y); Debug.Log("Give"); break; } } }
public enum Equipment_Type{ Null = 0, Head_Gear = 1, Armor = 2, Shoes = 3, Accessory = 4, Left_Hand = 5, Right_Hand = 6, Two_Hand = 7 }
public Item Get_Item(int item_id){ int i = 0; bool isEnd = false; if(isEnd == false){ while(i < item_equipment_set.Count){ if(item_id == item_equipment_set[i].item_ID){ return item_equipment_set[i]; i = item_equipment_set.Count; isEnd = true; } i++; } } i = 0; if(isEnd == false){ while(i < item_usable_set.Count){ if(item_id == item_usable_set[i].item_ID){ return item_usable_set[i]; i = item_usable_set.Count; isEnd = true; } i++; } } i = 0; if(isEnd == false){ while(i < item_etc_set.Count){ if(item_id == item_etc_set[i].item_ID){ return item_etc_set[i]; i = item_etc_set.Count; isEnd = true; } i++; } } i = 0; if(isEnd == false){ while(i < item_gold.Length){ if(item_id == item_gold[i].item_ID){ return item_gold[i]; i = item_gold.Length; isEnd = true; } i++; } } return null; }
void TextureSetup () { if(signType == MinimapSignType.Player) { this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[0]; }else if(signType == MinimapSignType.Enemy) { this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[1]; }else if(signType == MinimapSignType.Boss) { this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[2]; }else if(signType == MinimapSignType.Npc) { this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[3]; }else if(signType == MinimapSignType.ShopWeapon) { this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[4]; }else if(signType == MinimapSignType.ShopPotion) { this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[5]; }else if(signType == MinimapSignType.SavePoint) { this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[6]; }else if(signType == MinimapSignType.Quest) { this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[7]; } }
// Move to destination if(ctrlAnimState == ControlAnimationState.Move){ if(controller.isGrounded){ movedir = Vector3.zero; movedir = transform.TransformDirection(Vector3.forward*moveSpeed); } }else { movedir = Vector3.Lerp(movedir,Vector3.zero,Time.deltaTime * 10); } movedir.y -= 20 * Time.deltaTime; controller.Move(movedir*Time.deltaTime);
public void UseDropItem(){ for(int i = 0; i < item_Drop_List.Count; i++){ float percentResult = Random.Range(0,100); if(percentResult < item_Drop_List[i].percentDrop){ GameObject go = (GameObject)Instantiate(item_Obj_Pref,transform.position+(Vector3.up),Quaternion.identity); go.rigidbody.AddForce(new Vector3(Random.Range(-1,1)*1.5f*powerImpulse,1*3*powerImpulse,Random.Range(-1,1)*1.5f*powerImpulse),ForceMode.Impulse); Item_Obj item_obj = go.GetComponent<Item_Obj>(); item_obj.item_id = item_Drop_List[i].item_id; item_obj.SetItem(); if(item_obj.gold){ item_obj.gold_price = Random.Range(gold_min, gold_max); } } } }
GUI.BeginGroup(new Rect(posHPbar.x, posHPbar.y,sizeHPBar.x,sizeHPBar.y)); GUI.DrawTexture(new Rect(0,0, sizeHPBar.x ,sizeHPBar.y), hpBar); GUI.BeginGroup(new Rect(0,0,ConvertHP(sizeHPBar.x,maxHP,curHP),sizeHPBar.y)); GUI.DrawTexture(new Rect(0,0,sizeHPBar.x,sizeHPBar.y), hpCurrent); GUI.EndGroup(); GUI.EndGroup();
public void PlayingSound(string _soundName){ AudioSource.PlayClipAtPoint(sound_List[FindSound(_soundName)].audioClip, Camera.mainCamera.transform.position); } private int FindSound(string _soundName){ int i = 0; while( i < sound_List.Count ){ if(sound_List[i].soundName == _soundName){ return i; } i++; } return i; }
原文:http://blog.csdn.net/u012234115/article/details/46311237