当前位置:   article > 正文

Unity3d--角色与UI混合显示--实现角色旋转触控_unity 人物展示控制

unity 人物展示控制

提示:素材来源网络,侵权必删


前言

角色与UI混合显示:在角色信息界面显示3D角色
实现角色旋转触控:可控制其旋转

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、新建Test场景如下

示例:
准备一个3D人物;
给人物的Layer设置一个层级Player;
在这里插入图片描述

二、在Hierarchy面板下创建一个Camera

示例:
给Camera的Culling Mask设置为前面设置的人物Player层

在这里插入图片描述

三、准备角色信息界面

1.创建如下

在这里插入图片描述

2.创建一个Render Texture,命名为PlayerShow(随意命名)

在这里插入图片描述

3.把PlayerShow托给上面创建的RawImage的Texture

在这里插入图片描述

4.再把PlayerShow托给创建的相机下的Target Texture

在这里插入图片描述

四、代码控制

1.先创建一个PEListener脚本

using System;
using UnityEngine;
using UnityEngine.EventSystems;

namespace HKZ
{
    public class PEListener : MonoBehaviour, IPointerDownHandler, IDragHandler
    {
        public Action<PointerEventData> onClickDown;
        public Action<PointerEventData> onDrag;
        /// <summary>
        /// 拖拽
        /// </summary>
        /// <param name="eventData"></param>
        public void OnDrag(PointerEventData eventData)
        {
            if (onDrag != null)
            {
                onDrag(eventData);
            }
        }
        /// <summary>
        /// 按下
        /// </summary>
        /// <param name="eventData"></param>
        public void OnPointerDown(PointerEventData eventData)
        {
            if (onClickDown != null)
            {
                onClickDown(eventData);
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

2.在创建一个Test脚本

using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

namespace HKZ
{
    public class Test : MonoBehaviour
    {
        public RawImage imgChar;
        public Transform player;

        private Vector2 startPos;
        private Transform charCamTrsns;

        private void Awake()
        {
            gameObject.SetActive(false);//隐藏信息面板
            //设置人物信息面板相机
            if (charCamTrsns != null)
            {
                charCamTrsns.gameObject.SetActive(false);
            }
            RegTouchEvts();
        }
        //按下和拖动
        private void RegTouchEvts()
        {
            OnclickDown(imgChar.gameObject, (PointerEventData evt) =>
            {
                startPos = evt.position;//当前点击位置
                SetStartRotate();//记录开始角度
            });
            OnDrag(imgChar.gameObject, (PointerEventData evt) =>
            {
                float rotate = -(evt.position.x - startPos.x) * 0.4f;//每次托拽间隔距离
                SetPlayerRotate(rotate);//旋转
            });
        }

        //关闭页面
        public void ClickCloseBtn()
        {
            gameObject.SetActive(false);
        }
        //打开页面
        public void ClickOpenBtn()
        {
            if (charCamTrsns == null)
            {
                charCamTrsns = GameObject.FindGameObjectWithTag("CharShowCam").transform;
            }

            //设置人物展示相机相对位置
            charCamTrsns.localPosition = player.transform.position +
                player.transform.forward * 3.8f + new Vector3(0, 1.2f, 0);
            charCamTrsns.localEulerAngles = new Vector3(0, 180 +
                player.transform.localEulerAngles.y, 0);
            charCamTrsns.localScale = Vector3.one;
            charCamTrsns.gameObject.SetActive(true);

            gameObject.SetActive(true);
        }
        private float startRotate = 0;
        //记录当前人物位置
        private void SetStartRotate()
        {
            startRotate = player.transform.localEulerAngles.y;
        }
        //拖动后调用使其旋转
        private void SetPlayerRotate(float rotate)
        {
            player.transform.localEulerAngles = new Vector3(0,
                startRotate + rotate, 0);
        }
        #region ClickEvts
        private T GetOrAddComponent<T>(GameObject go)
            where T : Component
        {
            T t = go.GetComponent<T>();
            if (t == null)
            {
                t = go.AddComponent<T>();
            }
            return t;
        }
        private void OnclickDown(GameObject go, Action<PointerEventData> cb)
        {
            PEListener listener = GetOrAddComponent<PEListener>(go);
            listener.onClickDown = cb;
        }
        private void OnDrag(GameObject go, Action<PointerEventData> cb)
        {
            PEListener listener = GetOrAddComponent<PEListener>(go);
            listener.onDrag = cb;
        }
        #endregion
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99

3.信息设置

1.设置相机标签和打开关闭按钮事件

在这里插入图片描述

2.

在这里插入图片描述

五、效果

在这里插入图片描述

总结

在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/108876
推荐阅读
相关标签
  

闽ICP备14008679号