纳金网

标题: Unity3D角色生产的代码 [打印本页]

作者: 王者再临    时间: 2014-8-30 01:59
标题: Unity3D角色生产的代码
  1. using UnityEngine;
  2. using System.Collections;
  3. using System;

  4. /// <summary>
  5. /// 玩家角色生成器
  6. /// </summary>
  7. public class CharacterGenerator : MonoBehaviour {
  8.     /// <summary>
  9.     /// 玩家的角色类
  10.     /// </summary>
  11.     private PlayerCharacter _player;
  12.     /// <summary>
  13.     /// 开始总共的技能点
  14.     /// </summary>
  15.     private const int Starting_Point = 25;
  16.     /// <summary>
  17.     /// 没做基本属性最低为5
  18.     /// </summary>
  19.     private const int Min_Starting_Attribute_value = 5;
  20.     /// <summary>
  21.     /// 基本属性的起始值
  22.     /// </summary>
  23.     private const int Starting_value = 5;
  24.     /// <summary>
  25.     /// 可分配的属性点
  26.     /// </summary>
  27.     private int pointsLeft;

  28.     void Start()
  29.     {
  30.         //实例化角色,并命名为Player。请务必使游戏对象的名称叫Player,因为我们后面的代码中使用到了这个名字
  31.         GameObject obj = Resources.LoadAssetAtPath("Assets\\Prefabs\\Player\\Sample Hero\\Player_Simple.prefab", typeof(GameObject)) as GameObject;
  32.         obj = Instantiate(obj) as GameObject;
  33.         obj.name = "Player";

  34.         //检查持久化文本里是否保存了历史记录
  35.         string _PlayerName = PlayerPrefs.GetString("Player Name", "");
  36.         Debug.LogWarning("玩家的名称" + _PlayerName);
  37.         //如果没有保存,则开启属性面板,配置属性
  38.         if (_PlayerName == "")
  39.         {
  40.             _player = obj.GetComponent<PlayerCharacter>();
  41.             pointsLeft = Starting_Point;
  42.             for (int i = 0; i < Enum.GetValues(typeof(AttributeName)).Length; i++)
  43.             {
  44.                 //设置基础属性的基本值
  45.                 _player.GetPrimaryAttribute(i).BaseValue = Starting_value;
  46.                 //更新可分配的属性点
  47.                 pointsLeft -= Starting_value;
  48.             }
  49.             _player.Points = pointsLeft;
  50.             //更新生命属性和技能属性
  51.             _player.StatUpdate();

  52.             //加载属性分配的窗体
  53.             GameObject root = GameObject.Find("UI Root/Anchor_Center");
  54.             GameObject panel = Resources.LoadAssetAtPath("Assets\\Prefabs\\Health\\WindowPanel.prefab", typeof(GameObject)) as GameObject;
  55.             panel = Instantiate(panel) as GameObject;
  56.             panel.transform.parent = root.transform;
  57.             panel.transform.localScale = Vector3.one;
  58.             panel.transform.localPosition = Vector3.zero;
  59.             panel.GetComponent<PlayerAttribute>().playChacter = _player;
  60.         }
  61.         else
  62.         {
  63.             Application.LoadLevel(1);
  64.         }
  65.         //因为这个对象在做完以上的工作后就没有作用了。因此我们把它销毁掉
  66.         StartCoroutine("KillMySelf");
  67.     }

  68.     #region 一秒后自杀
  69.     /// <summary>
  70.     /// 一秒后自杀
  71.     /// </summary>
  72.     IEnumerator KillMySelf()
  73.     {
  74.         yield return new WaitForSeconds(1);
  75.         Destroy(gameObject);
  76.     }
  77.     #endregion
  78. }
复制代码

作者: hyui    时间: 2014-8-30 03:16
THanks for sharing this !




欢迎光临 纳金网 (http://c-www.narkii.com/club/) Powered by Discuz! X2.5