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;
         }
     }




 }
相关推荐
mxwin2 小时前
Unity URP 下 Shader 变体 (Variants):multi_compile 与 shader_feature的关键字管理及变体爆炸防控策略
unity·游戏引擎
RReality4 小时前
【Unity Shader URP】全息扫描线(Hologram Scanline)源码+脚本控制
ui·unity·游戏引擎·图形渲染
渔民小镇5 小时前
一次编写到处对接 —— 为 Godot/Unity/React 生成统一交互接口
java·分布式·游戏·unity·godot
RReality18 小时前
【Unity Shader URP】序列帧动画(Sprite Sheet)实战教程
unity·游戏引擎
mxwin18 小时前
Unity URP 多线程渲染:理解 Shader 变体对加载时间的影响
unity·游戏引擎·shader
呆呆敲代码的小Y20 小时前
【Unity工具篇】| 游戏完整资源热更新流程,YooAsset官方示例项目
人工智能·游戏·unity·游戏引擎·热更新·yooasset·免费游戏
nainaire20 小时前
自学虚幻引擎记录1
游戏引擎·虚幻
破烂儿1 天前
TMUX历史输出滚动查看全攻略(原生快捷键 + 鼠标配置优化)
服务器·学习·计算机外设
想你依然心痛1 天前
HarmonyOS 5.0游戏开发实战:构建高性能2D休闲游戏引擎与 monetization 系统
华为·游戏引擎·harmonyos