unity3d障碍物资源_unity3d障碍物 - CSDN
精华内容
参与话题
  • 虽然unity3d有自带的navigation避开障碍物,但有一次做项目时发现:当场景大而且人物变多时这个navigation计算不是很灵敏,于是心想能否自己想出另外一个检测障碍物并避开的方法。话不多说,上代码: using ...

    虽然unity3d有自带的navigation避开障碍物,但有一次做项目时发现:当场景大而且人物变多时这个navigation计算不是很灵敏,于是心想能否自己想出另外一个检测障碍物并避开的方法。话不多说,上代码:

    using UnityEngine;
    using System.Collections;

    public class ObstacleDetection : MonoBehaviour {

    public float MoveSpeed = 2; //避开时的移动速度
    public float ColliderDistance = 2; //检测距离

    public string[] ObstacleTags; //障碍物的标签,就是要避开的障碍物
    public  bool IsObstacle{get{return _IsObstacle;}} //是否有障碍物,用来给外部的接口

    private Vector3 pos; //记录避开障碍物前的的旋转坐标

    private bool IsForward = false; //前方是否有障碍物
    private bool IsInLeft  = false; //左方是否有障碍物
    private bool IsInRight = false; //右方是否有障碍物
    private bool _IsObstacle = false; //是否有障碍物

    private float timer = 0; //避开障碍物后返回原先状态的缓冲计时

    private Transform m_transform;
    // Use this for initialization
    void Start () {
    m_transform = this.transform;

    }
    // Update is called once per frame
    void Update () {
    MoveForward ();
    Detection();

    }
    //当侧面有障碍物而前方没有时向前移动
    void MoveForward()
    {
    if(_IsObstacle)
    {
    if(!IsForward)
    {
    pos = m_transform.localEulerAngles;
    m_transform.Translate(Vector3.forward*Time.deltaTime*MoveSpeed);
    }
    }
    }
    //障碍物检测
    #region Detection
    void Detection()
    {
    IsForward = DirectionForward ();
    IsInLeft = DirectionLeft ();
    IsInRight = DirectionRight ();

    if (IsForward) {
    if (IsInLeft && !IsInRight) 
    {
    float rotateAnglesY = RotateAngles (pos.y + 90);
    m_transform.localEulerAngles = new Vector3 (m_transform.localEulerAngles.x,
                                               rotateAnglesY,
                                               m_transform.localEulerAngles.z);
    else if (!IsInLeft && IsInRight) 
    {
    float rotateAnglesY = RotateAngles (pos.y - 90);
    m_transform.localEulerAngles = new Vector3 (m_transform.localEulerAngles.x,
                                               rotateAnglesY,
                                               m_transform.localEulerAngles.z);
    else if (IsInLeft && IsInRight) 
    {
    float rotateAnglesY = RotateAngles (pos.y + 180);
    m_transform.localEulerAngles = new Vector3 (m_transform.localEulerAngles.x,
                                               rotateAnglesY,
                                               m_transform.localEulerAngles.z);
    }
    else 
    {
    float rotateAnglesY = RotateAngles (pos.y + Random_1_1 () * 90);
    m_transform.localEulerAngles = new Vector3 (m_transform.localEulerAngles.x,
                                               rotateAnglesY,
                                               m_transform.localEulerAngles.z);
    }
    else 
    {
    if(!IsInLeft && !IsInRight)
    {
    if(IsObstacle)
    {
    //避开障碍物到返回原先状态的缓冲时间
    timer += Time.deltaTime;
    if(timer > 0.8f)
    {
    timer = 0;
    _IsObstacle = false;
    }
    }
    }
    }
    }
    //检测前方
    bool DirectionForward()
    {
    bool check = false;
    RaycastHit hitForward;
    Vector3 LocalForward = m_transform.TransformPoint(Vector3.forward)-m_transform.position;
    if (Physics.Raycast (m_transform.position, 
                         LocalForward, 
                         out hitForward, ColliderDistance/2))
    {
    if(CompareTags(hitForward.transform.gameObject.tag))
    {
    _IsObstacle =true;
    check = true;
    }
    }
    return check;
    }
    //检测右方
    bool DirectionRight()
    {
    bool check = false;
    RaycastHit hitRight;
    Vector3 LocalRight = m_transform.TransformPoint(Vector3.right)-m_transform.position;
    if (Physics.Raycast (m_transform.position, 
                         LocalRight, 
                         out hitRight, ColliderDistance)) 
    {
    if(CompareTags(hitRight.transform.gameObject.tag))
    {
    _IsObstacle =true;
    check = true;
    }
    }
    return check;
    }
    //检测左方
    bool DirectionLeft()
    {
    bool check = false;
    RaycastHit hitLeft;
    Vector3 LocalLeft = m_transform.TransformPoint(-Vector3.right)-m_transform.position;
    if (Physics.Raycast (m_transform.position, 
                         LocalLeft, 
                         out hitLeft, ColliderDistance)) 
    {
    if(CompareTags(hitLeft.transform.gameObject.tag))
    {
    _IsObstacle =true;
    check = true;
    }
    }
    return check;
    }
    #endregion
    //自己写的一些小功能
    #region MyFunction
    //遍历ObstacleTags数组,是否与其中的一个值相符
    bool CompareTags(string name)
    {
    bool isSame = false;
    for(int i = 0; i <  ObstacleTags.Length;i++)
    {
    if(ObstacleTags[i].Equals(name))
    {
    isSame = true;
    break;
    }
    }
    return isSame;
    }
    //将角度规范,变为0~360之间
    float RotateAngles(float Angles)
    {
    float angles = 0;
    if (Angles >= 0) {
    angles = Angles - ((int)(Angles / 360)) * 360;
    else 
    {
    angles = (((int)(Angles / 360))+1) * 360 - Angles;
    }
    return angles;
    }
    //产生-1~1的随机数,不包括0
    float Random_1_1()
    {
    float index = Random.Range (-1,1);
    if(index == 0)
    {
    index = Random_1_1();
    }
    return index;
    }
    #endregion
    void OnDrawGizmos()
    {
    Gizmos.color = Color.red;
    Gizmos.DrawLine (transform.position, transform.TransformPoint(Vector3.forward*ColliderDistance/2));
    Gizmos.DrawLine (transform.position, transform.TransformPoint(Vector3.right*ColliderDistance));
    Gizmos.DrawLine (transform.position, transform.TransformPoint(Vector3.left*ColliderDistance));
    }

    }


    展开全文
  • Unity3D实战】零基础一步一步教你制作跑酷类游戏(填坑完整版) - Unity3D知识库

    一、前言

    最近跑酷游戏比较流行,开发教程也很多,但是大部分都是不太详细,这篇文章就带着大家一步一步开发出来一个跑酷类的游戏,教程比较基础,适合大部分Unity开发的初学者。
    还有就是,此专栏已经开通收费,里面整合的都是小游戏的开发教程,想要学习Unity开发游戏的,都可以订阅一下。
    如果文章出现什么问题,就及时联系我

    二、效果图&下载链接

    在这里插入图片描述
    Github地址:https://github.com/764424567/Game_Parkour

    三、教程

    在教程开始之前,我们分析一下跑酷类游戏制作思路。
    首先是道路和障碍物,我们可以先设置三段道路,然后障碍物随机生成
    道路中间有抵达点,角色到达抵达点判断是否将后面的道路移动到前面接起来。
    首先到达第一段的抵达点,肯定是不切换
    到达第二段的抵达点,将1号路段移动到最前面
    到达第三段的抵达点,将2号路段移动到最前面
    循环往复,无穷尽也
    然后是主角的移动脚本,躲避障碍物,移动位置固定三个点,可以跳,可以铲地
    主角碰到障碍物就挂,游戏结束

    1、新建项目

    博主的Unity版本是Unity5.6.1f1,推荐大家使用我这个版本,或者其他的5.6.x版本,不然可能会出现各种各样奇奇怪怪的问题。
    在这里插入图片描述
    文件目录的话就按照我这个目录来,比较清晰明了。

    2、导入资源

    资源已经上传到Github,需要的可以下载
    https://github.com/764424567/Unity-plugin/tree/master/ParkourDemo
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3、处理动画资源

    在这里插入图片描述
    可以看到所有的动画文件都有。
    接着我们就可以新建一个Animator Controller文件来管理动画文件。
    在这里插入图片描述
    命名随意。
    在这里插入图片描述
    接着我们将动画剪辑拖到Animator处理面板中:
    在这里插入图片描述
    默认状态是run,然后有jump 、slide、idle
    在这里插入图片描述
    接着就是“Take Transition”将run和jump 以及 run 、slide、idle连下线。

    设置两个bool值,来控制动画的切换:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    接下来我们就可以在场景中看一下动画效果了:
    在这里插入图片描述

    4、处理路段模型

    在这里插入图片描述
    首先我们找到导入的资源SimpleRoadwork,里面有一个Demo场景,点进去可以看一下各类模型:
    在这里插入图片描述
    在Prefabs文件夹中,可以找到我们需要的各类模型,包括路面、路标、障碍物:
    在这里插入图片描述
    接下来,我们就设计一下路面:
    在这里插入图片描述
    在这里插入图片描述
    接着摆放路标:
    在这里插入图片描述
    接着摆放障碍物:
    在这里插入图片描述
    因为障碍物我们要后期自动生成,现在就可以先隐藏起来。
    在这里插入图片描述
    然后设置到达点(到达点的目的是当角色到达这个位置的时候,自动切换路线):
    在这里插入图片描述
    隐藏它的Mesh Renderer ,将BoxCollider IsTrigger设置成true:
    在这里插入图片描述
    路段就完成了:

    在这里插入图片描述
    整个目录如下:
    在这里插入图片描述
    不会摆放也没有关系,我已经设置好了,用我的也行。

    5、主角模型处理

    在这里插入图片描述

    明显是有点大,我们给它同比例缩小一下:
    在这里插入图片描述
    在这里插入图片描述
    接着设置一下摄像机的视角:

    在这里插入图片描述
    在这里插入图片描述

    6、生成障碍物

    新建脚本Control_Scenes.cs
    我们首先来生成障碍物:

    using UnityEngine;
    
    public class Control_Scenes : MonoBehaviour
    {
        public GameObject[] m_ObstacleArray;
        public Transform[] m_ObstaclePosArray;
    
        void Start()
        {
            Spawn_Obstacle(1);
        }
    	
    	//生成障碍物
    	public void Spawn_Obstacle(int index)
        {
            //销毁原来的对象
            GameObject[] obsPast = GameObject.FindGameObjectsWithTag("Obstacle" + index);
            for (int i = 0; i < obsPast.Length; i++)
            {
                Destroy(obsPast[i]);
            }
            //生成障碍物
            foreach (Transform item in m_ObstaclePosArray[index])
            {
                GameObject prefab = m_ObstacleArray[Random.Range(0, m_ObstacleArray.Length)];
                Vector3 eulerAngle = new Vector3(0, Random.Range(0, 360), 0);
                GameObject obj = Instantiate(prefab, item.position, Quaternion.Euler(eulerAngle));
                obj.tag = "Obstacle" + index;
            }
        }
    }
    
    

    将脚本挂在Control_Scenes对象上:
    将Prefab文件夹里面的模型拖入到ObstacleArray对象数组卡槽中
    将隐藏以后的障碍物拖入到ObstaclePosArray对象数组卡槽中
    在这里插入图片描述
    添加Tag:
    在这里插入图片描述
    运行看一下:
    在这里插入图片描述

    7、路段切换

    我们接着打开Control_Scenes.cs
    添加函数:

    void Start()
    {
            //Spawn_Obstacle(1);
            Change_Road(1);
    }
    public void Change_Road(int index)
    {
            if (m_ISFirst && index == 0)
            {
                m_ISFirst = false;
                return;
            }
            else
            {
                int lastIndex = index - 1;
                if (lastIndex < 0)
                    lastIndex = 2;
                m_RoadArray[lastIndex].transform.position = m_RoadArray[lastIndex].transform.position - new Vector3(150, 0, 0);
                Spawn_Obstacle(lastIndex);
            }
    }
    

    PS:这里解释一下代码,怎么切换的呢
    举个例子,角色跑到了第二段,那么第一段要移动到第三段后面隔一个路段长度的距离,接下来画个图:
    在这里插入图片描述
    那么为啥x轴减去150。这是因为我发现这三条路段的距离都差了50,坐标轴是负轴,所以就减去了150。
    在这里插入图片描述

    我们可以测试一下效果:
    在这里插入图片描述
    但是仅仅这样是不够的,我们还需要在角色到达抵达点的时候,切换路线,当然第一段路不用切换,因为再切就没了。。
    这个在我们写完角色移动以后再补充。

    8、角色移动

    新建脚本:Control_Player.cs
    说明一下:因为我们设定的三条道,所以角色只能在三条道里面切换。那么只需要改变角色的z值就可以了。如果角色在最左边,那么只能往右移动,同理在最右边,只能往左移动,在中间两边都可以移动。

    接着我们就可以看一下z轴的值:
    中间:
    在这里插入图片描述
    在这里插入图片描述

    左边:
    在这里插入图片描述
    在这里插入图片描述
    右边:
    在这里插入图片描述
    在这里插入图片描述
    代码:

    using UnityEngine;
    
    public class Control_Player : MonoBehaviour
    {
        //前进速度
        public float m_ForwardSpeeed = 7.0f;
        //动画组件
        private Animator m_Anim;
        //动画现在状态
        private AnimatorStateInfo m_CurrentBaseState;
    
        //动画状态参照
        static int m_jumpState = Animator.StringToHash("Base Layer.jump");
        static int m_slideState = Animator.StringToHash("Base Layer.slide");
    
        // Use this for initialization
        void Start()
        {
            m_Anim = GetComponent<Animator>();
        }
    
        // Update is called once per frame
        void Update()
        {
            transform.position += Vector3.left * m_ForwardSpeeed * Time.deltaTime;
            m_CurrentBaseState = m_Anim.GetCurrentAnimatorStateInfo(0);
            if (Input.GetKeyDown(KeyCode.W))
            {
                m_Anim.SetBool("jump", true);
            }
            else if (Input.GetKeyDown(KeyCode.S))
            {
                m_Anim.SetBool("slide", true);
            }
            else if (Input.GetKeyDown(KeyCode.A))
            {
                Change_PlayerZ(true);
            }
            else if (Input.GetKeyDown(KeyCode.D))
            {
                Change_PlayerZ(false);
            }
            if (m_CurrentBaseState.fullPathHash == m_jumpState)
            {
                m_Anim.SetBool("jump", false);
            }
            else if (m_CurrentBaseState.fullPathHash == m_slideState)
            {
                m_Anim.SetBool("slide", false);
            }
        }
    
        public void Change_PlayerZ(bool IsAD)
        {
            if (IsAD)
            {
                if (transform.position.z == -14.7f)
                    return;
                else if (transform.position.z == -9.69f)
                {
                    transform.position = new Vector3(transform.position.x, transform.position.y, -14.7f);
                }
                else
                {
                    transform.position = new Vector3(transform.position.x, transform.position.y, -9.69f);
                }
            }
            else
            {
                if (transform.position.z == -6.2f)
                    return;
                else if (transform.position.z == -9.69f)
                {
                    transform.position = new Vector3(transform.position.x, transform.position.y, -6.2f);
                }
                else
                {
                    transform.position = new Vector3(transform.position.x, transform.position.y, -9.69f);
                }
    
            }
        }
    }
    
    

    键盘WSAD控制上跳,下滑,左右移动等操作。现在就可以去试试啦。
    在这里插入图片描述

    但是,有一点哈,角色怎么越跑越远离开了我们呢,因为,还没有写摄像机跟随脚本,接下来继续吧。

    9、摄像机跟随

    新建脚本Control_Camera.cs

    using UnityEngine;
    
    public class Control_Camera : MonoBehaviour
    {
    	//间隔距离
    	public float m_DistanceAway = 5f;
    	//间隔高度
    	public float m_DistanceHeight = 10f;
    	//平滑值
    	public float smooth = 2f;               
    	//目标点
    	private Vector3 m_TargetPosition;      
    	//参照点
    	Transform m_Follow;        
    
    	void Start()
    	{
    		m_Follow = GameObject.Find("Player").transform;
    	}
    
    	void LateUpdate()
    	{
    		m_TargetPosition = m_Follow.position + Vector3.up * m_DistanceHeight - m_Follow.forward * m_DistanceAway;
    		transform.position = Vector3.Lerp(transform.position, m_TargetPosition, Time.deltaTime * smooth);
    	}
    }
    
    

    OK 摄像机跟着Player跑起来了

    10、碰撞检测

    我们需要不停的躲避障碍物,一旦碰撞到障碍物就dead了
    我们首先修改障碍物的碰撞器属性:
    在这里插入图片描述
    Mesh Collider : Is Trigger=true
    在这里插入图片描述
    我们给Player加上刚体和碰撞体:
    在这里插入图片描述
    注意要勾上Is Trigger

    打开Control_Player.cs脚本:

    //游戏结束
    bool m_IsEnd = false;
    void OnGUI()
    {
            if (m_IsEnd)
            {
                GUIStyle style = new GUIStyle();
                style.alignment = TextAnchor.MiddleCenter;
                style.fontSize = 40;
                style.normal.textColor = Color.red;
                GUI.Label(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 50, 200, 100), "你输了~", style);
            }
    }
    void OnTriggerEnter(Collider other)
        {
            if (other.gameObject.name == "Vehicle_DumpTruck" || other.gameObject.name == "Vehicle_MixerTruck")
            {
                m_IsEnd = true;
                m_ForwardSpeeed = 0;
                m_Anim.SetBool("idle", true);
            }
        }
    

    11、切换道路

    在第七章的时候就已经写好了道路切换,但是一直没有讲到碰撞检测,那么现在我们就结合碰撞检测,检测到抵达点然后切换道路吧

    我们首先找到三个抵达点:MonitorPos
    然后改名叫做MonitorPos0 MonitorPos1 MonitorPos2
    在这里插入图片描述
    修改一下BoxCollider的Is Trigger属性:
    在这里插入图片描述
    修改Control_Player.cs的代码:

     //场景控制对象
    Control_Scenes m_ControlScenes;
    void Start()
    {
            m_Anim = GetComponent<Animator>();
            m_ControlScenes = GameObject.Find("Control_Scenes").GetComponent<Control_Scenes>();
    }
    void OnTriggerEnter(Collider other)
    {
            if (other.gameObject.name == "Vehicle_DumpTruck" || other.gameObject.name == "Vehicle_MixerTruck")
            {
                m_IsEnd = true;
                m_ForwardSpeeed = 0;
                m_Anim.SetBool("idle", true);
            }
            if (other.gameObject.name == "MonitorPos0")
            {
                m_ControlScenes.Change_Road(0);
            }
            else if (other.gameObject.name == "MonitorPos1")
            {
                m_ControlScenes.Change_Road(1);
            }
            else if (other.gameObject.name == "MonitorPos2")
            {
                m_ControlScenes.Change_Road(2);
            }
    }
    
    展开全文
  • Unity3d实战之Unity3d网络游戏实战篇(1):坦克构建 阅读文章前请细读以下几点: 学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版。 本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码...

    Unity3d实战之Unity3d网络游戏实战篇(1):坦克构建

    • 阅读文章前请细读以下几点:
    • 学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版。
    • 本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍 以下为个人的学习简记,与诸君共论。
    • 由于U3D的官方案例Tank Tutorial中对坦克的基本操作已经有了详尽的描述(其实是我懒..),因此本文着重于面板系统、服务端基本网络框架和客户端基本网络框架的搭建。
    • 如有疑问或者描述错误的地方,欢迎各位提出或修正,讨论交流是获取和巩固知识的重要途径之一!

    一、坦克的基本控制
     坦克类游戏中,可以根据需要对坦克进行结构划分。书例中将坦克划分为炮管、炮塔、车身、轮子、履带。
     旋转炮管、炮塔的方法与fps类游戏的操控方法类似;
     坦克的操控可以使用基本的移动逻辑去实现,但为了更好地模拟现实中的坦克的移动方式,书中选择了WheelCollider,WheelCollider是Unity3d内置的碰撞器,能够很好地模拟现实中汽车的轮子的碰撞过程、汽车的悬挂系统、引擎系统等汽车关键的物理特性。
    Unity3d-Wheel Collider 官方文档传送门
     轮子的旋转可以根据WheelCollider的旋转速度定义;
     履带可以根据轮子的旋转速度,通过改变贴图纹理的offset值实现履带滚动效果。

    二、射击逻辑
     涉及实例化炮弹Prefab、炮弹飞翔轨迹(LineRender实现,可参考官方案例。。今年U3D的案例更新真的很爆肝…)、炮弹爆炸效果、Tank焚烧效果、以及相关音效。
     书中描述到的还有一个准心:设计思想为玩家通过鼠标确定Tank炮台的最终指向,但Tank本身并不会瞬移到鼠标指向的方向,而是会缓慢移动到目标方向。但由于书中是通过Physics.Raycast来检测Tank每一帧下瞄准的物体以及使用NGUI来绘制准心,因此会出现发射炮弹后,准心跟着炮弹走的现象。

    三、AI坦克
     分层有限状态机是游戏实现人工智能的传统方法。神经网络也能实现坦克AI化(YouTube上有相关的视频:结合Tank Tutorial以及神经网络训练Tank AI)。
     简单来说,分层有限状态机就是给Tank定义几种状态(巡逻、进攻、逃跑等,可用枚举类实现),当达到一定条件时更改Tank的状态,Tank根据当前的状态执行不同的逻辑。
      例;
      AI默认状态为巡逻(在一个定义的范围内随机移动,看起来像在散步hhh);
      当发现敌人时,将AI的状态设置为Attack;
       实时检测以自身为中心半径范围内是否出现带有Tank标签的Tank物体;或
       给AI添加Sphere Collider当发生碰撞时检测是否为敌人;或
       使用Physics.Raycast检测正前方,这样的Tank更像瞎子…等等)
      由于每一帧都在检测AI的状态,因此一旦发生改变,AI的行为就会发生相应的改变。

    注意:这种方式的AI需要自定义AI巡逻的空间,而且通常需要进行路线计算。Unity3d内置的NavMesh为我们解决了这样的问题。NavMesh可以实现自动寻路、绕开障碍物、自动寻路过程中跳过障碍物等等这些都是可以配置和实现的。
    Unity3d-Navigation 官方文档传送门

    前面啰嗦那么多(还偷懒了很多_,-),精彩部分即将开始!

    展开全文
  • unity3d 各大插件评测

    万次阅读 2018-01-30 15:00:43
    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具...

    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院


    引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具。为此我写了插件的经验及理论讲解,涉及插件的 学习/辨别/选择/配合。也写了插件的 评测/教程/下载。关于评测,带有一定的主观性,仅供参考。关于教程,热门插件网上已经有很多教程了,本文提供链接,网上资料少的插件本文提供了使用方法的简单介绍。至于下载,主要是学习交流为主,下载速度还是比较快的。
    (PS:本文主要起一个抛砖引玉的作用。欢迎同学们积极留言交流,大牛不吝指教【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院。本文用武侠功夫这个大家比较感兴趣的内容来描述游戏开发,借此描述Unity插件学习的道理,同时激发同学们的学习兴趣,没兴趣的可以跳过相关内容。我的新浪微博 @风宇冲

    本文一共分为三个部分,第一部分是插件的下载,第二部分是插件的评测,第三部分是插件的学习方法。

                                  第一部分 插件的下载

    下载所有插件 (下载时逐个下载比较快)
    注:所有付费插件下载仅用于学习和交流用途,请在下载后24小时内删除,商业用途请购买正版。(你懂的)


                                  第二部分 插件的评测

    Unity插件本文分以下九个类别介绍,后面跟的是风宇冲的推荐插件:
    一 界面制作 推荐:NGUI
    二 2D游戏制作 推荐:2D Toolkit
    三 可视化编程 推荐:PlayMaker
    四 插值插件 推荐:iTween,HOTween
    五 路径搜寻 推荐:Simple Path
    六 美术及动画制作 推荐:RageSpline,Smooth Moves
    七 画面增强    推荐:Bitmap2Material,Strumpy Shader Editor
    八 摄像机管理  推荐:Security Camera
    九 资源包  推荐:Nature Pack
    十 其他类
    一: 界面设计(UI) -  风宇冲推荐NGUI
    综述:所有UI插件可以实现的功能和效果最后都是差不多的,区别是最终游戏的运行效率和内存占用量不一样,开发的速度也不一样。 NGUI和EZGUI是属于一类,核心是将UI元件图合并到一张大图(atlase)上,再根据uv去找对应的小图,最后使用2D camera绘制。 iGUI是另外一种UI插件,它可以说是Unity自带UI的升级版,也就是OnGUI的延伸。了解OnGUI()的同学都知道,它的运行效率是比较低的,没有Drawcall合并,iGUI也一样。中文等字体制作一般是用Glyph Desginer 或者 Bmfont, 这点NGUI和EZGUI是通用的。总体来说, GUI插件的功能还是略微有限, 无论是什么GUI插件想做复杂点的功能就必须得用脚本。学习维护起来还是稍微有点麻烦的,故依然建议一个团队只一个人或几个人专门负责UI。
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院

    【NGUI】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    细节功能  
    运行效率  
    内存占用   ★
    开发速度   
    掌握时间   
    跨越平台   
    文档教程  
    综合评价  

    优点:UI合成图(atlas)管理方便,字体RGB压缩,持续更新,支持Flash,支持语言本地化即多语言,支持图像高低清配置。
    缺点:卷屏界面(ScrollList)的实现稍微麻烦。
    介绍:目前Unity最好用的UI 插件。重点是 NGUI应该会一直更新,跟着Unity的脚步。 NGUI也更方便于管理atlas,至少每个Sprite在atlas中都有名字来管理可以很方便的添加删除共用,并且Sprite的位置大小信息可见也 可适当调整。
    使用注意:
    (1)一个界面,通常也就是一个panel,一定只能有一个atlase, 否则层级极易出现错乱。

    div STYLE="color: rgb(255, 0, 0);" >【FastGUI】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    细节功能  
    运行效率  与NGUI相同
    内存占用   与NGUI相同
    开发速度   
    掌握时间   
    跨越平台  与NGUI相同
    文档教程  
    综合评价  
    NGUI插件的补充,必须先在工程里导入FastGUI。主要用途为对Photoshop的支持,可以利用Photo的分层快速制作NGUI的UI部件,直接在Unity里使用psd即可。

    【EZGUI】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    细节功能 
    运行效率 
    内存占用 
    开发速度  
    掌握时间  
    跨越平台  
    文档教程 
    综合评价 
      比较经典的UI插件,目前已经基本不更新了。 
    优点:Unity的元老级UI插件,方便实现快速开发
    缺点:已基本不更新,UI合成图不能单图调整。
    使用中注意的几点:
    1:如果是Prefab中有EZGUI的东西的话,每次修改完最好Apply一下,然后点击Build Atlases
    2:如果贴图合成图(atlase)都默认在Sprite Atlases文件夹下,如果图错乱的话,直接删除贴图重新点击Build Atlases生成贴图合成图即可。
    3:位于scrolllist 下的一切物体必须为 EZGUI的组件 , 否则下拉的时候会不被切图。
    scroll item 显示不完整  : 调整scrollist视口x尺寸
    4:假如 点pixel perfect后 仍不显示尺寸则 点击运行则尺寸恢复正常
    5:Panel只 build atlas 精度不够:  把atlas的分辨率调高 然后删掉 重新build
    6:如果是移动平台开发切记EZ GUI组件选项不能钩 pixel perfect,因为其有auto resize会使在iphone 尺寸错误。
    7:EZ脚本里很多有用函数,其默认为protected,建议将有用函数改成public,方便调用。

    【iGUI】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    细节功能  
    运行效率  
    内存占用  
    开发速度   
    掌握时间   
    跨越平台   
    文档教程  
    综合评价  
    优点:快速开发,可视化
    缺点: 效率低
    iGUI是所有UI制作插件里最牛的可视化工具了。它的口号是 WSYIWYG(What you see is what you get),翻译成中文就是 所见即所得。其UI的实现核心是和Unity自带UI也就是OnGUI()是一样的。所以导致了做到后期一整套UI可能会有几十甚至上百的Drawcall。
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院

    二:2D游戏制作 -  风宇冲推荐2D Toolkit
    综述:核心都是 2d精灵(Spritte)以及帧动画的管理和使用。个人觉得2D Toolkit 比Ex2d好些,更像是制作商业2D游戏的软件。
    【2D Toolkit 】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    细节功能  
    运行效率  
    内存占用  
    开发速度  
    掌握时间   
    跨越平台   
    文档教程  
    综合评价  
    优点:专业,靠谱
    缺点:精细的碰撞实现较麻烦
    你想做2D游戏?没错,就是它了!笔者也做过一些2D游戏,棋牌的飞行的RPG的都有,2D Toolkit还是很靠谱的。缺点是碰撞检测要么是简单的多边形(三角形四边形神马的)之间碰撞,或者是简单多边形和复杂多边形之间。复杂多边形和复杂多边形之间的碰撞是不支持的。而且复杂多边形的碰撞体需要自己去画。想做出类似像素碰撞检测的效果也是可以的,沿着图形本身的边缘去画,如果你不嫌麻烦的话。
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院








    【Ex2d】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院

    笔者接触了一点,看了其官方提供的示例,感觉比较娱乐。不多评价了。


    三:可视化编程(Visual Scripting) -  风宇冲推荐PlayMaker
    综述:可视化编程在商业游戏开发里可以辅助编程开发而不是替代编程。PlayMaker可以用来做状态管理。uScript可以用来做简单游戏的开发。
    【PlayMaker】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    可视化程度
    细节功能  
    运行效率  
    开发速度   
    掌握时间   
    跨越平台   
    文档教程  
    综合评价  

    优点:状态管理
    缺点:实现其宣扬的无编程做游戏不靠谱,多状态功能难管理
    Asset Store上面很火的插件,官方说可实现无编程制作完整的游戏。这个个人感觉,你要做个类似俄罗斯方块或者弹弹球之类的小游戏是可以的,但是完全不编程制作商业级的游戏真心不靠谱。举个例子,游戏要赚钱你要嵌入广告sdk或者是IAP等付费sdk,那么你就得写脚本去实现。 不过PlayMaker也还是有可取的地方,其核心在于 将例如站立行走死亡等等状态通过状态机简称FSM(finite state machine)来管理。简单来说一个物体就是一个FSM,一个状态对应一个state。游戏过程中能在物体上方实时显示该物体的状态。并且有很方便的图表管理。缺点在于:所有功能必须对应状态。有很多共同状态都需要的功能用Playmaker做会极其麻烦,比方说,你有一个人物,有5个状态,还有行走攻击等控制输入,每个状态都要控制输入的话,同样的代码你就要有5份,很麻烦。而正常代码的话只需要简单的一段代码几个状态的与运算就可以了。
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院



    【uScript】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    可视化程度
    细节功能  
    运行效率  
    开发速度   
    掌握时间   
    跨越平台   
    文档教程  
    综合评价  

    优点:流程清晰
    缺点:功能不够细致
    如其宣传的,uScript模仿了UDK和CE3的开发形式,注重逻辑流程,所见即所得,逻辑性直观紧凑。但是模块还不够全面功能不细致,例如你可以给材质赋贴图,但是要改变材质颜色就找不到对应功能了,类似情况挺多的。
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院

    四:插值插件 (Tween tool)-  风宇冲推荐iTween / HOTween
    综述:iTween和HOTween各有各的优势,核心功能就是对位移,缩放,颜色等数值进行插值。iTween和HOTween并不冲突,可以同时在一个工程里使用。建议做路径的话最好用iTween, 做非位移,缩放,颜色的数值时只能用HOTween。其他情况最好用HOTween,因为管理更具有可操作性。
    【iTween】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    实用性    
    简易度    ★
    综合评价  
    优点:免费,通用,实用
    缺点:不够稳定,不能返回改变目标tweener
    介绍:免费的经典tween插件。Tween,包括位移,缩放,颜色变换等。NGUI,EZGUI,PlayMaker等很多插件都使用它来实现tween部分。缺点是tween的过程中,如果物体被销毁等情况,容易产生不可预制的错误。
    【iTweenPath】
    可视化    ★
    实用性    
    简易度    ★
    综合评价  
    优点:免费,路径清楚,实用
    介绍:iTween的补充插件,主要是可视化的绘制路径,然后在iTween里使用生成的路径。可以用于TD地图怪物的路径移动。
    使用方法:(1)导入插件后 (2)随便任何一个物体,把iTweenPath拖上去 (3)inspector里设置路径点数量 (4)在选中该物体的前提下,在Scene View里拖拽各个点绘制路径 (5)给路径起名例如 'xyz' (6)代码里使用即可,例如iTween.MoveTo(obj, iTween.Hash("path",iTweenPath.GetPath("xyz"),"time",10f));
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院



    【HOTween】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    实用性    
    简易度    ★
    综合评价  
    优点:免费,管理比iTween更方便,使用范围更广
    缺点:可视化补充件HOTween Edtior作用position时不能像
    iTweenPath那样显示路径。
    介绍:类似iTween的 tween插件,功能更为强大。目标类型不再仅仅为position,color等固定类型,任何你在脚本里定义的public, non-static的 numeric 即 color/vector/int/float/double/string 变量都可以作为目标。并且调用函数后会返回tweener,如果储存tweener可以随时 监测/停止本次tween。
    使用方法:(1)导入插件
    (2)使用HOTween的脚本里添加using Holoville.HOTween;
    Start()里添加HOTween.Init();
    (3)   TweenParms tmp = new TweenParms();
            tmp.Prop("position",new Vector3(5,0,0));
            tmp.Ease(EaseType.Linear);
            HOTween.To(obj.transform,1,tmp);
     其中 position如果换成自定义变量,obj.transform就要换成对应的脚本对象即可。

    序列tween使用方法:
    (1)mySequence = new Sequence(new SequenceParms().Loops(3,LoopType.Yoyo));
    (2)
    mySequence.Append(HOTween.To(myGameObject1.transform, 1, new TweenParms().Prop("position", new Vector3(10,20,30)).Prop("rotation", new Vector3(0,720,0)).Prop("localScale", new Vector3(4,4,4)).Ease(EaseType.EaseOutBounce)));
    有Append /
     Prepend / Insert三种方法,Append是加在序列最后,Prepend是最前,Insert是即将到来的目标
    注意:(1)HOTween.To 等方法是低效的,储存返回的结果tweener,然后反复使用例如tweener.Play()更高效
    (2)Tweener及TweenParms相当于一个容器, 下面填的变量才是真正要改变的内容。
    【HOTween Editor】(要求Unity 3.5.6以上)
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    可视化    ★
    实用性    
    简易度    ★
    综合评价  
    优点:高效,快捷
    缺点:插值作用于position时,无路径显示。
    使用方法:
    (1)选中目标物体 (2)Component->HOTween->HOTweenComponent  (3)在Inspector下的界面点击 蓝色的‘+Add Tween’(4)选择tween目标 (5)点击蓝色的‘+’,注意你想要改变的变量点这一步才会出来。(6)选择要插值的变量 (7)填Tween To等值即可
    (8) 关闭'AutoDestroy'和‘Autoplay ’ (9) 脚本加
    using Holoville.HOTween;
    using System.Collections.Generic;
    (10)调用该tween
        HOTweenComponent tweenComponent = myGameObject.GetComponent<HOTweenComponent>();
            if (tweenComponent != null)
            {
                // Do something with the Tweeners
                List<Tweener> tweeners = tweenComponent.generatedTweeners;
               
                if(tweeners[0].id == "tweenerName")
                {
                    tweeners[0].Play();
                }
            }
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院








    五: 路径搜寻(Path Finding)-  风宇冲推荐SimplePath
    综述:路径搜寻主要用于怪物的AI行走,以及人物点击移动。这两个路径算法核心思想都是:先将地图划分成方格区域(像棋盘一样),然后根据方格内是否有障碍物对方格进行赋值,最后生成 单位位置 与 目标位置间的格子路径。想具体学习的童鞋可以百度 A star等算法。
    【SimplePath】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院


    运行效率  
    掌握时间   
    文档教程  
    综合评价  
    官方介绍说支持500+agent,即支持500个单位同时寻路,下方提供的对应插件中带有展示Demo。

    【A* Pathfinding Project】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    运行效率  
    掌握时间   
    文档教程  
    综合评价  
    使用标准的A star算法,下方提供的对应插件中带有展示Demo。



    六:美术及动画制作 -  风宇冲推荐RageSpline,Smooth Moves
    【Smooth Moves】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    实用性    
    简易度    
    掌握时间  
    文档教程  
    综合评价  
    介绍:神马?你们团队没有做动画的人?那么就用它吧!2D骨骼动画制作插件,不支持Flash。骨骼动画文件可以复用。比帧动画省空间占用。
    优点:动画文件复用,省空间
    缺点:
    使用简介:
    一:制作Atlase (1)Project栏下创建Smooth Moves Texture Atlase Data (2)选中atlase 文件,点击open atlase Editor (3)把素材图往里拖。
    二: 制作Animation  (1)Project栏下创建Smooth Moves Texture Atlase Data (2)选中animation文件,点击open animation Editor (3)点击Bone下面的 ‘+’图标,创建骨骼节点(腰,头,腿,足等等,支持中文)(4)点击Animation Clips下的‘+’,创建动画(站立,行走,攻击等)。(5)选中帧序列界面里的 黄色方块 (6)Type选择Image(Transform就是隐藏,所以通常设置为Image)(7)选择图 (8)选择任意同行的黑块,右键选择Duplicate First Key Frame (9)执行 6-7 (10)然后设置pivot,rotation等信息(11)搞定了!点击play看效果吧!
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院

    【RageSpline】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    实用性   
    简易度   
    综合评价 
    介绍:矢量绘图工具,矢量的好处大家应该都知道,就是不会因为放大而损失质量。 适用于矢量风格的2D游戏以及2D UI的制作。程序会了这个美术就要失业了!
    使用方法: (1)新建一个空的GameObject (2)贴上RageSpline脚本,然后基本形状就出来了 (3)调整形状,具体是 鼠标双击=创建节点 N=圆滑和锋利的边角模式切换 K=削薄边缘 L= 增厚边缘 delete=删除节点 (4)调整边缘颜色outline color 以及填充颜色 Fill Color,大功告成!
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院

    【Mega-Fiers】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    实用性   
    简易度   
    综合评价 
    介绍:模型变形工具,简单实用,可以用于3D字体的弯曲效果等等。
    使用方法:非常简单, (1)选中要变形的物体,(2)上方菜单Component->Modifiers->Modify Object (3)添加任何预制变形,例如弯曲则是 Component->Modifiers->Bend (4)之后在Inspector里调对应数值即可。

    七:画面增强 -  风宇冲推荐Bitmap2Material,Strumpy Shader Editor
    【Bitmap2Material】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    细节功能  
    运行效率  
    掌握时间   
    文档教程  
    综合评价  
    优点:方便,实用。
    缺点:尚未发现。价格过高【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    使用方法:将包里的Bitmap2Material.sbsar拖进unity工程,然后直接将你的原图拖到下方例图的'Input'上去,它会自动生成法线贴图灰度图等效果图,效果还是不错的。并且支持将随便的一张图制作成Tile图,可以无缝拼接的哦。之后就自己在Insprector里微调吧!
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院


    【UniSky】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院

    实用性   
    简易度   
    效果 
        
    兼容性
       
    综合评价 
    优点:云与日月层叠效果逼真,有云起云散
    缺点:缺少下雪等特效,有紫色斑点等BUG。
    介绍:24小时实时 天空盒+天气插件。天气主要是下雨和storm,不过效果一般,建议另外。画面效果不错,不过需要自己去配置, 例如大太阳的天气去下雨肯定不真实,下雨的时候至少要把天空调成阴暗的,有一种乌云密布的感觉。并且天气与地形与单位的互动,需要另外添加,比如溅射到地面的水花等等。月亮放大后在某些显卡下会有紫色斑点。
    使用建议:
    风:Unity的Windzone
    雨:Unity官方Demo《AngryBot》 里面的雨
    使用方法:链接

    【Strumpy Shader Editor】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    可视化   
    实用性   
    简易度   
    综合评价 ★★★★★
    优点:实用,免费
    介绍:渲染器Shader的可视化编辑器,可视化的界面和PlayMaker,uScript用起来差不多。顶点渲染,像素渲染和光照模型渲染三种模式都支持。使用前最好对 三种类型Shader的代码写法有所了解,再使用该工具能起到事半功倍的效果。
    使用方法:(1)插件载入到工程里 (2)菜单Shader Editor->Stumpet Shader Editor。 (3)点击New Graph (4)在图表界面Master右方,右键创建 Tex2D 以及 Sampler2D (4)连线如下 (5)点击Update Graph,之后能看见预览图了 (6)点击Export As,生成Shader文件
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院

    注意:(1)每次改动完需要点Update Graph更新预览。 (2)删除连线:鼠标移动至线上,点击右键
    (3)UV x或y的单变化使用UV_Pan (4)图表视口的移动为 alt + 鼠标左键
    StrumpyShader详细教程

    八:摄像机管理 - 风宇冲推荐 Security Camera
    【Security Camera】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    实用性   
    简易度   
    综合评价 
    优点:简单,实用
    介绍:摄像机管理插。Unity里管理多相机很麻烦,Camera Preview不实用,来回启用禁用也繁琐。Security Camera能快速查看各个相机的实际效果。
    使用方法:插件载入到工程里后,直接把SecurityCamera.cs脚本拖到各个相机上,然后在Game View里就可以直接分开看单个相机的效果了。
    注意:(1)相机不能重名 (2)只有一个主相机,标签tag为'MainCamera'


    【Ultimate FPS Camera】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    介绍:FPS摄像机的控制插件,没什么好说的。工程里导入插件后直接按里面的文档做就行了。

    九:资源包类(Models & Particles)
    综述:这个就不用多说了,好多有用的资源啊,太省事了!
    【Nature Pack】
    介绍:大自然的树,花,草等模型
    【Ruin city】
    介绍:一个被破坏的城市的模型

    【CartoonSnow】
    介绍:卡通雪效果


    十:其他类
    【uniSWF】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    优点:支持元件经典动画(Classic Tween),无需转换成序列帧
    缺点:不支持图元(Shape)形变,转换成序列帧
    介绍:在unity里使用flash的元件(主要是MovieClip)来制作UI什么的,对有Flash开发经验或者Flash资源的可能比较有用。

    【ORK】(Okashi RPG Kit)
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    介绍:看了看youtube上的教程视频,ORK没什么意思,它整套的UI包括商店,用的是Unity自带的UI,这整套东西你拿来改还不如自己做好,又快又准又能精确调整。就不评分了。这里仅供下载,没事可以看看,如果有兴趣做RPG的新手可以去下个RPG Maker XP看看它的框架是怎样的。做商业级RPG的还是根据需要自己搭框架吧。

    【Tower Defense ToolKit】
    【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 - 风宇冲 - 风宇冲Unity3D教程学院
    介绍:不评价了,理由前文有提到过, 仅提供下载。


    还有下面一些主流插件没有找到,欢迎补充。
    【Mixamo】无下载
    介绍: 模型动画插件,500美刀,伤不起啊。不过Unity4的动画系统已经改进很多。所以这个插件不用也罢。
    【Audio Toolkit】无下载
    介绍:音频管理插件,可以提高音效质量。32.5美刀
    【FX Maker】
    介绍:粒子系统库。100美刀
    【Easy Water】
    介绍:水面模型。7.5美刀
    【Easy Touch】
    介绍:触屏控制插件。20美刀
    【MakeYourLevel】
    介绍: 环境模型库。 22.5美刀

                                    第三部分 插件的学习方法

    插件的学习: 学插件有如大侠学武功。先练内功根基,再练上乘武功。内功根基是指 线性代数,计算机图形学,编程基础,Unity基本API等等。基础不要求同学们要有多精通,至少基本的原理和使用要懂。上乘武功是指各种插件。如果内功 根基不扎实而强修秘籍的话,也许会像天龙八部里的鸠摩智一样走火入魔。在游戏开发里,通常表现为卡在一个地方,模模糊糊的怎么都过不去,各种纠结。假如你 遇到了类似情况,建议回过头静下心来温习下相关的基础知识,等过后头脑缓过来了再理理思绪,分析分析条理,一般问题在这个时候就解决了。

    插件的辨别:游戏开发如大侠比武,比的是游戏,武功(插件)不同,实力当然也不同。 好的武功能把你的特性发挥的淋漓尽致,PK有如行云流水。差的武功会让你瞬间被秒杀,无缘Grossing榜。好的插件能很好的和你的项目本身配合,达到 提高开发效率的目的。不好的插件你研究它得花费大量时间又还得花时间,又还得花时间修改调试,很有可能反而会降低效率。所以分辨插件的优劣很重要。我总结 了以下几点,能快速分辨插件的好坏:
    好的插件(1)首先,Asset Store上排名高的一般都好用,什么榜都行,当然还是Top Grossing 最有分量,不好的东西谁愿意付钱呢?如果没有排名就看评价数量和内容吧(2)国内相关介绍讨论比较多的一般都好 (3)教程详细的,特别是有语音高清教程的。
    不好的插件 (1)搜索到的相关信息极少的 (2)无排名,评价少 (3)教程粗糙

    插件的选择: 上乘武功需要专精,令狐冲专精剑法,独孤九剑笑傲江湖,郭靖专精掌法,降龙十八掌威震武林。你不可能把天下所有武功集于一身。Unity开发也是,不可能 所有插件你都精通,只能是选取一些对你用处比较大的插件重点学习使用。所以插件的选择就比较重要了、一般来说比较实用的是单个功能块的插件,比如做UI选 NGUI, 插值控制用iTween, 2D游戏用2D Toolkit等等。而综合类插件就不建议实用了。例如做塔防类游戏的 Tower Defense ToolKit, 做RPG游戏的Okashi RPG Kit,这类插件是专门为做一类游戏而生,集成了很多很多功能,但是每个功能又做不到很专业,所以假如你要用,还得自己改,而这类插件一般定制的调整空间 比较小,目前来说还达不到专业的级别。所以如果你做很专业领域的游戏,比如赛车,有个start kit能节省很多时间,毕竟一辆车有几十上百个参数,通常没有必要自己做物理模型。其他一般的游戏比如塔防,闯关什么的就没必要找个类似start kit的东西了。

    插件的配合:上乘武功则需要配合, 例如张无忌的太极拳+九阳真经+梯云纵+乾坤大挪移。招式太极,内功九阳,轻功梯云纵,能量转移则乾坤。配置组合插件道理也一样,使用什么样的组合就要看游戏本身的定位如何了。假如使用了与游戏定位不符合的插件,效果通常只能事与愿违。例如,做个2D游戏,自然用不到 Bitmap2Material,2D游戏也不需要法线贴图灰度图什么的吧。又如做一款商业级别的移动平台游戏用了iGUI制作UI的话,在 Android和iOS各自的低端机上的表现到最后会让你头疼不已。武侠的世界里,武功会有冲突,例如九阳神功九阴真经不能调和,插件同样也是有冲突的,不尽早发现的话后期面对一堆Bug会让你欲哭无泪的。后文中陆续提到了一些兼容或冲突,有些插件在Asset Store上的介绍也会有相关信息,例如某插件会在介绍里写明与NGUI兼容,与PlayMaker兼容。更多的需要同学们事先了解或者实验出来。本段下方举了插件组合的例子供大家参考。

    2D 横屏动作游戏 :2D Toolkit + NGUI
    3D 第一人称射击 :NGUI + Simple Path + Bitmap2Material + PlayMaker + Security Camera + Stumpy Shader Editor
    独立开发2D游戏:(1)Photoshop/Illustrator等外部绘图软件 + Smooth Moves + NGUI
    (2)RageSpline + 2D Toolkit + NGUI
    简易非商业开发:iGUI + iTween
    塔防游戏: iTween/ Simple Path + NGUI  +其他
                
    展开全文
  • 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。 一、动态障碍物。   之前...
  •  今天研究了下Unity3D的寻路功能,忽然发现Unity3D自带的寻路功能只支持付费版,内心不禁感到一阵失落。后来在宣雨松的博客上看到一篇关于ITween的文章,我发现这简直就是我等使用Unity免费版的福音啊,因为这个...
  • Unity3D游戏开发之跑酷游戏项目讲解

    千次阅读 2015-06-29 18:00:20
     游戏采用2D界面,角色从左到右奔跑,在路段中随机生成障碍物和金币,玩家需要使用跳跃功能躲开障碍物,在游戏中玩家收集的金币数目越多,奔跑的距离越长,玩家的得分就越高。我们最终实现的界面效果如图所示,首先...
  • Unity3d 学习之路——简单巡逻兵

    千次阅读 2018-05-11 23:53:02
    Unity3d 学习之路——简单巡逻兵 游戏规则与游戏要求 智能巡逻兵 游戏规则 使用WSAD或方向键上下左右移动player,进入巡逻兵的追捕后逃脱可积累一分,若与巡逻兵碰撞则游戏结束,收集完地图上的所有水晶即可...
  • 【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载  (2012-12-09 07:27:51) 转载▼ 标签:  unity3d   unity   unity3d教程   unity3d插件   编程 ...
  • unity3D Collider 碰撞器

    千次阅读 2018-08-02 09:34:54
    unity3D Collider 碰撞器 碰撞器的种类: 1、盒碰撞器(Box Collider) 2、椭圆碰撞器(Sphere Collider) 3、胶囊碰撞器(Capsule Collider) 4、车轮碰撞器(Wheel Collider)专用于车辆 5、网格碰撞器(Mesh ...
  • 参考文章:Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh) http://blog.csdn.net/yuxikuo_1/article/details/44974739 unity3D——自带寻路Navmesh入门教程(二) ... Unity3D自动寻路系统Navig
  • 1.游戏逻辑大概流程图 这样一整理,游戏的逻辑就比较清晰了 首先是场景的加载 a....打上断点,调用脚本的顺序依次是TutorialInfo.cs ->...b.其中最重要的Loader.cs创建时会调用激活函数Awake()创建游戏管理类...
  • 而场景中经常会存在很多障碍物,这就AI要能够找出到达目标地点的最短路径,并且要能够绕开障碍物。这就需要游戏开发者编写出一个完善的寻路算法。然而在复杂的3D场景中,手写寻路算法是相当有挑战性
  • Unity3d学习制作的实验资料包括本次实验都在老师的课程网站上:传送门 视频地址:传送门 实验项目文件在Github上:Github传送门 实验参考博客,感谢指导!: Unity3d学习之路-简单巡逻兵 Unity-3D-智能巡逻兵 unity...
  • Unity3d 中的 A*寻路

    万次阅读 2014-05-20 18:46:53
    A算法复习实现NodePriorityQueueGridManagerAStarTestCode ClassScene setupTesting...在本章中,我们将在Unity3D环境中使用C#实现A*算法.尽管有很多其他算法,像Dijkstra算法,但A*算法以其简单性和有效性而广泛的应用
  • 原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具...
  • QQ 1285575001 Wechat M010527 ...4: 创建一个障碍物; 5: 导入人物模型; 6: 配置一个十字瞄准器, 设想机对准的中心就是瞄准的中心, 屏幕中心; 7: 配置一个第一人称的摄像机,做人的眼睛; 开枪射击 1...
  • 1、Unity3D项目学习笔记(1)- 2D Roguelike Tutorial游戏介绍:玩家控制一个2D帧动画人物在地图上行走,目标是到达出口,进入下一关。途中会有食物、敌人和障碍物。玩家每进行一个动作都会销耗食物,靠近敌人会攻击...
  • unity 3D 常见英文单词的中文意思

    千次阅读 2015-06-07 10:04:06
    Asset资源 Dust灰尘 Misc(杂项) sparkles(闪耀) snap对齐 aspect方向 Raycas投射 Revert Factory settings恢复默认布局。 toggle切换 wire frame线框 pivot(数据透视)使用物体本身的轴心 lightmap光照...
  • Unity3D插件详细评测及教学下载

    千次阅读 2013-12-13 11:29:49
    转载自风宇冲Unity3D教程学院 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具。为此我写了插件的经验及...
1 2 3 4 5 ... 20
收藏数 439
精华内容 175
关键字:

unity3d障碍物资源