1.学习一个物体单击事件


学习目的:双击到一个物品上,处理一个行为。这里当双击到地面上的时候,在地面上点击位置创建一个Cube实例。


下面是代码:


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


public class doubleKick : MonoBehaviour
{

    public Camera activeCamera;// 摄像机
    public Transform Container;//所有Cube的父亲
    public Transform CubePrefab;//预制体方块赋值(可以用拖的方式赋值)
 
    
    public float Scale = .5f;

    private Rigidbody rb;
    private double lastKickTime; // 上一次鼠标抬起的时间(用来处理双击)
    
    void Awark()
    {
        rb = GetComponent<Rigidbody>();
        lastKickTime = Time.realtimeSinceStartup;
    }
    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonUp(0))
        {
            CheckCreateCube();
        }
    }


   void OnMouseDown()
    {
       //Debug.Log("鼠标按下");
    }   

    void OnMouseUp()
    {
        //Debug.Log("鼠标抬起");
    }

    void CheckCreateCube()
    {
        RaycastHit hit;
        // 从鼠标所在的位置发射
        Vector2 screenPosition = Input.mousePosition;
        if (Physics.Raycast(activeCamera.ScreenPointToRay(screenPosition), out hit) && hit.transform == transform)
        {
            if (Time.realtimeSinceStartup - lastKickTime < 0.5)//检测上次点击的时间和当前时间差 在一定范围内认为是双击
            {
                //创建一个Cube实例
                var cube = Instantiate(CubePrefab) as Transform;
                cube.parent = Container;
                cube.name = "Cube";
                cube.localScale = Vector3.one * Scale * cube.localScale.x;
                cube.position = hit.point + hit.normal * .5f;
            }
            
            lastKickTime = Time.realtimeSinceStartup;//重新设置上次点击的时间
        }   
    }
}

通过射线检测是否点击到物体实例上,这里就不在说了,详情可以查看

点击打开链接



这里双击是通过检测两次点击在一个物体上的时间差实现的。


if (Time.realtimeSinceStartup - lastKickTime < 0.5)//检测上次点击的时间和当前时间差 在一定范围内认为是双击
            {
            }






下面了解一下时间有关的一些东西

Time.realtimeSinceStartup 从开始真实时间



realtimeSinceStartup返回从开始时间,不受Time.timeScale影响。即使玩家暂停游戏,realtimeSinceStartup也将保持增加(在后台)。当你想通过设置Time.timeScale为0暂停游戏时,但仍希望能够以某种方式来计算时间,使用realtimeSinceStartup是很有用的。



Time.deltaTime 增量时间

以秒计算,完成最后一帧的时间(只读)。

使用这个函数使你的游戏帧速率独立。

如果你加或减一个每帧改变的值,你应该与Time.deltaTime相乘。当你乘以Time.deltaTime实际表示:每秒移动物体10米,而不是每帧10米。

Time.smoothDeltaTime 平滑增量时间

经平滑的Time.deltaTime时间(只读)。




Time.time 时间

以秒计算,从游戏开始的时间(只读)。也就是说,从游戏开始到到现在所用的时间。

如果在单帧调用多次,返回相同的值。当在MonoBehaviour的FixedUpdate里调用的时候,返回的是fixedTime属性。

Time.fixedTime 固定时间

最近的FixedUpdate已开始的时间(只读)。这是以秒计自游戏开始的时间。

固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。