unity实现UI元素跟随3D物体

本文实例为大家分享了unity实现UI元素跟随3D物体的具体代码,供大家参考,具体内容如下

在Canvas不同的渲染模式(RenderMode)下实现UI跟随3D物体

Canvas.RenderMode为Screen Space-Overlay

利用WorldToScreenPoint(worldPos)将物体的世界坐标转换成屏幕坐标,实时更新UI的坐标:

using UnityEngine;
using System.Collections;

public class FollowWorldObj : MonoBehaviour {
 [SerializeField]
 GameObject worldPos;//3D物体(人物)
 [SerializeField]
 RectTransform rectTrans;//UI元素(如:血条等)
 public Vector2 offset;//偏移量

 // Update is called once per frame
 void Update () {
  Vector2 screenPos=Camera.main.WorldToScreenPoint(worldPos.transform.position);
  rectTrans.position = screenPos + offset;
 }
}

Canvas.RenderMode为Screen Space-Camera

利用RectTransformUtility.ScreenPointToLocalPointInRectangle换算出UI元素在Canvas的2D坐标:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class UI_FollowObj : MonoBehaviour {
 [SerializeField]
 Camera UI_Camera;//UI相机
 [SerializeField]
 RectTransform image;//UI元素
 [SerializeField]
 GameObject obj;//3D物体
 [SerializeField]
 Canvas ui_Canvas;
 // Update is called once per frame
 void Update () {
  UpdateNamePosition();
 }
 /// <summary>
 /// 更新image位置
 /// </summary>
 void UpdateNamePosition()
 {
  Vector2 mouseDown = Camera.main.WorldToScreenPoint(obj.transform.position);
  Vector2 mouseUGUIPos = new Vector2();
  bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(ui_Canvas.transform as RectTransform, mouseDown, UI_Camera, out mouseUGUIPos);
  if (isRect)
  {
   image.anchoredPosition = mouseUGUIPos;
  }
 }
}

效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • unity实现鼠标跟随(ITween)

    本文实例为大家分享了unity实现鼠标跟随的具体代码,供大家参考,具体内容如下 需求:当鼠标放到cube上,然后移开鼠标cube会跟随鼠标移动. 实现过程: 首先在场景里新建一个plane(白色)和cube(黑色) ,这个cube就是用来跟随鼠标的物体,并且给cube添加标签tile. 然后把下面移动代码拖到相机上. 代码如下: using UnityEngine; using System.Collections; //鼠标跟随 public class linearmove : MonoBe

  • unity实现摄像头跟随

    代码很简单,这里就不多废话了,直接奉上代码 using UnityEngine; using System.Collections; public class FllowTarget : MonoBehaviour { public Transform character; //摄像机要跟随的人物 public float smoothTime = 0.01f; //摄像机平滑移动的时间 private Vector3 cameraVelocity = Vector3.zero; private

  • unity3D实现三维物体跟随鼠标

    本文实例为大家分享了unity3D实现三维物体跟随鼠标的具体代码,供大家参考,具体内容如下 效果图: 1.创建一个三维物体Cylinder圆柱体 Target 2.创建词汇表Yellow材质球 3.将材质球挂载到Target物体上 4.创建脚本MouseMove.cs MouseMove.cs代码 using UnityEngine; /* 让物体完全跟随鼠标 */ public class MouseMove : MonoBehaviour { [Header("主相机")] [To

  • Unity UI或3D场景实现跟随手机陀螺仪的晃动效果

    需求 当游戏显示3d场景及其UI的时候.玩家左右晃动手机的时候,UI界面会随之左右偏移.上下晃动的时候,3D场景会随之上下偏移.手机停止晃动的时候,如若偏移的UI或场景,停顿一会后自动恢复到初始默认位置. 分析 首先本文功能应对的是横屏游戏(竖屏游戏的话也差不多一样,大家自己拓展下),假设当我们拿起手机玩游戏,手机会有四个部位,分别为左手拿的左手边和右手拿的右边,以及屏幕内容的上方和下方(下文中会用左手边,右手边,上方,下方来描述).每个部位的倾斜都会造成UI或场景的偏移效果 我们可以先用一个枚

  • unity实现UI元素跟随3D物体

    本文实例为大家分享了unity实现UI元素跟随3D物体的具体代码,供大家参考,具体内容如下 在Canvas不同的渲染模式(RenderMode)下实现UI跟随3D物体 当Canvas.RenderMode为Screen Space-Overlay时 利用WorldToScreenPoint(worldPos)将物体的世界坐标转换成屏幕坐标,实时更新UI的坐标: using UnityEngine; using System.Collections; public class FollowWorl

  • unity实现鼠标拖住3D物体

    本文实例为大家分享了unity实现鼠标拖住3D物体的具体代码,供大家参考,具体内容如下 把该脚本直接挂在要拖拽的物体上即可 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ModelDrages : MonoBehaviour { //发射射线的摄像机 private Camera cam; //射线碰撞的物体 private GameObject go; //

  • Unity实现鼠标拖动3D物体

    这篇博客实现一个小功能,通过鼠标拖动3D物体.我们知道,如果是拖动 UIUG 的控件的话,它是有接口可以使用的.但是3D物体就没有可直接使用的接口(或者说我没找到?),就需要我们自己写代码.既然如此,那我们就来实现以下这个功能. 首先先创建一个这样的场景 创建两个 cube 只是为了看清效果.然后给 摄像机添加一个 DragObject 脚本 using UnityEngine; using System.Collections; public class DragObject : MonoBe

  • Unity 从UI中拖拽对象放置并拖动效果 附demo

    需求:点击UI,在场景中生成3D对象,对象跟随鼠标移动,放置后可再次拖拽对象,改变其位置.做了一个小Demo,如下图所示: 实现大致思路: 射线碰撞检测 对象空间坐标变换(世界坐标->屏幕坐标.屏幕坐标->世界坐标) 首先为要生成3D对象的UI添加一个鼠标监听事件,脚本如下: SelectImage.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngin

  • Unity实现UI渐隐渐显效果

    本文实例为大家分享了Unity实现UI渐隐渐显效果的具体代码,供大家参考,具体内容如下 1.在UI对象上添加组件:CanvasGroup; 2.在对象上添加脚本:UI_FadeInFadeOut 脚本: 脚本信息: (Blocks Raycasts=true可以交互:Blocks Raycasts=false无法交互) using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summa

  • Unity接入百度AI实现通用物体和场景识别

    接口介绍: 可识别超过10万类常见物体和场景,接口返回大类及细分类的名称,并支持获取识别结果对应的百科信息:还可使用EasyDL定制训练平台,定制识别分类标签.广泛适用于图像或视频内容分析.拍照识图等业务场景. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是通用物体和场景识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 通用物体和场景识别 /// </s

  • java selenium 常见web UI 元素操作及API使用

    本篇介绍我们如何利用selenium 来操作各种页面元素 阅读目录 链接(link) 输入框 textbox 按钮(Button) 下拉选择框(Select) 单选按钮(Radio Button) 多选框 check box 链接(link) <div> <p>链接 link</p> <a href="www.cnblogs.com/tankxiao">小坦克</a> </div> 链接的操作 // 找到链接元素

  • Android编程处理窗口控件大小,形状,像素等UI元素工具类

    本文实例讲述了Android编程处理窗口控件大小,形状,像素等UI元素工具类.分享给大家供大家参考,具体如下: /** * 处理窗口控件大小,形状,像素等工具类 * * @author chen.lin * */ public class UITools { /** * 把像素转化为dp * * @param context * @param px * @return */ public static int px2dip(Context context, float px) { float d

  • PyQt 实现使窗口中的元素跟随窗口大小的变化而变化

    * 如果要实现这种视觉状态,那么就需要使用布局的方法. 创建一个控件后,在主窗口上右击选择布局(layout) Lay Out Horizontally : 纵向布局 Lay Out Vertically:横向布局 Lay Out Horizontally in Splitter: 纵向分裂式布局 Lay Out Vertically in Splitter:横向分裂式布局 Lay Out in a Grid: 网格布局 Lay Out in a Form Layout:表布局 Break La

  • Unity实现UI渐变效果

    本文实例为大家分享了Unity实现UI渐变效果的具体代码,供大家参考,具体内容如下 在做背包系统时,在提示面板中想实现的更加炫酷点,决定使用渐变效果来提示档次 渐变效果实现采用改变该UI的透明度来控制其显示和隐藏 在UI对象上添加Canvas Group组件 通过控制Alpha改变其透明度来控制显示和隐藏(Alpha=0隐藏:Alpha=1显示)(Blocks Raycasts=true可以交互:Blocks Raycasts=false无法交互) 添加一个脚本改在到该UI对象上 using U

随机推荐