《游戏-02_3D-开发》之—基础框架与摄像机跟随

导入Xml文档,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第1张图片



 
   
   
   
   
 

 
   
   
   
 

 
   
   
   
   
   
   
   
   
   
   
 

 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 

在文件夹的Manager下新建脚本LoadManager,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第2张图片

双击LoadManager.cs修改代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第3张图片

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadManager 
{
    public static AudioClip LoadAudio(string str) {
        AudioClip clip = Resources.Load("Audio/" + str);
        return clip;
    }
    public static GameObject LoadGameObject(string str)
    {
        GameObject obj = Resources.Load("Prefab/" + str);
        return obj;
    }
    public static Sprite LoadSprite(string str)
    {
        Sprite sprite = Resources.Load("Pic/" + str);
        return sprite;
    }
    public static TextAsset LoadXml(string str)
    {
        TextAsset t = Resources.Load("Xml/" + str);
        return t;
    }
}

在Manager文件夹下创建脚本GameManager,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第4张图片

双击GameManager.cs修改代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第5张图片

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(Transform t, string n)
    {
        return t.Find(n).GetComponent();
    }
    public static T ParseEnum(string value)
    {
        return (T)System.Enum.Parse(typeof(T), value, true);
    }
}

在Manager文件夹下创建脚本MainGame,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第6张图片

双击MainGame.cs修改代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第7张图片

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(活着的生物),

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第8张图片

在Living创建基类People,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第9张图片

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第10张图片

双击People.cs修改代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class People : MonoBehaviour{
    
}

再创建两个子类MyPlayer,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第11张图片

双击MyPlayer.cs修改代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第12张图片

第二个子类,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第13张图片

双击Enemy.cs修改代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第14张图片

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : People
{
    
}

重新修改MainGame代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第15张图片

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,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第16张图片

新建脚本DataObject,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第17张图片

写代码(数据类:为角色提供数据):

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第18张图片

将DataObject脚本挂载到Player人物上,

在脚本文件夹下创建SkillBase文件夹,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第19张图片

新建SkillBase.cs

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第20张图片

双击SkillBase.cs修改脚本:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第21张图片

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public enum SkillType { Up, Magic, Physics };

public class SkillBase : MonoBehaviour
{
    
}

修改People代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第22张图片

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 skills = new 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脚本代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第23张图片

using UnityEngine;
public class MyPlayer : People{
    [Header("==============子类变量==============")]
    public Transform toolPanel;
    new void Start(){
        base.Start();
    }
    private void Update(){

    }
}
在Living脚本文件夹下新建脚本CameraCtrl,

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第24张图片

双击CameraCtrl.cs修改代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第25张图片

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代码:

《游戏-02_3D-开发》之—基础框架与摄像机跟随_第26张图片

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.

你可能感兴趣的:(3D游戏,c#,1024程序员节)