Unity学习1.2_Unity基础

这一部分内容比较基础,主要是给自己看的,各位高手手下留情,请自动忽略                               

刚体           

1、刚体的常用方法:

Addforce

 所有与物理相关的操作,需要放在FixedUpdate方法中

void FixedUpdate() {

                ///物理相关的操作,每帧时间固定
        }

具体时间间隔在Edit->Project Setting->Time中的Fixed TimeStep下设置 

可以用于实现子弹发射等效果

2、碰撞事件监测与处理:

    //碰撞开始执行
    void OnCollisionEnter(Collision coll)
    {
        Debug.Log("Hey ,you heart me");
        Debug.Log(coll.gameObject.name); //获取得倒的物体名称
        
    }
    //碰撞结束执行
    void OnCollisionExit(Collision coll)
    {
        Debug.Log("byebye");
        Debug.Log(coll.gameObject.name);
    }    
    //碰撞期间
    void OnCollisionStay(Collision coll)
    {
        Debug.Log("Hey,there");
        Debug.Log(coll.gameObject.name);
    }

3、刚体的触发事件

碰撞体勾选IsTrigger则变成触发器,同样提供了几个监听方法

    //触发开始执行
    void OnTriggerEnter(Collider coll)
    {
        Debug.Log("Welcome");
        Debug.Log(coll.gameObject.name); //获取得倒的物体名称
        
    }
    //触发结束执行
    void OnTriggerExit(Collider coll)
    {
        Debug.Log("ByeBye");
        Debug.Log(coll.gameObject.name);
    }
    //触发期间
    void OnTriggerStay(Collider coll)
    {
        Debug.Log("Hey,there");
        Debug.Log(coll.gameObject.name);
    }

网格体:

1、网格过滤器 MeshFilter组件

 用于设置网格体展示的模型

2、网格渲染器Mesh Render

CastShadows和ReceiveShadows  控制阴影的投射,Materials控制材质的显示

 

 模型:

1、单个模型中心点的改变

UE4中提供了在编辑器中改变pivot的操作,u3d没有,但是可以通过添加一个空物体形成父子关系的方式来改变中心点。

 配合中心点工具进行查看(Center为模型组的中心位置,Pivot为父物体的中心点位置)

 2、旋转门

1、对父物体写脚本,控制父物体的旋转即可

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

public class Code_01: MonoBehaviour
{
    private Transform m_Transfrom;
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Hello");
        m_Transfrom = gameObject.GetComponent<Transform>();
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            Open();
        }

        if (Input.GetKeyUp(KeyCode.Q))
        {
            Close();
        }
    }

    public void Open()
    {
        m_Transfrom.Rotate(Vector3.up,90);
    }

    public  void Close()
    {
        m_Transfrom.Rotate(Vector3.up,-90);
    }
}

 2、利用触发器控制门的开关

可以使用空物体添加Collider来实现,Collider勾选IsTrigger来实现(比较符合实际的情况,有一个额外的传感器来获取是否有人进入)

 查找游戏物体,包括使用游戏物体身上的脚本

通过场景中的物体名获取gameObject : GameObject.Find("DoorParent")

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

public class Code_02 : MonoBehaviour
{
    // Start is called before the first frame update
    private Code_01 s_Code;
    void Start()
    {
        s_Code = GameObject.Find("DoorParent").GetComponent<Code_01>();
    }

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

    private void OnTriggerEnter(Collider other)
    {
        s_Code.Open();
    }

    private void OnTriggerExit(Collider other)
    {
        s_Code.Close();
    }
}

 思考一下这种模式,和UE4的区别,UE4是基于蓝图整合了一个物体Actor,其中的函数可以通过对该Actor的引用进行调用。而u3d是组件式的开发,脚本都相当于是一个单独的组件。

 3、给模型添加Tag标签

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

public class Code_03 : MonoBehaviour
{
    private  GameObject[]  m_Object;
    // Start is called before the first frame update
    void Start()
    {
        m_Object = GameObject.FindGameObjectsWithTag("Interact");
        foreach (var obj in m_Object)
        {
            Debug.Log(obj.name);
        }
    }

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

 关于碰撞的设置还有必要整理一下。

MeshRender对物理属性不产生影响,计算机计算的时候只会根据Rigidbody和collider来判断

1、小球(rigidbody+collider)) 触发器Trigger(带有一个boxcollider,不勾选ISTrigger) 

 

此时小球无法穿过 

 

 2、小球的collider去掉或者勾选ISTrigger属性时,会由于rigid body模拟物理作用直接穿过地板下落

 

 3、Trigger勾选IsTrigger属性时,小球才可以穿过

 

 这里实现触发器中的Enter和Exit 方法用于简单的交互

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

public class Code_02 : MonoBehaviour
{
    // Start is called before the first frame update
    private Code_01 s_Code;
    void Start()
    {
        s_Code = GameObject.Find("DoorParent").GetComponent<Code_01>();
    }

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

    private void OnTriggerEnter(Collider other)
    {
        s_Code.Open();
    }

    private void OnTriggerExit(Collider other)
    {
        s_Code.Close();
    }
}

注意:只有带碰撞体的两个物体才可以做碰撞,

1、只有带rigidbody和碰撞体的物体进入Trigger 才会触发Trigger /Collision的方法

下面的就是去掉了小球的Rigidbody后的效果,boxcollider勾选IsTrigger属性

 

最后要说和UE4有什么区别的话那就是,选中父物体,直接拖到Asset 下后形成的这个预制体就有点类似与ue4中的actor蓝图了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值