用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c#代码库

点乘叉乘

2015-04-23 作者: yumiko举报

[c#]代码库

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
 
 
public class VectorDotCross_001 : MonoBehaviour
{
 
    public Image ImageMoveUI;                   //要移动的图片,也可以是gameobject             
    private Vector3 Vector3MousePosition;       //当前鼠标的坐标
    private Vector3 Vector3point;               //图片指向鼠标指针方向
    private bool BoolMoveflag = false;          //图片移动判断
 
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
           
            ReRotateMethod();                  //旋转物体
        }
        if (BoolMoveflag)
        {
            ReMoveMethod();                    //图片进行移动
        }
    }
    void ReRotateMethod()
    {
        BoolMoveflag = true;
        //获取摄像机指向鼠标点击方向的向量
        Vector3MousePosition = Input.mousePosition - Camera.main.transform.position;
        //获取图片指向鼠标点击方向的向量
        Vector3point = Vector3MousePosition - ImageMoveUI.transform.position;
        //然后计算图片到鼠标方向的夹角
        //点乘的结果是两个向量的大小相乘在乘其Cos值
        float floatCurretRotate = Vector3.Dot(ImageMoveUI.transform.up.normalized, Vector3point.normalized);
        float Rotate = Mathf.Acos(floatCurretRotate) * Mathf.Rad2Deg;
        //由于计算的夹角不会大于180度,所以需要判断旋转方向
        //也就是说当前鼠标的位置是否和图片上方处于同一侧,这里使用叉乘来判断
        //两个向量叉乘得到一个新的向量,该向量垂直于原来的两个向量,其长度对于其长度相乘的正弦值
        Vector3 VecCross = Vector3.Cross(ImageMoveUI.transform.up, Vector3point);
        //我们判断叉乘得到的向量的Z轴正负,来让图片是否是逆时针转还是顺时针转
        Vector3 point;
        if (VecCross.z < 0)
        {
            point = Vector3.back;
        }
        else
        {
            point = Vector3.forward;
        }
        //让图片进行旋转
        if (Rotate > 1f)
        {
            ImageMoveUI.transform.RotateAround(ImageMoveUI.transform.position, point, Rotate);
        }
    }
    private void ReMoveMethod()
    {
        //判断距离
        if (Vector3.Distance(ImageMoveUI.transform.position, Vector3MousePosition) > 3f)
        {
            ImageMoveUI.transform.position = ImageMoveUI.transform.position + Vector3point.normalized * 2f;
        }
        else
        {
            BoolMoveflag = false;
        }
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...