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. Python中的数据结构和算法

    一.算法 1.算法的时间复杂度 大 O 记法,是描述算法复杂度的符号O(1) 常数复杂度,最快速的算法. 取数组第 1000000 个元素 字典和集合的存取都是 O(1) 数组的存取是 O(1) O( ...

  2. linux下使用c判断文件夹是否为空的小程序

    自己写了一个 判断文件夹是否为空的小代码 //文件夹操作相关的函数的帮助$: man 3 readdir #include <stdio.h> #include <sys/types ...

  3. 第二课2、ROS

    1.ROS框架 分为以下三个级别: 1)文件系统级 2)计算图级 计算图级是ROS处理数据的一种点对点的网络形式,描述程序是如何运行的. 基本的计算图级概念包括:节点,参数服务器,消息,服务,主题和包 ...

  4. Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等

    1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key ...

  5. 关于 == 和 equals() 的区别

    对于正在学习java的,以及入行不久的小伙伴们,在面试中经常会被面试官问到 "  == 和 equals() 的区别 ?"的问题,你是否回答好了呢? 示例一: //两个基本类型数据 ...

  6. Django 开发拓展 auth 模块,注册用户时发生 ValueError: The given username must be set

    原因 使用局部钩子函数 _clean_fields() 对 username.email 字段进行验证时,未返回,具体请参考 _clean_fields() 函数源码. def clean_usern ...

  7. 【异步编程】Part3:取消异步操作

    在.Net和C#中运行异步代码相当简单,因为我们有时候需要取消正在进行的异步操作,通过本文,可以掌握 通过CancellationToken取消任务(包括non-cancellable任务).  早期 ...

  8. <!--[if !IE]> 的用法

    除IE外都可识别

  9. 洛谷P1655 小朋友的球(Stirling数)

    P1655 小朋友的球 题目描述 @发源于 小朋友最近特别喜欢球.有一天他脑子抽了,从口袋里拿出了N个不同的球,想把它们放到M个相同的盒子里,并且要求每个盒子中至少要有一个球,他好奇有几种放法,于是尝 ...

  10. 洛谷P2029 跳舞

    P2029 跳舞 题目描述 小明今天得到一个跳舞毯游戏程序Dance.游戏每次连续出N个移动的“箭头”,箭头依次标号为1到N,并且的相应的分数S[1..N].如果你能“踏中”第i号箭头,你将获得相应的 ...