unity初识3

来源:互联网 发布:linux for循环用法 编辑:程序博客网 时间:2024/05/29 19:15

1.模型导入、动画播放

(1)unity支持大部分高端的3D动画软件,方便导入,导出选择FBX导出(2)如果给你的动画集是没有切出来,我们如何剪辑?    <1>导入模型    <2>选中模型—>在属性面板中设置Rig->leggacy查看所有动画    <3>Animation-->切割动画    <4>播放选项Wrap Mode-----------loop循环    注:clips—>剪辑(3)通过克隆游戏对象,并给游戏对象上脚本(4)常用动画    播放剪辑动画---组件.Play(剪辑名)    设置动画播放速度---组件[剪辑名].speed

2.ITween动画

(1) 导入两个C#写好的脚本ITween 和iTweenPath(路径—>一般在游戏开发中加载到相机上,做游戏的开场动画)
(2) 根据API文档查看,这里简单介绍3个

移动:iTween.MoveBy(gameObject, iTween.Hash("x", 5, "easeType", "easeInOutExpo", "loopType", "pingPong", "delay", .1));旋转:iTween.RotateBy(gameObject, iTween.Hash("x", .25, "easeType", "easeInOutBack", "loopType", "pingPong", "delay", .4));按路径移动:iTween.MoveTo(gameObject,iTween.Hash("path",iTweenPath.GetPath("go1"),"time",20,"easetype","linear"));

3.物理引擎之刚体

物理引擎指模拟真实世界物理碰撞等反应的引擎刚体属性(rigidbody)标明物体受物理影响,含重力,阻力等Mass:质量,Drag摩擦系数,Gravity重力,kinematic运动学 Freeze冰冻给刚体加'力',不给就默认null----->代码中调用AddForce(方向*力(向量),力的模式(Impulse等))实现

4.碰撞检测

(1)碰撞器:
静态碰撞器:内置提供了多种形状的碰撞器
刚体碰撞器:添加了刚体的碰撞器
运动学碰撞器:在刚体上勾选了Is Kinematic,这时只能通过transform改变位置,而不能通过加力改变位置
(2)碰撞的条件:
需要两个游戏对象都有静态碰撞器
至少一个游戏对象有刚体碰撞器
(3)碰撞消息
<1>两种类型
触发Trigger,非触发Collision(区别,前者检测碰撞但没有力的作用,后者检测力的作用)
<2>三种状态
碰撞消息的3种状态:Enter,Stay,Exit
对于非触发的碰撞消息,可以通过Collision对象获取碰撞的点
<3>物理材质
1.创建一个物理材质(phicsMaterial)
2.Bounciness 弹性 Friction摩擦系数(静,动) combine 合并
(4)测试代码

using UnityEngine;using System.Collections;public class ForceTest : MonoBehaviour {    private Rigidbody rigidbody;    // Use this for initialization    void Start () {        rigidbody = GetComponent<Rigidbody>();    }    // Update is called once per frame    void Update () {        if(Input.GetKey(KeyCode.Space))        {            //添加力            /*rigidbody.AddForce(new Vector3(1,1,0)*5,ForceMode.Impulse);//牵引力一直存在,脉冲力*/            //移动的方式:速度            rigidbody.velocity = Vector3.up * 1f;            //mesh网格        }    }    //碰撞时,会触发消息,共两种:Collision Trriger    //碰撞的消息分为三种状态:开始enter 中stay 结束Exit    //collider参数表示被碰撞的物体的碰撞体(plane)    void OnCollisionEnter(Collision collider)    {        //collision.gameObject;        Debug.Log("Collision");    }    void OnTrrigerEnter(Collision collider)    {        Debug.Log("Trriger");    }}

5.射线

1.认识:
从摄像机射出一条线,在多重模型下,它就以最眼前的模型碰撞,其他不发生碰撞。一般使用射线判断鼠标点击,发射至某个游戏对象等。
2.测试代码:

using UnityEngine;using System.Collections;public class RayTest : MonoBehaviour {    // Use this for initialization    void Start () {     }    // Update is called once per frame    void Update () {        if(Input.GetMouseButtonDown(0))        {            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//射线位置            RaycastHit hit;//射线碰的对象            //发射射线 Physics.RayCast            //射线,返回对象,射线长度 层            if(Physics.Raycast(ray,out hit,20,1<<8|1<<9)){                Destroy(hit.collider.gameObject);            }        }    }}

6.测试代码:打箱子小游戏

1.给空游戏对象添加脚本

using UnityEngine;using System.Collections;public class HitBox : MonoBehaviour {    public GameObject Box;//接受预置对象    public GameObject Bullet;    public Texture2D Cursor1;    // Use this for initialization    void Start () {        for(int i =0;i<5;i++)//i表示行        {            for(int j=0;j<5;j++)//j表示列            {                GameObject box = Instantiate(Box) as GameObject;                box.transform.position = new Vector3(-2f + i, 0.5f + j, 4.5f);            }        }        //设置焦点        //选中纹理-->改变Texture Type为cursor做焦点-->使用(apply)        Cursor.SetCursor(Cursor1,new Vector2(Cursor1.width/2f,Cursor1.height/2f),CursorMode.Auto);//图片中心和鼠标重合    }    // Update is called once per frame    void Update () {        if(Input.GetMouseButtonDown(0))        {            //获取鼠标位置            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);            //返回碰撞的对象            RaycastHit hit;            //通过物理时间来发射射线            if(Physics.Raycast(ray,out hit))            {                //给力和速度 须是刚体                GameObject bullet = Instantiate(Bullet) as GameObject;                bullet.transform.position = Camera.main.transform.position;                //point                bullet.GetComponent<Rigidbody>().velocity =(hit.point- bullet.transform.position)*3;//向量(末-初)给大小,方向(射线)            }        }    }}

2.给两个碰撞体添加脚本

using UnityEngine;using System.Collections;public class DestroyObj : MonoBehaviour {    // Use this for initialization    void Start () {    }    // Update is called once per frame    void Update () {    }    void OnBecameInvisible()    {        // 当退出视野时  销毁当前的游戏对象        Destroy(gameObject);    }}
原创粉丝点击