Unity四元素运用之风向标跟随箭头
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四元素运用之风向标跟随箭头的更多相关文章
- Unity3D学习笔记(八):四元素和书籍推荐
书籍推荐: 3D数学基础:图形与游戏开发——游戏软件开发专家系列(美)邓恩 Unity Shader入门精要 冯乐乐(92年) 数据结构(Python语言描述) 数据结构.算法与应用(C++语言描述) ...
- [原][数学][C++][osg]空间向量OA到转到空间向量OB、以及四元素Q1转到Q2的函数
注意:Oa其实在OK的延长线上,上图只是为了好看才把Oa和OK分开了 算法需求如图所示: 已知空间向量OA和空间向量OB 我想算出OA向OB按某角度或者某时间移动 变成空间向量Oa的算法 先说废话:我 ...
- Unity的四元素与Vector3的乘积的含义
Quaternion.Euler(x,y,z)含义是按照每个旋转轴以x,y,z旋转度旋转,例子:Quaternion.Euler(45,45,45) Quaternion与Vector3的右乘操作(* ...
- Unity四种路径总结
四种路径的权限: Application.dataPath 包含游戏数据文件夹的路径(只读) Applicatio ...
- Unity3D学习笔记(七):叉乘和四元素
向量的叉乘: 数学运算:a(ax,ay,az) x b(bx,by,bz) = c(aybz-azby,azbx-axby,axby-aybx) 几何意义:得到一个新的向量,同时垂直于a向量和b向量, ...
- unity 常用的几种相机跟随
固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...
- Unity学习-元素类型(三)
在看下面操作时,先记住三句话 1.游戏对象 是由 组件 组成的:衣服 2.材质(Material):就是衣服的设计方案 3.纹理(Texture):做衣服的布料 从GameObject到Cube 第一 ...
- Unity 3D里相机的平滑跟随(转)
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 public class ...
- web自动化之selenium(四)元素等待
隐式等待 说明 隐式等待是通过设置一定时长的等待,让页面上的某些元素能过加载出来,如果超过了设置的时间还没有加载出来则抛出(NoSuchelementException异常),默认单位为"秒 ...
随机推荐
- Spring入门第二十课
返回通知,异常通知,环绕通知 看代码: package logan.study.aop.impl; public interface ArithmeticCalculator { int add(in ...
- Go中函数作为值、类型传递。
在Go中函数也是一种变量,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型 type typeName func(input1 inputType1 , input ...
- 防止APP退到被安卓系统清理
一个是尽量提高APP权限,无非就是保持APP始终界面在前台 二是使用守护进程方法,被清理了立刻自己启动, 三是前台跟后台进程分开,被重启了恢复原始环境. // 申请设备电源锁,在服务start的时候. ...
- 使用HTML辅助方法载入分部视图
在webform中我们用过user control可以减少重复代码也利于将页面模组化, 在mvc中 叫分部视图 Partial View. 也就是一个片段的view.可以利用Partial vie ...
- 访问WEB-INF下JSP资源的几种方式(转)
访问WEB-INF下JSP资源的几种方式 方法一: 本来WEB-INF中的jsp就是无法通过地址栏访问的,所以安全. 如果说你要访问这个文件夹中的jsp文件需要在项目的web.xml文件中去配置ser ...
- es学习(二):elasticsearch 数据存储
当服务器上 es安装好后,第一步就是数据的增删改查. 有一些概念: 索引: 索引是集群用来存放数据的地方,可以理解为一个数据库. index_type:索引类型,数据在索引中按照type存放.可以理 ...
- VMware workstation 14 安装 iOS虚拟机
https://03k.org/vmware-macos.html https://jingyan.baidu.com/article/363872ec206a356e4ba16f30.html 1. ...
- 解决import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;报错的问题
在项目中用到这两个Jar包,但是程序报错. Access restriction: The type BASE64Decoder is not accessible due to restrictio ...
- 集合中的 for-Each循环
数组的加强型的for-Each循环很简单,我们再来看一下集合中的for-Each 循环又是怎么样的.我们都知道集合中的遍历都是通过迭代(iterator)完成的.也许有人说,也可以按照下面的方式来遍 ...
- BZOJ 1116: [POI2008]CLO 并查集
成立时当且仅当每个联通块都有环存在.一个连通块若有m个点,则必有多于m条有向边,可用并查集来维护. #include<cstdio> #include<iostream> #d ...