unity漫游场景搭建
首先在场景中创建中立方体(墙),平面,胶囊(玩家),并缩放大小拖动到合适的位置。

导入自己需要的艺术图片并设置图片为2D和UI模式。

创建材质球,将导入的图片拖动到AIbedo上(反射率)。

再将材质球拖入到墙壁的Quad(平面)上,艺术照片被贴到了墙面上。

刚刚我们放置的胶囊作为玩家,需在里面放置一台摄像机以使得画面跟随玩家视角移动。
在场景中创建画布Canvas,在画布下创建两个按钮。


打开2D模式,查看按钮位置。

设置画布大小,调整为1920,1080。

重新设置一下按钮的大小。
创建以下代码挂载到player使得player可以用W/A/S/D进行移动控制。
using UnityEngine;
public class SimplePlayerController : MonoBehaviour
{
// 移动速度
public float moveSpeed = 5f;
// 每次旋转的角度(30度)
public float rotationAmount = 30f;
// 旋转速度(平滑过渡)
public float rotationSpeed = 5f;
// 是否正在旋转
private bool isRotating = false;
// 目标旋转角度
private float targetRotation;
void Update()
{
// 处理移动
float horizontal = Input.GetAxis("Horizontal"); // A/D
float vertical = Input.GetAxis("Vertical"); // W/S
Vector3 direction = transform.right * horizontal + transform.forward * vertical;
transform.position += direction * moveSpeed * Time.deltaTime;
// 如果正在旋转,平滑过渡
if (isRotating)
{
float currentRotation = Mathf.LerpAngle(transform.eulerAngles.y, targetRotation, Time.deltaTime * rotationSpeed);
transform.rotation = Quaternion.Euler(0, currentRotation, 0);
// 如果旋转接近目标角度,停止旋转
if (Mathf.Abs(transform.eulerAngles.y - targetRotation) < 0.1f)
{
isRotating = false;
}
}
}
// 按下左按钮旋转30度
public void RotateLeft()
{
// 更新目标旋转角度
targetRotation = transform.eulerAngles.y - rotationAmount;
isRotating = true;
}
// 按下右按钮旋转30度
public void RotateRight()
{
// 更新目标旋转角度
targetRotation = transform.eulerAngles.y + rotationAmount;
isRotating = true;
}
}
代码中的这些参数设置的是初始默认值,我们可以直接在Inspect组件处进行修改。

注意调节主摄像机使得游戏界面显示合适。

还可以通过打开 Unity 编辑器,进入 Edit > Project Settings > Input Manager来设置。

将player拖动到Button的On click()上,并设置RotateLeft()属性。同理右边按钮也一样。这样我们在player挂载的代码可以生效,启动游戏后可以进行旋转画面。

接下来设置点击艺术画,弹出介绍。
重新创建一个画布,其下再创建一个Image和Button。

将介绍的图像拖动到Image的源图像下。

创建两个代码
第一个代码的作用是当点击艺术画时,弹出详细介绍。
PaintingInteraction代码:
using UnityEngine;
public class PaintingInteraction : MonoBehaviour
{
public GameObject artInfoPanel; // 用来存放 UI 面板
void Start()
{
// 确保游戏开始时 UI 面板是隐藏的
if (artInfoPanel != null)
{
artInfoPanel.SetActive(false);
}
}
void OnMouseDown()
{
// 调试信息
Debug.Log("浮世绘被点击了!");
// 如果 UI 面板被关闭,则打开它
if (artInfoPanel != null && !artInfoPanel.activeSelf)
{
artInfoPanel.SetActive(true);
}
}
}
将该代码拖动到墙面画布Quad上。

再将Canvas拖动到脚本中。

这样,当我们点击画作时,就会出现刚刚创建的画布(换成解说的图片)。

第二个代码的作用是关闭艺术画的详细介绍。
ArtInfoPanelController代码:
using UnityEngine;
public class ArtInfoPanelController : MonoBehaviour
{
public GameObject artInfoPanel;
public void ClosePanel()
{
if (artInfoPanel != null)
{
Debug.Log("关闭面板");
artInfoPanel.SetActive(false); // 隐藏面板
}
else
{
Debug.LogWarning("ArtInfoPanel 未正确分配!");
}
}
}
将关闭的代码脚本挂载到Image上,

再将Image拖动到button上。

多复制几份同样的场景替换不同的艺术画就可以搭建一个虚拟美术馆啦。