using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class WindVaneCom : MonoBehaviour

{

public static WindVaneCom instance

{

get;

private set;

}

public bool isOn = false;

public Camera cam;

public GameObject T;

public GameObject V;

public float PivotXY = 75f;

public float scoX = 220f;

public float scoY = 270f;

private float AtX;

private float AtY;

private Vector2 v2 = Vector2.one;

private Vector2 v2new = Vector2.one;

private Vector3 v3 = Vector3.one;

private Quaternion qua = Quaternion.identity;

void Awake()

{

instance = this;

}

public void SetGameobj(Camera ca, GameObject v, GameObject t)

{

cam = ca;

T = t;

V = v;

}

// Update is called once per frame

void Update()

{

if (isOn)

{

ObjectCom com = CreatureModel.Instance.GetCurrentObjCom();

if (com != null)

{

T = com.gameObject;

}

if (V == null || T == null)

{

Debug.Log("V==null||T==null");

return;

}

if (null != Camera.main)

{

cam = Camera.main;

v2 = cam.WorldToScreenPoint(T.transform.position);

}

else

{

Debug.Log("null == Camera.main");

// cam = Camera.current;

}

if ((v2.x >= (0 - scoX) && v2.x <= (Screen.width + scoX)) && (v2.y >= (0 - scoY) && v2.y <= (Screen.height + scoY)))

{

V.SetActive(false);

}

else

{

V.SetActive(true);

}

if (v2.x < -scoX)

{

AtX = PivotXY;

if (v2.y > 0 && v2.y < Screen.height)

{

AtY = v2.y;

V.SetActive(true);

}

}

if (v2.x > (Screen.width + scoX))

{

AtX = Screen.width - PivotXY;

if (v2.y > 0 && v2.y < Screen.height)

{

AtY = v2.y;

V.SetActive(true);

}

}

if (v2.y < -scoY)

{

AtY = PivotXY;

if (v2.x > 0 && v2.x < Screen.width)

{

AtX = v2.x;

V.SetActive(true);

}

}

if (v2.y > (Screen.height + scoY))

{

AtY = Screen.height - PivotXY;

if (v2.x > 0 && v2.x < Screen.width)

{

AtX = v2.x;

V.SetActive(true);

}

}

v2new.x = AtX;

v2new.y = AtY;

V.GetComponent<RectTransform>().anchoredPosition = v2new;

qua.SetLookRotation(V.transform.position, T.transform.position);

v3 = qua.eulerAngles;

// V.transform.rotation = Quaternion.Euler(0, 0, v3.z);

V.transform.rotation = Quaternion.Euler(v3.x, 0, v3.z);

}

else

{

if (V != null)

V.SetActive(false);

}

}

void OnDestory()

{

instance = null;

}

}

Unity四元素运用之风向标跟随箭头的更多相关文章

  1. Unity3D学习笔记(八):四元素和书籍推荐

    书籍推荐: 3D数学基础:图形与游戏开发——游戏软件开发专家系列(美)邓恩 Unity Shader入门精要 冯乐乐(92年) 数据结构(Python语言描述) 数据结构.算法与应用(C++语言描述) ...

  2. [原][数学][C++][osg]空间向量OA到转到空间向量OB、以及四元素Q1转到Q2的函数

    注意:Oa其实在OK的延长线上,上图只是为了好看才把Oa和OK分开了 算法需求如图所示: 已知空间向量OA和空间向量OB 我想算出OA向OB按某角度或者某时间移动 变成空间向量Oa的算法 先说废话:我 ...

  3. Unity的四元素与Vector3的乘积的含义

    Quaternion.Euler(x,y,z)含义是按照每个旋转轴以x,y,z旋转度旋转,例子:Quaternion.Euler(45,45,45) Quaternion与Vector3的右乘操作(* ...

  4. Unity四种路径总结

    四种路径的权限:                                            Application.dataPath 包含游戏数据文件夹的路径(只读) Applicatio ...

  5. Unity3D学习笔记(七):叉乘和四元素

    向量的叉乘: 数学运算:a(ax,ay,az) x b(bx,by,bz) = c(aybz-azby,azbx-axby,axby-aybx) 几何意义:得到一个新的向量,同时垂直于a向量和b向量, ...

  6. unity 常用的几种相机跟随

    固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...

  7. Unity学习-元素类型(三)

    在看下面操作时,先记住三句话 1.游戏对象 是由 组件 组成的:衣服 2.材质(Material):就是衣服的设计方案 3.纹理(Texture):做衣服的布料 从GameObject到Cube 第一 ...

  8. Unity 3D里相机的平滑跟随(转)

    1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 public class ...

  9. web自动化之selenium(四)元素等待

    隐式等待 说明 隐式等待是通过设置一定时长的等待,让页面上的某些元素能过加载出来,如果超过了设置的时间还没有加载出来则抛出(NoSuchelementException异常),默认单位为"秒 ...

随机推荐

  1. Mathematics Base - Tensor

    以下是我对张量的理解,备注是具体解释,Xmind导出的图片没法显示出来,主要还是将张量间的关系画出来,方便理解. 图1 张量

  2. SEO优化之——hreflang(多语言网站优化)

    用法格式 <link rel="alternate" href="URL" hreflang="zh-cn"> // href ...

  3. win10彻底关闭自动更新

    第1步 https://jingyan.baidu.com/article/9faa7231e7b78b473c28cbb6.html 第2步 http://www.360doc.com/conten ...

  4. 基于Unity 5的次世代卡通渲染技术 -- Unite 2017 米哈游总监贺甲分享实录

    在5月12日Unite2017开发者大会上,米哈游技术总监兼美术指导贺甲进行了主题为次世代卡通渲染的演讲.一下为详细分享内容: 大家好,首先自我介绍一下,我叫贺甲,在米哈游担任技术总监和美术指导工作, ...

  5. python dict操作

    d1 = {'one': 1, 'two': 2} d2 = {'one': 1, 'two': 2} d3 = {'one': 1, 'two': 2} print(dir(d1)) # 1.con ...

  6. solidity 学习笔记(3) 函数修饰符/继承

    修饰符: 函数修饰符有 constant  view pure 其中 constant和view的功能是一样的  不会消耗gas 也就是说不会做任何存储   constant在5.0以后的版本中被废弃 ...

  7. PJzhang:一站式跨境卖家网址导航Amz520.com

    猫宁!!! 参考链接:http://www.guxiaobei.com/amz520-release.html www.amz520.com是一个跨境电商导航站点,汇集了大量的高效信息,做这个站点花费 ...

  8. vue中声明式导航和编程式导航

    官方文档:https://router.vuejs.org/zh-cn/essentials/navigation.html 声明式导航和编程式导航 共同点: 都能进行导航,都可以触发路由,实现组件切 ...

  9. BZOJ 1899&&luogu P2577: [Zjoi2004]Lunch 午餐 贪心+DP

    贪它,再大力DP(话说觉得此题简单的真的是大佬QAQ)我想了两天...QWQ 贪心:吃饭慢的先打饭(不太会证...) DP:f[i][j]表示前i个人,在1号窗口打饭的总时间时j,的最短时间 确定i的 ...

  10. 51nod1244 欧拉函数之和 杜教筛

    和上一题差不多,一个是μ*I=e,一个是φ*I=Id 稍改就得到了这题的代码 (我会告诉你我一开始逆元算错了吗) #include <bits/stdc++.h> #define MAX ...