SIKI学习——UnityAPI常用方法和类详解0201

一、射线检测之基本使用

射线有一个起点,方向,可以无限长,也可以有长度。
既可以进行二维的检测,也可以进行三维的检测。

public class Player : MonoBehaviour
{
 void Start ()
    {
    }
 void Update ()
    {
        //+transform.forward是指在z轴加1米,因为射线碰到了自身,所以这里大概加了有一米左右
        Ray ray = new Ray(transform.position+transform.forward,transform.forward);//创建射线 起点 方向 
        bool isCollider= Physics.Raycast(ray);//(做射线检测)返回一个布尔值,判断是否碰到物体
        Debug.Log(isCollider);//这个只能得到是够碰撞到游戏物体
    }
}

二、射线检测之重载方法

public class Player : MonoBehaviour
{
 void Start ()
    {
    }
 void Update ()
    {
        //+transform.forward是指在z轴加1米,因为射线碰到了自身,所以这里大概加了有一米左右
        Ray ray = new Ray(transform.position+transform.forward,transform.forward);//创建射线 起点 方向 
        //bool isCollider= Physics.Raycast(ray);//(做射线检测)返回一个布尔值,判断是否碰到物体

        //Raycast重载方法 每个方法都会返回一个bool值
        //bool isCollider = Physics.Raycast(ray,1);//1是距离,通过距离指定射线检测的距离
        RaycastHit hit;
        //bool isCollider = Physics.Raycast(ray,out hit);//RaycastHit存储我们碰撞到的物体,碰撞位置
        //Debug.Log(hit.collider);//获取碰撞到的碰撞器
        //Debug.Log(hit.point);//获取碰撞到的位置
        bool isCollider = Physics.Raycast(ray, Mathf.Infinity, LayerMask.GetMask("Enemy1","Enemy2"));//LayerMask.GetMask("Enemy1")这个是要指定的layer层去发生碰撞的,可以多个可以一个    
        Debug.Log(isCollider);//这个只能得到是够碰撞到游戏物体
    }
}

关于2D射线检测和检测碰撞到所有物体

public class Player : MonoBehaviour
{
 void Start ()
    {
    }
 void Update ()
    {
        //+transform.forward是指在z轴加1米,因为射线碰到了自身,所以这里大概加了有一米左右
        Ray ray = new Ray(transform.position+transform.forward,transform.forward);//创建射线 起点 方向 
        //bool isCollider= Physics.Raycast(ray);//(做射线检测)返回一个布尔值,判断是否碰到物体
        //Raycast重载方法 每个方法都会返回一个bool值
        //bool isCollider = Physics.Raycast(ray,1);//1是距离,通过距离指定射线检测的距离
        RaycastHit hit;
        //bool isCollider = Physics.Raycast(ray,out hit);//RaycastHit存储我们碰撞到的物体,碰撞位置
        //Debug.Log(hit.collider);//获取碰撞到的碰撞器
        //Debug.Log(hit.point);//获取碰撞到的位置
        bool isCollider = Physics.Raycast(ray, Mathf.Infinity, LayerMask.GetMask("Enemy1","Enemy2"));//LayerMask.GetMask("Enemy1")这个是要指定的layer层去发生碰撞的,可以多个可以一个    
        Debug.Log(isCollider);//这个只能得到是够碰撞到游戏物体
        
        //2D射线检测和检测碰撞到所有物体
        //Physics2D.Raycast();确保添加2D的碰撞器
        //Physics.RaycastAll();检测被碰撞到的所有物体,不加all的就检测刚开始碰撞到的(对此我有疑问?不知道是碰撞到第一个之后就不会检测到后来所有的)
    }
}

三、通过拖拽的方式监听UGUI的事件

UGUI事件监听
1.拖拽
2.代码添加
3.通过实现接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码添加方式

public class UIEventManager : MonoBehaviour
{
    public GameObject btnGameObject;
    public GameObject sliderGameObject;
    public GameObject dropDownGameObject;
    public GameObject toggleGameObject;
    void Start ()
    {
        btnGameObject.GetComponent<Button>().onClick.AddListener(this.ButtonOnClick);//监听器
        sliderGameObject.GetComponent<Slider>().onValueChanged.AddListener(this.OnSliderChanged);
        dropDownGameObject.GetComponent<Dropdown>().onValueChanged.AddListener(this.OnDropDownChanged);
        toggleGameObject.GetComponent<Toggle>().onValueChanged.AddListener(this.OnToggleChanged);
    }
    void ButtonOnClick()
    {
        Debug.Log("ButtonOnClick");
    }
    void OnSliderChanged(float value)
    {
        Debug.Log("SliderChanged:"+value);
    }
    void OnDropDownChanged(Int32 value)
    {
        Debug.Log("OnDropDownChanged:" + value);
    }
    void OnToggleChanged(bool value)
    {
        Debug.Log("OnToggleChanged:" + value);
    }
 void Update ()
    {
    }  
}

四、跟鼠标相关事件接口的实现

using UnityEngine.EventSystems;//接口所需的命名空间
//using UnityEngine.UI;老师说还要这个,但我试了一下,不用也行
public class UIEventManager2 : MonoBehaviour, IPointerDownHandler,IPointerClickHandler,IPointerUpHandler,IPointerEnterHandler,IPointerExitHandler
{
    /// <summary>
    /// 这个是鼠标点击
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("OnPointerClick");
    }
    /// <summary>
    /// 实现IPointerDownHandler接口的方法 这个是鼠标按下
    /// 实现鼠标按下,触发方法(如果在Unity中取消RaycastTarget 就不能触发这个事件点击的方法了)
    /// 这个事件监听是通过射线检测来实现的,所以要确保勾选
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerDown(PointerEventData eventData)
    {
        //throw new System.NotImplementedException();这个不要
        Debug.Log("OnPointerDown");
    }
    /// <summary>
    /// 这个是鼠标进入
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("OnPointerEnter");
    }
    /// <summary>
    /// 这个是鼠标移出
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("OnPointerExit");
    }
    /// <summary>
    /// 这个是鼠标抬起
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("OnPointerUp");
    }
}

五、跟拖拽相关的事件接口的实现

using UnityEngine.EventSystems;//接口所需的命名空间
//using UnityEngine.UI;老师说还要这个,但我试了一下,不用也行
public class UIEventManager2 : MonoBehaviour, //IPointerDownHandler,IPointerClickHandler,IPointerUpHandler,IPointerEnterHandler,IPointerExitHandler,
    IBeginDragHandler,IDragHandler,IEndDragHandler,IDropHandler//拖拽接口
{
    /// <summary>
    /// 开始拖拽
    /// </summary>
    /// <param name="eventData"></param>
    public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log("OnBeginDrag");
    }
    /// <summary>
    /// 拖拽中
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("OnDrag");
    }
    /// <summary>
    /// 停止拖拽
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrop(PointerEventData eventData)
    {
        Debug.Log("OnDrop");
    }
    /// <summary>
    /// 结束拖拽是在停止拖拽后,如果鼠标还在控制的控件上会触发这个方法
    /// </summary>
    /// <param name="eventData"></param>
    public void OnEndDrag(PointerEventData eventData)
    {
        Debug.Log("OnEndDrag");
    }
    /// <summary>
    /// 这个是鼠标点击
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("OnPointerClick");
    }
    /// <summary>
    /// 实现IPointerDownHandler接口的方法 这个是鼠标按下
    /// 实现鼠标按下,触发方法(如果在Unity中取消RaycastTarget 就不能触发这个事件点击的方法了)
    /// 这个事件监听是通过射线检测来实现的,所以要确保勾选
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerDown(PointerEventData eventData)
    {
        //throw new System.NotImplementedException();这个不要
        Debug.Log("OnPointerDown");
    }
    /// <summary>
    /// 这个是鼠标进入
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("OnPointerEnter");
    }
    /// <summary>
    /// 这个是鼠标移出
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("OnPointerExit");
    }
    /// <summary>
    /// 这个是鼠标抬起
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("OnPointerUp");
    }
}

六、如何通过WWW下载图片

www支持本地的,服务器,ftp 。
http:// http:// file:// ftp://

public class WWWTest : MonoBehaviour
{
    public string url = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2614374335,2032277970&fm=26&gp=0.jpg";
    /// <summary>
    /// 给材质指定从网上下下来的图片
    /// </summary>
    /// <returns></returns>
    IEnumerator Start()
    {
        WWW www = new WWW(url);
        yield return www;
        Renderer renderer = GetComponent<Renderer>();
        renderer.material.mainTexture = www.texture;
    }
    void Update ()
    {
    }
}

七、Touches触摸事件

input 里有个touches 可以当前触摸数量
通过GetTouch获取手指都在做什么

public class TouchesTest : MonoBehaviour
{
 void Start ()
    {
    }
 void Update ()
    {
        //获取触摸的数量
        //Debug.Log(Input.touches.Length);
        //把第一个手指的事件封装成一个Touch对象 可以通过对象获取手指的事件
        if (Input.touches.Length>0)//先判断触摸事件是否为空
        {
            Touch touch1 = Input.touches[0];//第一个手指
            //touch1.position;手指触摸的位置
            //获取当前手指的状态
            TouchPhase touchPhase = touch1.phase;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值