• Unity3D做的DEMO

    2013-10-17 09:15:56
    Unity3D搞的一个DEMO,由于处于创业初期,所以很多网友要求我写一些U3D教程的事也被我耽搁了。不过我会在后面挤出空闲时间尽量写教程和大家分享。 另外,有投资对我们项目和团队感兴趣的,可以联系我QQ:...

     

    用Unity3D搞的一个DEMO,由于处于创业初期,所以很多网友要求我写一些U3D教程的事也被我耽搁了。不过我会在后面挤出空闲时间尽量写教程和大家分享。

    另外,有投资对我们项目和团队感兴趣的,可以联系我QQ:327112182

    我们目前人员齐全,人员都来自各大游戏公司,在旧公司都担任主管级别职位。

    展开全文
  • -Image.unitypackage (地板材质图片) -FX.unitypackage (下雨和雨滴特效) 使用Cube创建环境 使用FX中的特效给环境添加下雨的效果 2.摄像机的跟随 开发摄像机的跟随 使用Vertor3.Lerp插值计算 摄像机的视角,...

    1.环境创建

    • 资源导入
      -Image.unitypackage (地板材质图片)
      -FX.unitypackage (下雨和雨滴特效)

    • 使用Cube创建环境

    • 使用FX中的特效给环境添加下雨的效果
      这里写图片描述

      2.摄像机的跟随

    • 开发摄像机的跟随

    • 使用Vertor3.Lerp插值计算
    • 摄像机的视角,让摄像机观察这角色
    • Quanternuin.LookRotation得到一个四元数,表示跟参数一样方向的旋转
    • Quanternion.Slerp按照圆弧插值,这个插值计算更适用于,角度变换
    using UnityEngine;
    using System.Collections;
    
    public class FollowPlayer : MonoBehaviour {
        private Transform player;
        public float speed = 2;
    
        void Start() {
            player = GameObject.Find(Tags.player).transform;   //查找主角的Transform组件
        }
    
        void Update() {
            Vector3 targetPos = player.position + new Vector3(0f,2f,-4f);  //设定摄像机和主角之间的距离
            transform.position =Vector3.Lerp(transform.position,targetPos,speed*Time.deltaTime);
            Quaternion targetRotation = Quaternion.LookRotation(player.position-transform.position);
            transform.rotation = Quaternion.Slerp(transform.rotation,targetRotation,speed*Time.deltaTime);
        }
    }
    

    3使用CharacterController控制行走

    • 使用Input.GetAxis(“Horizontal”) 和 “Vertical”得到垂直和水平方向的值
    • 使用CharacterController.SimpleMove(Vector3)参数表示运动的方向和速度 单位可以认为是 m/s
    using UnityEngine;
    using System.Collections;
    
    public class PlayerMove : MonoBehaviour {
        private CharacterController cc;
        public float speed = 40;
        private Animator animator;
        void Awake() {
           cc = transform.GetComponent<CharacterController>();
           animator = this.GetComponent<Animator>();
        }
    
        void Update () {
            float h = Input.GetAxis("Horizontal");  //按A的时候返回的是1 按D的时候返回的是-1
            float v = Input.GetAxis("Vertical");    //w返回1,s返回-1
    
            if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1f)
            {    //加上判断主要是防止当没有按下时朝向LookAt为空
                    Vector3 targetDir = new Vector3(h, 0, v);  //方向
                    transform.LookAt(targetDir + transform.position); //朝着一个点(主角的坐标点加上一个方向)以主角的坐标为基准朝向一个点
                    cc.SimpleMove(transform.forward * speed * Time.deltaTime);
                }
          }
    }

    4-添加虚拟杆控制行走

    使用NGUI做虚拟杆
    这里写图片描述
    - 触摸位置的检测UICamera.lastTouchPosition
    - 根据触摸位置的移动虚拟按钮
    - 得到虚拟杆横向和垂直的值,控制角色的移动

    using UnityEngine;
    using System.Collections;
    
    public class JoyStick : MonoBehaviour {
    
        private bool isPress = false;
        private Transform button;    //虚拟摇杆的小圆圈
        public static float h = 0;
        public static float v = 0;
    
        void Awake() {
            button = transform.Find(Tags.button);   //标签多的话可以单独设置一个Tags脚本存放,以免自己拼写错string
        }
    
        void OnPress(bool isPress) {
            this.isPress = isPress;
            if (isPress == false) {
                button.localPosition = Vector2.zero;   //抬起时让摇杆的小圆圈位置归零
                h = 0; v = 0;
            }
        }
    
        void Update () {
            if (isPress) {
                Vector2 touchPos = UICamera.lastTouchPosition;
                touchPos -= new Vector2(100,100);
                float distance = Vector2.Distance(Vector2.zero, touchPos);
                if (distance > 75){
                    touchPos = touchPos.normalized * 75;
                    button.localPosition = touchPos;
                }else {
                    button.localPosition = touchPos;
                }
                 h = touchPos.x / 75;
                 v = touchPos.y / 75;
            }
        }
    }
    using UnityEngine;
    using System.Collections;
    
    public class PlayerMove : MonoBehaviour {
        private CharacterController cc;
        public float speed = 40;
        private Animator animator;
        void Awake() {
           cc = transform.GetComponent<CharacterController>();
           animator = this.GetComponent<Animator>();
        }
    
        void Update () {
            float h = Input.GetAxis("Horizontal");  //按A的时候返回的是1 按D的时候返回的是-1
            float v = Input.GetAxis("Vertical");    //w返回1,s返回-1
            if (JoyStick.h != 0 || JoyStick.v != 0){
                h = JoyStick.h;
                v = JoyStick.v;
            }
            if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1f)
            {    //加上判断主要是防止当没有按下时朝向LookAt为空   
                    Vector3 targetDir = new Vector3(h, 0, v);  //方向
                    transform.LookAt(targetDir + transform.position); //朝着一个点(主角的坐标点加上一个方向)以主角的坐标为基准朝向一个点
                    cc.SimpleMove(transform.forward * speed * Time.deltaTime);
            }
        }
    }

    5-主角的状态机设计

    • 使用Unity里面的Animation State Machine动画状态机
    • 动画的属性设置,分为循环动画和一次性动画
    • 主角的动画分类
    • 休闲
    • 行走
    • 攻击 Attack1 Attack2 RangeAttack
    • 被攻击

    这里写图片描述
    (对于walk和stand动画,需要多勾选LoopTime和LoopPose,剩下的只勾选三个BakeIntoPose【表示任何用上bake into pose的对应的属性(例如:root transform rotation),将会直接由角色或物件的自身transform的rotation来决定角色方向(如由script直接驱动角色transform rotation角度令角色转身,适合的动画是原地踏步),反之就是用animation 本身的信息来驱动角色transform rotation(适合动画是转身动画本身就带动角色转动,如转45度转身动画,90度转身动画等)于动画基于模型】)

    using UnityEngine;
    using System.Collections;
    public class PlayerMove : MonoBehaviour {
        private CharacterController cc;
        public float speed = 40;
        private Animator animator;
        void Awake() {
           cc = transform.GetComponent<CharacterController>();
           animator = this.GetComponent<Animator>();
        }
    
        void Update () {
            float h = Input.GetAxis("Horizontal");  //按A的时候返回的是1 按D的时候返回的是-1
            float v = Input.GetAxis("Vertical");    //w返回1,s返回-1
            if (JoyStick.h != 0 || JoyStick.v != 0){
                h = JoyStick.h;
                v = JoyStick.v;
            }
            if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1f)
            {    //加上判断主要是防止当没有按下时朝向LookAt为空
                animator.SetBool("Walk", true);  //行走动画
                if (animator.GetCurrentAnimatorStateInfo(0).IsName("PlayerRun"))  //加一层判断,确保动画与实际行走相吻合
                {
                    Vector3 targetDir = new Vector3(h, 0, v);  //方向
                    transform.LookAt(targetDir + transform.position); //朝着一个点(主角的坐标点加上一个方向)以主角的坐标为基准朝向一个点
                    cc.SimpleMove(transform.forward * speed * Time.deltaTime);
                }
            }
            else {
                animator.SetBool("Walk",false);  //Idel动画
            } 
        }
    }

    6-攻击的动画控制

    • 设置虚拟的攻击按钮
    • 通过代码添加按钮的点击事件监听
      • EventDelegate normalClickEvent = new EventDelegate(this, “OnNormalAttackButtonClick”);
      • GameObject.Find(“NormalAttack”).GetComponent().onClick.Add(normalClickEvent);
    • 给状态机设置状态条件
      • 修改Trigger animator.SetTrigger(“AttackB”);
      • 修改Bool animator.SetBool(“Walk”, false);
        这里写图片描述
        在Player@PlayerAttackA动画文件添加两个事件,这两个事件必须要在脚本中实现监听,否则会运行错误public void AttackBEvent2()/public void AttackBEvent1()。 实现连招
    using UnityEngine;
    using System.Collections;
    
    public class PlayerAnimationAttack : MonoBehaviour {
    
        private bool isCanAttackB;
        private Animator animator;
        void Start () {
            animator=this.GetComponent<Animator>();
            EventDelegate NormalAttackEvent = new EventDelegate(this,"OnNormalAttackClick");   //这个脚本上 的--方法
            GameObject.Find("Normal").GetComponent<UIButton>().onClick.Add(NormalAttackEvent);     //也可以在面板上赋值
            EventDelegate RangeAttackEvent = new EventDelegate(this,"OnRangeAttackClick");
            GameObject.Find("Range").GetComponent<UIButton>().onClick.Add(RangeAttackEvent);
            EventDelegate RedAttackEvent = new EventDelegate(this, "OnRedAttackClikc");
            GameObject go = GameObject.Find("RedAttack");
            go.GetComponent<UIButton>().onClick.Add(RedAttackEvent);
            go.SetActive(false);   //go.active=false api已经过时
        }
    
        // Update is called once per frame
        void Update () {
    
        }
        public void AttackBEvent1() {
            isCanAttackB = true;
        }
        public void AttackBEvent2() {
            isCanAttackB = false;
        }
        public void OnNormalAttackClick() {
            if (animator.GetCurrentAnimatorStateInfo(0).IsName("PlayerAttackA") && isCanAttackB)
            {  //按下两次normal 且在attackA播放区间
                animator.SetTrigger("AttackB");
            }
            else
            {
                animator.SetTrigger("AttackA");
            }
        }
        public void OnRangeAttackClick() {
            animator.SetTrigger("AttackRange");
        }
        public void OnRedAttackClikc() {
            animator.SetTrigger("AttackA");
        }
    }
    展开全文
  • unity3d射击类demo

    2017-04-19 18:09:44
    1 创建地板(floor)和四面墙壁,new Plane实现  自带的网格碰撞器Mesh Collider,勾选Convex,否则碰撞其他物体无效  2 创建几个cube物体,添加Box Collider和RigidBody,为cube创建脚本,控制物体移动,由于...

       1 创建地板(floor)和四面墙壁,new Plane实现

                  自带的网格碰撞器Mesh Collider,勾选Convex,否则碰撞其他物体无效

       2 创建几个cube物体,添加Box Collider和RigidBody,为cube创建脚本,控制物体移动,由于移动过程中物体会产生反转,造成前后方向异常,可以采用在updata方法里重置物体的旋转角度的方法:transform.localRotation = Quaternion.Euler(0, 0, 0);(四元数重置物体的旋转角度)

     控制物体移动:

            方法一:改变物体的位移:  transform.Translate(Vector3.left * speed);

            方法二:为物体添加一个力:rigidbody.AddForce(Vector3.left * speed);

        控制物体跳跃:

            为了防止物体跳跃过高,需要提前处理跳跃逻辑,只在地面上可以跳跃,需要使用变量控制

            floor物体添加一个Tag标签,命名为Floor,

            物体的碰撞事件(碰撞器):onCollisionEnter() OnCollisionExit() OnCollisionStay(),由于物体受重力影响,会一只在floor上面,物体的碰撞只在OnCollisionStay()方法处理,变量的值也在这个方法里控制  

    1. void OnCollisionStay(Collision other)
    2. {
    3. Debug.Log("OnCollisionStay other :"+ other.gameObject.tag);
    4. if(other.gameObject.tag =="Floor")
    5. {
    6. isGround =true;
    7. }
    8. }
    9. Update()方法:
    10. if(Input.GetKey(KeyCode.Space))
    11. {
    12. if(isGround)
    13. {
    14. transform.Translate(Vector3.up );
    15. isGround =false;
    16. }
    17. }
            3 物体的碰撞事件(触发器):OnTriggerEnter() OnTriggerStay() OnTriggerExit()此事件的触发条件是is Trigger设置为true才可以。

      控制射线模拟射击行为

        1 在需要发射射线的位置添加组件:Line Renderer;Light;Particle system

        2 Line Renderer 配置材质(射线的颜色),射线起始宽度,结束宽度

        3 Light里面配置点光源(Point),设置光源颜色(决定了射击时枪口光颜色)

        4 射线发射物体创建子物体FaceLight(可选),决定了射击时正前方的颜色

        5 注意:前4个组件默认不选中,以控制射击动作时射线和光线闪烁

        6 编写代码,控制射线

            1 awake函数里获取每个组件对象

            2 updata函数里判断鼠标左键点击动作,点击鼠标左键即可触发射击操作

    1. if(Input.GetButtonDown("Fire1")&& timer >= betweenTwoShot &&Time.timeScale !=0)
    2. {
    3. Shooting();
    4. }
            3 射击函数:这里才关联刚才未选中的组件,设计射线的位置朝向等
    1. gunLight.enabled =true;
    2. faceLight.enabled =true;
    3. gunParticle.Stop();
    4. gunParticle.Play();
    5. gunLine.enabled =true;
    6. gunLine.SetPosition(0, transform.position);
    7. Debug.Log("射线的位置:"+ transform.position);
    8. shootRay.origin = transform.position;
    9. shootRay.direction = transform.forward;
            4 判断射线射击到其他物体的操作:使用Physics.Raycast(射线, RaycastHit射线碰撞器,射线长度,layer层);
            注意:这里的layer层可以在项目环境中设置,U3D提供了32个layer层,系统占用8个,其余的我们可以自定义实现

             5 获取layer层,并使用步骤4的方法判断射线是否处于该层
    1. shootableMask =LayerMask.GetMask("shooter");
    2. if(Physics.Raycast(shootRay,out shootHit, gunRange, shootableMask))//光线投射(射线起点,射线方向,射线长度,碰撞器)
    3. {
    4. //进入这个方法只是表示射线射击到了这个layer里,并不表示射击到了目标物体
    5. Debug.Log("射线已投射......");
    6. gunLine.SetPosition(1, shootHit.point);
    7. }
    8. // If the raycast didn't hit anything on the shootable layer...
    9. else
    10. {
    11. // ... set the second position of the line renderer to the fullest extent of the gun's range.
    12. gunLine.SetPosition(1, shootRay.origin + shootRay.direction * gunRange);
    13. Debug.Log("else......");
    14. }

      6 设置脚本模拟敌人受到伤害

        1 为敌人物体创并挂上脚本CubeHealth,射线发出后,由于敌人属于环境layer层的子类,可以获取到射线

        2 使用射线碰撞器方法获取射线碰撞组件是否已经挂CubeHealth脚本的组件,获取到后做下一步处理

    1. CubeHealth cubeHealth = shootHit.collider.GetComponent<CubeHealth>();
    2. if(cubeHealth !=null)
    3. {
    4. Debug.Log("射线已投射--------------");
    5. }
        3 敌人受到伤害后生命值减少,生命值小于0时,销毁
    1. publicvoidTakeDamage(int hit,Vector3 point)
    2. {
    3. defaultHealth -= hit;
    4. Debug.Log("cube health :"+ defaultHealth);
    5. if(defaultHealth <=0)
    6. {
    7. Destroy(gameObject);
    8. }
    9. }
        7 设置摄像机跟随主角移动
            1 为主角创建tag,命名为cube
            2 为Camera创建脚本,找到主角的tag,插值器跟随tag移动
    1. publicclassCameraFollow:MonoBehaviour
    2. {
    3. publicTransform target;//设置跟随的对象,这里写主角的tag
    4. Vector3 offset;
    5. publicfloat smoothTime =5f;
    6. // Use this for initialization
    7. voidStart()
    8. {
    9. offset = transform.position - target.position;
    10. }
    11. // Update is called once per frame
    12. voidUpdate()
    13. {
    14. Vector3 v3 = target.position + offset;
    15. //插值器,表示在一定时间内(第三个参数),从坐标一(第一个参数)移动到坐标二(第二个参数)
    16. transform.position =Vector3.Lerp(transform.position, v3, smoothTime *Time.deltaTime);
    17. }
    18. }
        8 设计游戏的Splash页面
             
            1 添加Canvas组件,Canvas组件的子控件设置一个button和一个简单说明的text
                Canvas组件说明:http://blog.csdn.net/wangmeiqiang/article/details/52531315
            2 为Canvas增加image组件。
                注意:image组件的Source Image资源必须是Sprite(2D and UI)格式,可以点击图片修改格式
            3 为Canvas绑定的C#代码增加点击事件
                1 代码里增加onButtonClick()方法
    1. publicvoid onButtonClick()
    2. {
    3. canvas.gameObject.SetActive(false);//设置Canvas隐藏
    4. human.gameObject.SetActive(true);//设置主角显示
    5. environment.gameObject.SetActive(true);//设置环境显示
    6. }
                2 为Button物体增加上述点击事件
                  
         9 模拟随机敌人出现,增加游戏趣味
            1 将步骤2里创建的cube物体创建为预制体,再增加一个圆形预制体
            2 创建敌人管理类,在environment里创建空物体cube,绑定管理类cubeManager
            3 管理类的实现逻辑:每隔三秒初始化两个物体
    1. publicclass cubeManager :MonoBehaviour
    2. {
    3. publicGameObject cubeObject;
    4. publicGameObject sphereObject;
    5. voidStart()
    6. {
    7. InvokeRepeating("CreateCube",3f,3f);
    8. }
    9. voidCreateCube()
    10. {
    11. Vector3 v3 = transform.TransformDirection(Random.Range(0f,6f),Random.Range(0f,4f),Random.Range(-26f,-6f));
    12. Instantiate(cubeObject, v3, transform.rotation);
    13. Instantiate(sphereObject, v3, transform.rotation);
    14. }
    15. }
                4 将预制体绑定到空物体cube上

                 5 运行游戏,发现很多物体创建出来后,由于受物理因素的影响,会产生弹飞效果,飞出environment环境,但是没有销毁,造成游戏卡顿无响应
                解决方法:在地板底部增加一个大于地板区域的,物体飞出范围碰撞到这个区域后,执行销毁函数
    1. publicclassDestoryObject:MonoBehaviour{
    2. //设置cube或者floor 的is Trigger为true时,才会执行此函数
    3. voidOnTriggerEnter(Collider other)
    4. {
    5. Debug.Log("OnTriggerEnter other :"+ other.gameObject.tag);
    6. if(other.gameObject.tag =="cube")
    7. {
    8. Destroy(other.gameObject);
    9. }
    10. if(other.gameObject.tag =="sphere")
    11. {
    12. Destroy(other.gameObject);
    13. }
    14. }
    15. voidOnTriggerStay(Collider collider)
    16. {
    17. }
    18. voidOnTriggerExit(Collider collider)
    19. {
    20. }
    21. }


            
                
     
        

     

     

    展开全文
  • Unity DNF 3D动作游戏源码 DNF 3D动作游戏源码,功能完整的demo,个人感觉非常好,从其它地方花高价买来的,学习价值很高,大家一起学习!
  • 众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。在现有的版本中,其强大的游戏制作功能已经达到和其他顶级游戏引擎媲美的地步。但是 其制作并不如想象中的困难。...

    众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。在现有的版本中,其强大的游戏制作功能已经达到和其他顶级游戏引擎媲美的地步。但是 其制作并不如想象中的困难。本文就带您走进unity的世界,并且看看第一个游戏demo是什么样的。

    AD:

    众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。在现有的版本中,其强大的游戏制作功能已 经达到让人瞠目结舌的地步。尤其是它在3.0版本里面制作的那款第一人称战争游戏,画质效果丝毫不逊色于当下十分流行的《穿越火线》、《战地之王》等主流 第一人称射击游戏。下图为Demo中的显示效果:

    1.JPG

    看到如此绚丽的效果,让我马上走进精彩的Unity3D世界吧!首先要下载Unity3D,在官网上就可以完成。
    Unity3D的官方网站:http://unity3d.com
    Unity3D的下载地址:http://unity3d.com/unity/download/
    下载好之后,必须要到官方网站上注册一个邮箱,才能获得30天的试用时间。试用后如果您对这款软件满意,还可以在购买后继续使用。当然,如果您购买了Pro版本的Unity3D,将会获得更多的功能。
    第一章Unity3D的基本界面介绍

    Unity3D的基本界面非常简单,几个窗口就可以实现几乎全部的编辑功能。主界面如图1.1所示:
    2.JPG

    场景面板
    :该面板为Unity3D的编辑面板;您可以将您所有的模型、灯光、以及其他材质对象拖放到当前场景中。构建游戏中所能呈现的景象。
    动画面板:与场景面板不同,该面板是用来渲染场景面板中的景象的。该面板不能用作编辑,但却可以呈现完整的动画效果。显示的内容取决于场景摄像机的设置。
    层次清单栏:该面板主要功能是显示放在场景面板中的所有的物体对象。
    项目文件栏:该面板主要功能是显示该项目文件中的所有资源列表。除了模型、材质、字体等,还包括该项目的各个场景文件。
    对象属性栏:该面板栏会呈现出任何对象的固有属性,包括三维坐标、旋转量、缩放大小、脚本的变量和对象等等。
    场景调整工具:可以改变您在编辑过程中的场景视角、物体世界坐标和本地坐标的更换、物体的法线中心的位置,以及物体在场景中的坐标位置,缩放大小等等。

    菜单栏:接下来我重点介绍一下菜单栏。

    菜单栏中包含有八个菜单选项:分别是File【文件】、Edit【编辑】、Assets【资源】、GameObject【游戏对象】、Component【组件】、Terrain【地形】、Window【窗口】、Help【帮助】。

    每个菜单选项又有自己的子菜单,总结如下:

    1、File【文件】

    3.JPG

    名称
    说明
    New Scene 创建新的场景。就像是游戏中的一个一个的场景一样,Unity3D为用户提供了方便的场景管理,用户可以随心所欲的创建出自己想要的场景。然后再把每个场景链接起来组成一个完成的游戏。

    Open Scene 打开一个已经创建的场景
    Save Scene 保存当前场景
    Save Scene as 当前场景另存为
    New Project 新建一个新的项目工程。用户想要制作出自己的游戏,第一步就是创建一个属于这个游戏的工程,这个工程是所有元素的基础。有了工程之后,用户就可以在这个工程里面添加自己的场景。
    Open Project 打开一个已经创建的工程
    Save Project 保存当前项目
    Build Setting 项目的编译设置。在编译设置选项里面,用户可以选择游戏所在的平台及对工程中的各个场景之间的管理。可以添加当前的场景加入到工程的编译队列当中。其中的Player Settings选项中可以设置程序的图标,分辨率,启动画面等。
    Build & Run 编译并运行项目
    Exit 退出Unity3D

    2、Edit【编辑】

    4.JPG

    名称
    说明
    Undo 撤销上一步操作
    Redo 重复上一步动作
    Cut 剪切
    Copy 复制
    Paste 粘贴
    Duplicate 复制并粘贴
    Delete 删除
    Frame Selected 选择一个物体后,使用此功能可以把视角调到观察这个选中的物体上
    Find 在资源区可以按资源的名称来查找
    Select All 可以选中所有资源
    Preferences 选项设置。对Unity3D的一些基本设置,如:选用外部的脚本编辑,皮肤,各种颜色的设置。以及一些用户基本的快捷键的设置。
    Play 编译并在Unity3D中运行程序
    Pause 停止程序
    Step 单步执行程序
    Load Selection 载入所选
    Save Selection 保存所选
    Project Settings

    项目设置。其中包括输入设置,标签设置(对场景中的元素设置不同类型的标签,方便场景的管理),音频设置,运行的时间的设置,用户设置,物理设置(包括重 力,弹力,摩擦力等),品质设置(这个比较重要,用户在这个选项里面可以设置工程默认的渲染品质),网络管理,编辑器管理等

    Render Settings 渲染设置。如果觉得整体画面的色彩质量不尽如人意,可在此处进行调节
    Graphics Emulation 图形仿真。主要是配合一些图形加速器的处理
    Network Emulation 网络仿真。可以选择相应的网络类型进行仿真
    Project Settings 项目设置。其中包括输入设置,标签设置,音频设置,运行的时间的设置,用户设置,物理设置,品质设置,网络管理,编辑器管理等。
    Snap Settings 临时环境,或理解为快照设置。

    3、Assets【资源】

    5.JPG

    名称
    说明
    Reimport 重新导入资源
    Create 创建功能。可以用来创建各种脚本,动画,材质,字体,贴图,物理材质,GUI皮肤等
    Show In Explorer 打开资源所在的目录位置
    Open 打开选中文件
    Delete 删除选中的资源文件
    Import New Asset 导入新的资源
    Refresh 刷新,用于导入资源包之后
    Import Package 导入资源包。当创建项目工程的时候,有些资源包没有导入进来,在开发过程中有需要使用,这时可以用到导入资源包的功能
    Export Package 到处资源包
    Select Dependencies 选择依赖项
    Reimport 全部重新导入
    Sync MonoDevelop Project 同步开发项目

    4、GameObject【游戏对象】

    6.JPG

    名称
    说明
    Create Empty 创建一个空的游戏对象。可以对这个空的对象添加各种组件,即各种属性。在Component里面会讲到
    Create Other 创建其他类型的游戏对象。这里面包括了很多内容,基本上囊括了Unity3D所支持的所有对象。其中有粒子系统,摄像机,界面文字,界面贴图,3D的文字效果,点光源,聚光灯,平行光,长方体,球,包囊,圆柱体,平面,表面,音频混音区域,树,玩偶,风域等
    Center On Children 这个功能是作用在父节点上的,即把父节点的位置移动到子节点的中心位置
    Make Parent 选中多个物体后,点击这个功能可以把选中的物体组成父子关系,其中在层级视图中最上面的那个为父节点,其他为这个节点的子节点
    Apply Change To Prefab 应用变更为预置
    Move To View 这个功能经常用到,把选中的物体移动到当前编辑视角的中心位置,这样就可以快速定位
    Align With View 把选中的物体移动到当前编辑视角的中心位置,深度为0,即移动到和视角同一个平面上
    Align View To Selected 把编辑视角移动到选中物体的中心位置

    5、Component【组件】

    7.JPG

    名称

    说明
    Mesh 添加网格属性
    Particles 粒子系统。能够造出很棒的流体效果
    Physics 物理系统。可以使物体带有对应的物理属性
    Audio 音频。可以创建声音源和声音的听者
    Rendering 渲染
    Miscellaneous 杂项
    Scripts 脚本。Unity内置的一些功能很强大的脚本
    Camera-Control 摄像机控制

    6、Terrain【地形】

    8.JPG

    名称
    说明

    Creat Terrain 创建地形
    Import Heightmap-Raw 导入高度图
    Export Heightmap-Raw 到处高度图
    Set Resolution 设置分辨率
    Create Lightmap 创建光影图
    Mass Place Trees 批量种植树
    Flatten Heightmap 展平高度图
    Refresh Tree And Detail Prototypes 刷新树及预置细节

    7、Window【窗口】

    9.JPG

    名称
    说明
    Next Window 下个窗口
    Previous Window 前一个窗口
    Layouts 布局
    Scene 场景窗口
    Game 游戏窗口
    Inspector 检视窗口,主要指各个对象的属性,也可称为属性面板
    Hierarchy 层次窗口
    Project 工程窗口
    Animation 动画窗口。用于创建时间动画的面板

    Profiler 探查窗口
    Asset Server 源服务器
    Console 控制台

    第二章 Unity3D的简单预览

    每个Unity3D版本都会自带一个Demo源文件。在3.0的正式版中,自带的Demo就是网上展示的那款强大的射击游戏。在一般情况下,您只要第一次 打开Unity3D v3.0就会看见自带的那个Demo项目文 件了。但如果Unity3D并没有打开这个项目文件,你也可以在Unity3D里面的“File”菜单下点击“Open Project”选项,在“C:\Documents and Settings\All Users\Documents\Unity Projects”这个路径下找到项目文件夹“Bootcamp Demo”,选择并打开它。打开项目之后,在舞台场景面板中依然什么都没有显示的话,请在Project【项目文件栏】双击场景文件 1.JPG 。稍等片刻之后,该舞台场景的所有对象就可以导入到舞台场景之中。导入成功之后效果如图2.1所示:
    2.JPG

    点击一下中间的播放按钮 3.JPG 做一下测试(如果您的机器配置不是很高,可能等待的时间会稍长)。稍等片刻,您就可以在Game【动画面板】中看到一个正在运行的射击游戏了。
    在这个游戏场景中,您会看到比其他主流游戏还要细腻逼真的画面效果,例如各个物体的实时阴影。如图2.2所示:
    4.JPG
    当然如果您的机器配置较高,您还可以点击“Esc”键来将游戏画质进一步调高。调节界面如图2.3所示:
    5.JPG
    下面我们来看下调整画面效果前后的游戏画面对比,如图2.4.1和图2.4.2所示:
    6.JPG
    7.JPG
    我们很明显的就可以感觉到河水的效果以及场景阴影的效果都真实了许多。

    【责任编辑:Pockey TEL:(010)68476606】


    展开全文
  • 首先,在了解了最基础的Unity的概念、操作之后,我们来模拟一个最简单的场景,运用学过的简单的知识。场景是这样子的: 有一扇门,一个学生,学生来到门前,门会自动打开,然后学生进去,门自动关闭。为了完成这个...

    首先,在了解了最基础的Unity的概念、操作之后,我们来模拟一个最简单的场景,运用学过的简单的知识。场景是这样子的:
    有一扇门,一个学生,学生来到门前,门会自动打开,然后学生进去,门自动关闭。

    为了完成这个demo,首先我们能从上面的描述中得到两个主体,Door和Student。然后,注意一下我们需要完成的是需求是学生来到门前,这就意味着我们需要有一个触发器而不能用Door自带的碰撞体。所以,还有一个主体参与Demo,那就是一个触发器,以便于监听触发事件。
    下面来分别说明一下三个主体。

    1、学生(Student)

    这是最简单的主体,我们可以创建一个GameObject,给其添加一个Rigidbody,然后创建一个Script,用刚体组件来控制Student的运动,代码如下:

        private Transform m_Transform;
        private Rigidbody m_Rigidbody;
    
        void Start(){
            m_Transform=gameObject.GetComponent<Transform>();
            m_Rigidbody=gameOnjcet.GetComponent<Rigidbody>();
        }
        //键盘的W、A、S、D分别控制Student的向前、向左、向后、向右移动
        void Update(){
            if(Input.GetKey(KeyCode.W)){
                m_Rigidbody.MovePosition(m_tran.pos+Vec3.for*0.2f);
            }
            if(Input.GetKey(KeyCode.A)){
                m_Rigidbody.MovePosition(m_tran.pos+Vec3.left*0.2f);
            }
            if(Input.GetKey(KeyCode.S)){
                m_Rigidbody.MovePosition(m_tran.pos+Vec3.back*0.2f);
            }
            if(Input.GetKey(KeyCode.D)){
                m_Rigidbody.MovePosition(m_tran.pos+Vec3.right*0.2f);
            }
        }

    2、门(Door)

    门这个物体需要进行的操作就是使用边轴旋转,但是一个物体是不可以移动他的中心点的,所以我们会经常使用在物体外面嵌套一个父物体的方式来实现更改轴线或者中心。注意,我们创建一个空物体之后,需要先将其中心设置在合适的位置,然后再将需要操作的物体拖拽进去。这样在操作父物体实现效果。然后,门的话有两个动作,一个是开,一个是关,代码如下:

    private Transform m_Transform;
    void Start(){
        m_Transform=gameObject.GetComponent<Transform>();
    }
    void Update(){}
    
    //为了使其能在其他Script中调用,需要使用public修饰
    //开门
    public void open(){
        m_Transform.Rotate(Vector3.up,90);//绕y轴旋转90度
    }
    //关门
    public void close(){
        m_Transform.Rotate(Vector3.up,90);//绕y轴反方向旋转90度
    }

    3、触发器(Trigger)

    门的触发器需要根据门的形状和需求进行设计,不再赘述。触发器需要进行的操作有两个,一个是检测Student的触发,一个是使Door进行开关动作。具体操作:创建一个空物体,添加一个Rigidbody和一个Collider,并且勾选“is Trigger”,脚本代码如下:

    private DoorScript door;
    void Start(){
        //找到门,同时找到其脚本组件 Door,这样就可以通过door调用其脚本的方法
        door=GameObject.Find("Door").getComponent<DoorScript>();
    }
    
    //进入触发区域
    void OnTriggerEnter(Collider coll){
        door.open();             //调用开门方法
    }
    //离开触发区域
    void OnTriggerExit(Collider coll){
        door.close();            //调用关门方法
    }

    说实话,这是一个简单到不能再简单额示例,之所写这么繁琐,一来是培养我写博客的好习惯,二来是利用写博客的时间在脑中重新梳理一遍解决问题的步骤,因为如果开发大型项目,分析问题的清晰思路是必不可少的。

    展开全文
  • unity3D格斗类游戏《一战到底》完整源码 运行环境: Unity5.3.1 一战到底为3D格斗游戏游戏所用插件:PlayMaker、NGUI、EasyTouch、FXMarker、FT Slasher Volume等。游戏为PVC单机版,所用素材来自Asset Store和...
  • 本课程是 Unity 3D 系列教程,目标是带领读者搭建一个商业游戏的网络架构设计,该架构设计是游戏的核心技术,将采用 Unity 2017.2 最新版本作为开发工具。内容分为 UI 架构、技能架构、服务器和网络同步四大部分,共...
  • Unity3D实现简易的AR Demo AR(Augmented Reality),即增强现实技术,是一种实时地计算摄影机影像的位置及角度并加上处理相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动,实现真实...
  • Unity3d Fbx动作模型的使用
  • 开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈、掌握后端知识以及面对服务器带来的高额成本。但是Bmob最近在内测一款游戏sdk,让普通开发者开发一款...
  • Unity3D 赛车游戏完整源码 GI Racing 2http://www.idoubi.net/unity3d/complete-project/3570.htmlUnity3D 街机几何跳跃 完整游戏源码 Geometry Jumphttp://...完整源码 Cand...
  • NULL 博文链接:https://leestorm.iteye.com/blog/1140972
  • unity3d 一个简单的足球demounity3d 一个简单的足球demounity3d 一个简单的足球demo
  • 花了20多天的时间来完成这个demo,主要是为了实现一些自己设想的功能,并未注重关卡和玩法的设计,整体上还不够完善或者说不够完整。  demo中的美术资源均来自asset store和各种资源网站。使用的插件有NGUI,post ...
  • 现在进入正题,十分钟带你打造unity3D第一人称射击游戏! 看完本篇博客,你将学会第一人称控制,粒子的添加,碰撞的检测,鼠标的监听,画2d图像,预制物体克隆,添加力,添加声音等等!(本篇博客假设你已经对unity...
  • Unity3D美少女 Action-RPG Demo 一款非常不错的Action-RPG框架分享给大家,热爱做游戏的同学可以看一看,写的还是比较不错的,仅供学习交流! 功能完整的ARPG游戏模板 Core Features!! Combat System Skill Tree ...
  • 我发现没有动画想做什么都不行噢~~~,这个动画还是一个大侠给我的,网上找了很多bip动作文件,但是转成FBX格式不行,好像是版本不一样的缘故。后来为了做进度条我之前学了一下EZGUI,但是没有得到想要的效果,高手...
  • Unity3D 模型换肤技术

    2015-12-10 15:42:39
    最近在看Unity3D的人物模型和动画。所以今天先说下人物的换装吧。相信大家都玩过网游吧,没有玩过的也相信见过,就是网游或者单机游戏里的人物会有更换服装,更换武器的功能。如果外形(mesh)是一样的,那么把贴图换...
  • 这次想要做的一个小游戏,或者说一个小Demo,其实是一个简单且传统的战棋战斗场景。初步的设计是:在2D世界里创建一张由六边形地块组成的战斗地图,敌我双方依据体力在地图上轮流行动并向对方发动攻击,先消灭掉所有...
1 2 3 4 5 ... 20
收藏数 821
精华内容 328