unity常用方法总结

1.碰撞事件


 private void OnCollisionEnter2D(Collision2D collision)
 {
 if (collision.collider.tag == "collect") {
            Debug.Log("++!");
            Destroy(collision.gameObject);
            GameUI.collectNum++;
        }
}

1.触发器事件


  private void OnTriggerEnter2D(Collider2D collision)
    {

}

2.射线方法

重写射线的方法
调用时

 RaycastHit2D hitRight = Raycast(new Vector2(0.8f, 0), Vector3.right, 0.5f, ground);
 //参数:(位置,方向,长度,图层)

PS:注意不要从物体·的位置直接发射射线,不然射线会一直碰到物体本身

 RaycastHit2D Raycast(Vector2 offset, Vector2 rayDiraction, float length, LayerMask layer)
    {

        //获取物体的位置
        Vector2 pos = transform.position;
        //创造射线
        RaycastHit2D hit = Physics2D.Raycast(pos + offset, rayDiraction, length, layer);

        //颜色改变,碰到就是红,不碰就是绿w
        Color color = hit ? Color.red : Color.green;

        //用debug来绘制可视化的射线
        Debug.DrawRay(pos + offset, rayDiraction * length, color);
        return hit;

    }

3.简单射线

4.冻结XYZ轴/解冻

冻结:

 rigi.constraints=RigidbodyConstraints2D.FreezePositionX
    rigi.constraints=RigidbodyConstraints2D.FreezePositionY
      rigi.constraints=RigidbodyConstraints2D.FreezePositionZ

解冻:rigi.constraints = RigidbodyConstraints2D.None;
只能一次性全部解冻

5.销毁物体

Destroy(player);

6.调用其他类的方法

GameObject.FindObjectOfType().Over();

7.生成预载体

8.预载体文件夹PreFab

成为子集
transform.SetParent(coll.transform);

  void OnTriggerEnter2D(Collider2D coll) {
        if (coll.tag =="rotato") {
            rigi.velocity = Vector2.zero;
            transform.SetParent(coll.transform);//如果碰到就设为他的子集
            Debug.Log("碰到了");
        }

        if (coll.tag == "pin") {
            GameObject.FindObjectOfType<GameOver>().over();
                  
        }
    }
}

9.停用脚本

要事先吧脚本定义好
public fas fas;
public rotation rotation;

脚本名.enabled=false;

fas.enabled = false;
rotation.enabled = false;

10.修改物体刚体的重力大小
Ared.gameObject.GetComponent().gravityScale = 0;

11.脚本设置点击按钮事件

直接继承 IPointerDownHandler, IPointerUpHandler, IPointerExitHandler三个类

public class OnButtonPressed : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
{

12.调用其他类的方法

    int load = GameObject.FindObjectOfType<Save>().ReadLoad1();

13.主摄像机大小

Camera.main.DOOrthoSize(2f, 0.6f);

消除卡墙bug
在物体外围添加射线 碰到射线就停止运动

14.[SerializeField] 注解

让变量显示在面板上

 [SerializeField]  private int i;

15 . 移动到指定位置

MoveToWards()

transform.position = Vector2.MoveTowards(transform.position,target.transform.position,moveSpeed*Time.deltaTime);
    

16.获取鼠标点击的位置

将鼠标点击的位置转换为屏幕坐标和世界坐标

public Vector3 screenPosition;//将物体从世界坐标转换为屏幕坐标
public Vector3 mousePositionOnScreen;//获取到点击屏幕的屏幕坐标
public Vector3 mousePositionInWorld;//将点击屏幕的屏幕坐标转换为世界坐标

void MouseFollow()
{
    //获取鼠标在相机中(世界中)的位置,转换为屏幕坐标;
    screenPosition = Camera.main.WorldToScreenPoint(transform.position);
    //获取鼠标在场景中坐标
    mousePositionOnScreen = Input.mousePosition;
    //让场景中的Z=鼠标坐标的Z
    mousePositionOnScreen.z = screenPosition.z;
    //将相机中的坐标转化为世界坐标
    mousePositionInWorld = Camera.main.ScreenToWorldPoint(mousePositionOnScreen);
    //物体跟随鼠标移动
    //transform.position = mousePositionInWorld;
    //物体跟随鼠标X轴移动
    // transform.position = new Vector3(mousePositionInWorld.x, transform.position.y, transform.position.z);
}

17.获取物体面板的旋转值

public Vector3 GetInspectorRotationValueMethod(Transform transform)
    {
        // 获取原生值
        System.Type transformType = transform.GetType();
        PropertyInfo m_propertyInfo_rotationOrder = transformType.GetProperty("rotationOrder", BindingFlags.Instance | BindingFlags.NonPublic);
        object m_OldRotationOrder = m_propertyInfo_rotationOrder.GetValue(transform, null);
        MethodInfo m_methodInfo_GetLocalEulerAngles = transformType.GetMethod("GetLocalEulerAngles", BindingFlags.Instance | BindingFlags.NonPublic);
        object value = m_methodInfo_GetLocalEulerAngles.Invoke(transform, new object[] { m_OldRotationOrder });
        //Debug.Log("反射调用GetLocalEulerAngles方法获得的值:" + value.ToString());
        string temp = value.ToString();
        //将字符串第一个和最后一个去掉
        temp = temp.Remove(0, 1);
        temp = temp.Remove(temp.Length - 1, 1);
        //用‘,’号分割
        string[] tempVector3;
        tempVector3 = temp.Split(',');
        //将分割好的数据传给Vector3
        Vector3 vector3 = new Vector3(float.Parse(tempVector3[0]), float.Parse(tempVector3[1]), float.Parse(tempVector3[2]));
        return vector3;
    }

18.控制时间

Time.timeScale = 0.3f;

19.停止协成

 public Coroutine coroutine;

 coroutine=StartCoroutine(LeftAndRight());

20.将一个脚本变为按钮直接继承类

IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
这是整套的也可以单独继承需要的方法

public class MenuScene : MonoBehaviour, IPointerDownHandler
{
他就会自动报方法的
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值