导入Xml文档,
在文件夹的Manager下新建脚本LoadManager,
双击LoadManager.cs修改代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadManager
{
public static AudioClip LoadAudio(string str) {
AudioClip clip = Resources.Load
return clip;
}
public static GameObject LoadGameObject(string str)
{
GameObject obj = Resources.Load
return obj;
}
public static Sprite LoadSprite(string str)
{
Sprite sprite = Resources.Load
return sprite;
}
public static TextAsset LoadXml(string str)
{
TextAsset t = Resources.Load
return t;
}
}
在Manager文件夹下创建脚本GameManager,
双击GameManager.cs修改代码:
using System.Collections.Generic;
using System.Xml;
using Unity.VisualScripting;
using UnityEngine;
public enum GameState { Play, Menu };
public class GameManager{
//当只需要一个的时候使用静态类
public static GameState gameState = GameState.Play;
public static void Init()
{
//SetGoods();
}
public static T FindType
{
return t.Find(n).GetComponent
}
public static T ParseEnum
{
return (T)System.Enum.Parse(typeof(T), value, true);
}
}
在Manager文件夹下创建脚本MainGame,
双击MainGame.cs修改代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MainGame : MonoBehaviour
{
public static Transform canvas;
private void Awake()
{
GameManager.Init();
canvas = transform;
}
}
再在Scripts脚本文件夹下新建文件夹命名为:Living(活着的生物),
在Living创建基类People,
双击People.cs修改代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class People : MonoBehaviour{
}
再创建两个子类MyPlayer,
双击MyPlayer.cs修改代码:
第二个子类,
双击Enemy.cs修改代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : People
{
}
重新修改MainGame代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MainGame : MonoBehaviour
{
public static Transform canvas;
public static MyPlayer player;
private void Awake()
{
GameManager.Init();
player = GameObject.Find("Player").GetComponent
canvas = transform;
}
}
接下来挂载脚本:
新建脚本文件夹Data,
新建脚本DataObject,
写代码(数据类:为角色提供数据):
将DataObject脚本挂载到Player人物上,
在脚本文件夹下创建SkillBase文件夹,
新建SkillBase.cs
双击SkillBase.cs修改脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public enum SkillType { Up, Magic, Physics };
public class SkillBase : MonoBehaviour
{
}
修改People代码:
using System.Collections.Generic;
using UnityEngine;
public class People : MonoBehaviour{
//等价知识点:1 = 2
//1.public int Num { get; }
//------------------------------
//2.int num;
// public int Num(){
// return num;
// }
public DataObject data;
public int Hp{
protected set{ data.hp = value; }
get{ return Mathf.Clamp(data.hp, 0, HpMax); }
}
public int HpMax{
protected set{ data.hpMax = value; }
get{ return data.hpMax + OffsetHp; }
}
public int Mp{
protected set{ data.mp = value; }
get{ return Mathf.Clamp(data.mp, 0, MpMax); }
}
public int MpMax{
protected set{ data.mpMax = value; }
get{ return data.mpMax + OffsetMp; }
}
public float Spd{
protected set{ data.spd = value; }
get{ return data.spd + OffsetSpd; }
}
public int Att{
protected set{ data.att = value; }
get{ return (int)(data.att * GetRandomRate()) + OffsetAtt; }
}
public int Def{
protected set{ data.def = value; }
get{ return data.def + OffsetDef; }
}
public int Mdf{
protected set{ data.mdf = value; }
get{ return data.mdf + OffsetMdf; }
}
public int lv{
protected set => data.lv = value;
get => data.lv;
}
public int Exp { set; get; }
public bool IsDeath { set; get; }
public People Target { get; set; }
public Animator Anim { get; set; }
protected int OffsetHp { set; get; }
protected int OffsetMp { set; get; }
protected int OffsetSpd { set; get; }
protected int OffsetAtt { set; get; }
protected int OffsetDef { set; get; }
protected int OffsetMdf { set; get; }
public Transform attPoint;
public delegate void Fun(People p);
protected event Fun Dead;
protected Dictionary
#region 初始化
protected virtual void InitValue(){
Anim = GetComponent
data = GetComponent
Dead = Death;
}
protected virtual void InitSkill(){
}
#endregion
#region 事件
public void AddEventHandle(Fun funback){
Dead += funback;
}
public void RemoveEventHandle(Fun funback){
Dead -= funback;
}
protected virtual void Death(People p){
IsDeath = true;
Anim.SetTrigger("IsDeath");
p.Victory(this);
Invoke("Over", 5);
}
protected virtual void Victory(People p){
}
protected void Over(){
print("over");
}
#endregion
#region 战斗伤害
protected float GetRandomRate(){
return (Random.Range(-data.randomAtk, data.randomAtk + 1) + 100) * 0.01f;
}
public virtual void BePhysicsHit(int value, People p){
if (IsDeath)
return;
Hp -= value - Def;
UpdateUI();
if (Hp <= 0)
Dead(p);
}
public virtual void BeMagicHit(int value, People p){
if (IsDeath)
return;
Hp -= value - Mdf;
UpdateUI();
if (Hp <= 0)
Dead(p);
}
#endregion
#region Hp/Mp
public virtual void AddHp(int value){
Hp += value;
UpdateUI();
}
public virtual void AddMp(int value){
Mp += value;
UpdateUI();
}
public float GetHpRation(){
return (float)Hp / HpMax;
}
#endregion
protected void Start(){
InitSkill();
InitValue();
}
protected virtual void UpdateUI(){
}
}
修改MyPlayer脚本代码:
using UnityEngine;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;
new void Start(){
base.Start();
}
private void Update(){
}
}
在Living脚本文件夹下新建脚本CameraCtrl,
双击CameraCtrl.cs修改代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraCtrl : MonoBehaviour
{
public float dis;
public float height;
public float speed;
Transform target;
Vector3 targetPos;
// Start is called before the first frame update
void Start()
{
target = MainGame.player.transform;
}
// Update is called once per frame
void Update()
{
transform.LookAt(target.position + Vector3.up * 1.5f);
targetPos = target.forward * (-dis) + target.up * height + target.position;
}
private void LateUpdate()
{
transform.position = Vector3.Lerp(transform.position, targetPos, speed);
}
}
更新MyPlayer代码:
using UnityEngine;
using UnityEngine.UI;
public class MyPlayer : People{
[Header("==============子类变量==============")]
public Transform toolPanel;
public Transform skillPanel;
CharacterController contro;
float rvalue;
float spdFast = 1;
bool isHold;
GameObject sword;
GameObject swordBack;
public Image imageHp;
public Image imageMp;
new void Start(){
base.Start();
}
void Update(){
}
}
再将CameraCtrl摄像机跟随代码挂载在Camera摄像机上,
调节CameraCtrl数值,
运行即完成,
End.