1、實現原理
左右分屏原理,左右屏內容左右方向存在些許偏差。通過左右相機,然后左側相機向左側偏移一點3cm,右側相機向右側屏偏移一定3cm,然后將左右相機渲染內容通過RenderTexture渲染到Canvas上面的左右RawImage上面。
2、實現具體步驟
2.1 左右相機處理
在主相機下面創建左右相機兩個Camera,左側相機向左側偏移一點3cm,右側相機向右側屏偏移一定3cm,如下
2.2 UI處理
將UI Canvas拖到主相機下面
設置RenderMode為Screen Space - Camera,然后設置距離
再將RenderMode設置為World Space。
2.3?將左右相機渲染內容重新渲染到Canvas上面
創建兩個Custom Render Texture,分別為CameraLeft、CameraRight,并設置Size
將左右相機的OutputTexture分別設置為CameraLeft、CameraRight
創建一個Canvas,下面創建兩個RawImage,分別占左側和右側一半,分別顯示左右相機的內容
RawImageLeft設置
RawImageRight設置
將CameraLeft、CameraRight的Render Texture拖拽給對應RawImage
2.4?鼠標位置處理
在Canvas層級最優先的下面創建一個RawImage,設置圖標樣式
編輯處理腳本FollowMouse,代碼如下,并進行如下設置
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;public class FollowMouse : MonoBehaviour
{public RectTransform mouseDown;public RectTransform canvas;public static FollowMouse1 instance;public GameObject obj;public Camera camera;public float screenMinX, screenMaxX, localMinX, localMaxX;public float screenMinY, screenMaxY, localMinY, localMaxY;public Texture2D cursorTexture;private void Start(){Cursor.lockState = CursorLockMode.Confined;Cursor.visible = false;}public void Awake(){instance = this;int width = Screen.width;int height = Screen.height;//Debug.Log(width);//Debug.Log(height);screenMaxX = width;screenMaxY = height;localMinX = -width / 2;localMaxX = width / 2;localMinY = -height / 2;localMaxY = height / 2;}void Update(){}void LateUpdate(){// ??è?êó±ê?ú?á??é?μ?????Vector3 mousePosition = Input.mousePosition;//Debug.Log(mousePosition);// ??êó±ê????×a???aUI×?±ê?μ??μ?????RectTransform rectTransform = mouseDown;//Vector2 localPosition = new Vector2();//float outputX = Remap(screenMinX, screenMaxX, localMinX, localMaxX, Input.mousePosition.x);//float outputY = Remap(screenMinY, screenMaxY, localMinY, localMaxY, Input.mousePosition.y);//rectTransform.localPosition = new Vector3(outputX, outputY, rectTransform.localPosition.z);//Vector2 hotSpot = new Vector2(cursorTexture.width / 2f, cursorTexture.height / 2f);//Cursor.SetCursor(cursorTexture, hotSpot, CursorMode.Auto);// ′′?¨ò???ó?óú′?′¢?á1?μ??òá?Vector2 localPosition;if(RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mousePosition, camera, out localPosition)){rectTransform.localPosition = new Vector3(localPosition.x, localPosition.y, rectTransform.localPosition.z);Vector2 hotSpot = new Vector2(cursorTexture.width / 2f, cursorTexture.height / 2f);Cursor.SetCursor(cursorTexture, hotSpot, CursorMode.Auto);}}float Remap(float a, float b, float A, float B, float value){float lerp = (value - a) / (b - a);float output = A + (B - A) * lerp;return output;}}