从零开始记录

一.基础

1.配置

a.给按钮背景图,需要修改图片为精灵模式(Sprite 2D)才可以使用。
b.Unity脚本在Visual Studio代码提示,在Unity->首选项->外部工具->选中VS

2.场景

a.记载场景,文件->生成设置->添加场景。
其中,同步加载场景过程是阻塞的,异步是不会阻塞线程的,可以在加载过程中继续执行一些代码,比如同步每一个玩家的加载进度。
b.天空和skybox,创建材质,可以使用cubemap方式(一张全景图,设置为立方体模式),或者6side(6张拼接图片)等方式。

3.物体

a.物体Object的基本操作中,设置轴心模式,那么控制点就是在父物体本身轴心上,设置中心,那么控制点就是在父物体和子物体组合的中心点上。

4.摄像机

a.main camera是游戏中主视角,可以设置位置和最大最小距离,感受不同视角的视觉效果。

5.预制件

a.prefab是unity中重复利用的资源,比如树木,人物,子弹等等。
b.拖动元素到资源库可以直接生成一个预制件。

6.组件

a.unity如果看做工厂,组件就是工厂中各种机器,拥有不同的功能。例如,一个物体被创建出来,就自带一个transform的属性,包含物体位置,旋转等信息。其中,脚本Script本身就是物体GameObject的一个组件。
b.API使用

         //查找物体
        GameObject gob = GameObject.Find("Cube2");
        //在物体上添加组件
        gob.AddComponent();
        //查找物体上的组件
        AudioSource[] audioSource=gob.GetComponents();
        Debug.Log("audioSource:"+audioSource);
        //关闭组件
        AudioSource audio1 = gob.GetComponent();
        audio1.enabled = false;
        //删除组件
        Destroy(audio1);

7.UI

a.切换到2D显示,更方便进行UI操作。
b.滚动视图scrollview,内容添加到content上,同时也需要拖动设置content的显示大小,控制滑动区域。

public class LoginScript : MonoBehaviour
{
    InputField ifd;
    
    void Start()
    {
        Debug.Log("启动Canvas");
        //InputField输入框监听
        ifd = transform.Find("userNameIF").GetComponent();
        ifd.onEndEdit.AddListener(userNameEndEdit);
        //Button按钮监听
        Button loginBtn = transform.Find("loginBtn").GetComponent

c.给父视图添加mask组件,可以控制子视图不超出父视图的显示区域。
d.滚动视图scrollview,添加grid layout组件,实现网格布局;添加content size fitter实现自动内容大小适配。其中content size fitter也可以作为文本框等内容不定的自适应组件使用。

public class FitSizeTest : MonoBehaviour
{
    //public变量可以直接被外部元素引用
    public GameObject griditem; //预制件是GameObject
    public Transform Content;   //ScorllView中Content Transform

    void Start()
    {
        
    }

    
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.A))
        {
            //初始化一个预制件,添加到Content节点下
            GameObject goj=GameObject.Instantiate(griditem);
            goj.transform.parent = Content;
        }

    }
}

e.UI元素中可以添加Shadow,Outlet等组件丰富显示效果。

8.Input

a.输入管理器中(编辑-项目设置),默认了一些输入时间,通过Input.GetAxis()获取到之后,可以进行相应处理。

public class TestAxis : MonoBehaviour
{
    void Start()
    {
        
    }

    void Update()
    {
        //通过AD/WS获取位移参数,对该参数进行物体移动处理
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        if(horizontal!=0)
        {
            transform.position = new Vector3(transform.position.x + horizontal * 0.1f, transform.position.y, transform.position.z);
        }
        if(vertical!=0)
        {
            transform.position = new Vector3(transform.position.x + horizontal, transform.position.y, transform.position.z + vertical * 0.1f);
        }
    }
}

b.键盘事件

if(Input.GetKey(KeyCode.T))
        {
            Debug.Log("T GetKey 被持续按下");
        }
        if (Input.GetKeyDown(KeyCode.Y))
        {
            Debug.Log("Y GetKeyDown");
        }
        if (Input.GetKeyUp(KeyCode.U))
        {
            Debug.Log("U GetKeyUp");
        }

c.鼠标事件

GameObject gos = GameObject.Find("Image");

        //0鼠标左键1鼠标右键
        if(Input.GetMouseButtonDown(0))
        {
            isDown = true;
        }
        if(Input.GetMouseButtonUp(0))
        {
            isDown = false;
        }

        if(isDown)
        {
            gos.transform.position = Input.mousePosition;
        }

9.灯光

a.灯光类型主要有定向(太阳光),点(灯泡),聚光(手电),区域光;灯光模式为实时,烘焙,混合(实时+烘焙)模式,其中区域光默认就是仅烘焙模式,需要在窗口->渲染->灯光中打开全局烘焙配置,然后生成灯光效果,等代烘焙完成,设置成静态的物体就会在烘焙模式的灯光下(比如区域光)被照亮。
b.设置自发光物体,在资源中创建一个材质,打开发射选项,设置颜色,拖到物体上(设置成该物体材质)。

10.模型

a.点击场景中的模型,在检查器中点击选择按钮,可以最快对应到资源库中的模型预制件。

11.物理

a.模型同时添加刚体和碰撞器组件,才能实现模型的基础物理效果。
b.可以给刚性物体添加恒力,相当于一个作用在物体上初始化的力,分为直接力Force(位移方向的力)和扭力Torque(旋转方向的力),其中有相对和绝对之分,绝对的坐标是基于世界坐标,相对的坐标是基于物体坐标。
如果想逐渐停止物体运动,给物体添加一个阻力即可。

Rigidbody rd;
    GameObject obj;
    void Start()
    {
        rd = transform.GetComponent();
        obj = GameObject.Find("rabit");
    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.A))
        {
            //1.从自身中心发力
            //相对力
            //rd.AddRelativeForce(new Vector3(0,0,1000f));
            //相对扭力
            //rd.AddTorque(new Vector3(0, 1000f, 0));
            //爆炸力
            rd.AddExplosionForce(1000, transform.position, 100);

            //2.从其他物体位置向该物体发力
            Vector3 direction = transform.position + new Vector3(0, 1, 0) - transform.position;
            GameObject obj = GameObject.Find("rabit");
            rd.AddForceAtPosition(direction, obj.transform.position);
        }

    }

c.碰撞器监听

//开始碰撞
    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log("OnCollisionEnter"+collision.gameObject.name);
    }
    //碰撞中
    private void OnCollisionStay(Collision collision)
    {
        Debug.Log("OnCollisionStay" + collision.gameObject.name);
    }
    //碰撞结束
    private void OnCollisionExit(Collision collision)
    {
        Debug.Log("OnCollisionExit" + collision.gameObject.name);
    }

d.物理材质,给物体添加物理材质,可以设置物体材质的摩擦力和弹力,要注意力的作用是相互的,碰撞器双方都需要创建。参数从0-1。
e.关节组件,铰链,固定,角色关节等类型,设置多物体连接状态下物理效果。
f.射线

Camera camera;
    //根据发射命中的Layer筛选击中物体
    public LayerMask layerMask;
    
    void Start()
    {
        //摄像机发出射线
        camera = GameObject.Find("Main Camera").GetComponent();
        //模型发出射线
        Debug.DrawRay(transform.position, transform.forward, Color.red, 10f);
        layerMask = LayerMask.GetMask("Enemy");
    }

    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            //RaycastHit获取击中物体
            Ray ray =camera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100f))
            {
                Debug.Log("命中了"+hit.collider.gameObject.name+"位置是:"+hit.point);
            }
            else
            {

            }

            //根据发射命中的Layer筛选击中物体
            if (Physics.Raycast(ray,out hit,100f,layerMask))
            {
                Debug.Log("命中了Enemy Layer");
            }
        }

    }

12.动画

a.动画控制器组件使用

//1.创建一个模型,不关联预制组。
//2.资源库中创建一个动画控制器,在控制器中拖拽要使用的动画,进行动画参数设置(自动退回原始状态等),外部参数设置(在关联线中添加触发条件等)。
//3.在模型上创建动画控制器组件,关联当前资源库中的动画控制器和设计好的Avatar。
//4.模型上关联脚本使用脚本获取动画控制器,让模型执行动画。
Animator am;
    void Start()
    {
        am = transform.GetComponent();
    }

    
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            Debug.Log("click 1"+am);
            am.SetInteger("excute", 1);
        }else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            Debug.Log("click 2");
            am.SetInteger("excute", 2);
        }
        else if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            Debug.Log("click 3");
            am.SetInteger("excute", 3);
        }
    }

b.Avatar遮罩使用

1.使用Avatar目的是,遮挡部分动画执行,可以让多个动画组合在一起使用
2.资源面板中新建Avatar,设置人行动画遮罩的部位,在变换中指定使用模型的Avatar。
3.在动画控制器中图层选项中新建一个图层,指定新建的Avatar,执行动画的时候就会使用该遮罩遮挡指定部位的动画执行,如果需要叠加两个动画,那么再新建另外的图层,指定新的Avatar遮罩部位,把后加的图层权重调为1。
eg:跑步攻击的时候,给跑步添加上半身遮罩,给攻击添加下半身遮罩。

c.事件监听

//动画控制面板中找到对应的动画,选择,定位到资源面板中,在检查器中选择事件,把函数名称放上去,执行到对应帧数可触发响应函数。

13.导航寻路

a.实现点击地图位置,目标物体走动到目标点的功能,包括障碍物绕过,选择最优路线等。

14.音效系统

a.每个场景需要多个音效和一个音频监听源组件

    AudioSource ads;
    void Start()
    {
        
        ads=transform.GetComponent();
    }

    void audioControl()
    {
        ads.Play();
        ads.Pause();
        ads.Stop();
    }

b.音频过滤器,用来对声音进行过滤的组件

你可能感兴趣的:(从零开始记录)