Unity3d--角色与UI混合显示--实现角色旋转触控
Posted 穿迷彩服的鲨鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3d--角色与UI混合显示--实现角色旋转触控相关的知识,希望对你有一定的参考价值。
提示:素材来源网络,侵权必删
角色与UI混合显示--实现角色旋转触控
前言
角色与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);
}
}
}
}
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
}
}
3.信息设置
1.设置相机标签和打开关闭按钮事件
2.
五、效果
总结
以上是关于Unity3d--角色与UI混合显示--实现角色旋转触控的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D实战RPG黑暗之光Scene2:创建角色选择场景