unity 物体转向鼠标点击方向2d和3d

3d:摄像机俯视

2d:Canvas 的Render Mode 修改为 Screen Space -Camera

cs 复制代码
 /// <summary>
 /// palyer
 /// </summary>
 public GameObject palyer;
 /// <summary>
 /// 枪
 /// </summary>
 public GameObject gun;
 /// <summary>
 /// 子弹
 /// </summary>
 public GameObject bullet;
 /// <summary>
 /// 战场位置
 /// </summary>
 public GameObject pos;

 public RectTransform uGUICanvas;

 // Start is called before the first frame update
 void Start()
 {

 }

 // Update is called once per frame
 void Update()
 {
     //向鼠标点击位置旋转
     if (Input.GetMouseButton(0) && GameControl.instance.isGameStop == false)
     {
         //没有点击到ui上,3d物体旋转
         //if (EventSystem.current.IsPointerOverGameObject() == false)
         //{
         //    //获取鼠标的坐标,鼠标是屏幕坐标,Z轴为0,这里不做转换
         //    Vector3 mouse = Input.mousePosition;
         //    //获取物体坐标,物体坐标是世界坐标,将其转换成屏幕坐标,和鼠标一直
         //    Vector3 obj = Camera.main.WorldToScreenPoint(transform.position);
         //    //屏幕坐标向量相减,得到指向鼠标点的目标向量,即黄色线段
         //    Vector3 direction = mouse - obj;
         //    //将Z轴置0,保持在2D平面内
         //    direction.z = 0f;
         //    //将目标向量长度变成1,即单位向量,这里的目的是只使用向量的方向,不需要长度,所以变成1
         //    direction = direction.normalized;
         //    //当目标向量的Y轴大于等于0.4F时候,这里是用于限制角度,可以自己条件
         //    // 计算旋转角度
         //    float angle = Mathf.Atan2(direction.x, direction.y) * Mathf.Rad2Deg;
         //    // 使用Quaternion.Euler创建旋转
         //    palyer.transform.rotation = Quaternion.Euler(0, angle, 0);
         //    //gun.transform.rotation = Quaternion.Euler(0, angle, 0);

         //}

         //向鼠标点击位置旋转-2d
         if (Input.GetMouseButton(0) && GameControl.instance.isGameStop == false)
         {
             //没有点击到ui上,2d物体旋转
             if (EventSystem.current.IsPointerOverGameObject() == false)
             {
                 Vector3 mousePos;
                 //Canvas必须是摄像机模式
                 RectTransformUtility.ScreenPointToWorldPointInRectangle(uGUICanvas, new Vector2(Input.mousePosition.x, Input.mousePosition.y), Camera.main, out mousePos);
                 float z;

                 if (mousePos.x > palyer.transform.position.x)
                 {
                     z = -Vector3.Angle(Vector3.up, mousePos - transform.position);
                 }
                 else
                 {
                     z = Vector3.Angle(Vector3.up, mousePos - transform.position);
                 }
                 palyer.transform.localRotation = Quaternion.Euler(0, 0, z);

             }
         }

     }
     //鼠标点击发射子弹
     if (Input.GetMouseButtonDown(0) && GameControl.instance.isGameStop == false && GameControl.instance.isPower == true)
     {
         //没有点击到ui上
         if (EventSystem.current.IsPointerOverGameObject() == false)
         {
             GameObject go = Instantiate(bullet);
             go.name = "子弹";
             go.transform.GetComponent<RectTransform>().SetParent(pos.transform.GetComponent<RectTransform>(), false);
             go.transform.GetComponent<RectTransform>().position = gun.transform.position;
             go.transform.rotation = Quaternion.identity;
         }
     }




 }
相关推荐
KhalilRuan5 小时前
Unity性能优化
unity·性能优化·游戏引擎
ellis19705 小时前
u3d IMGUI[二] 编辑器扩展
unity
playboy13414 小时前
NAS不能访问共享文件夹数据恢复
大数据·计算机外设
卢锡荣16 小时前
一线通桌面显示器优选芯|乐得瑞 LDR6021Q
计算机外设
五仁烧饼17 小时前
Unity性能优化系列内存篇 - 移动端内存优化
unity·性能优化·游戏引擎
WiChP2 天前
【V0.1B15】从零开始的2D游戏引擎开发之路
游戏引擎
每周报刊4 天前
竞速座舱级视界:爱攻 AGP497UCZD 超宽 QDOLED 显示器解析
数据结构·游戏·计算机外设
zhchyun20084 天前
# 【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(06)
ui·unity·游戏引擎
Behaviour4 天前
Unity游戏HybridCLR 热更新接入实战
游戏·unity·游戏引擎
LONGZETECH4 天前
新能源汽车动力电池实训教学痛点与虚拟仿真技术解决方案
c语言·3d·unity·架构·汽车·汽车教学软件