Unity密室逃脱制作 C#

这篇具有很好参考价值的文章主要介绍了Unity密室逃脱制作 C#。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先创建一个项目

unity密室逃脱,unity,游戏引擎

进入场景后

unity密室逃脱,unity,游戏引擎

 导入资源场景sceneunity密室逃脱,unity,游戏引擎

 unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

 创建一个资源包Resources

unity密室逃脱,unity,游戏引擎

 在Resources包下创建子包Meshs

unity密室逃脱,unity,游戏引擎

将场景scene拖至Meshs包下

unity密室逃脱,unity,游戏引擎

再将Materials拖拽至Resources包下

unity密室逃脱,unity,游戏引擎

 将texture改名为Textures

unity密室逃脱,unity,游戏引擎

之后将场景拖拽至场景中

 unity密室逃脱,unity,游戏引擎

 在材质包Materials下全选所有物体ctrl + a

unity密室逃脱,unity,游戏引擎

在右侧Inspector属性面板下修改着色器Shader

修改为Autodesk Interavtive

unity密室逃脱,unity,游戏引擎

点击场景 勾选右侧static静态

unity密室逃脱,unity,游戏引擎 在Textures包下创建子包HDR

unity密室逃脱,unity,游戏引擎

点击Assets将hdr和moonless移至HDR子包下

unity密室逃脱,unity,游戏引擎

在HDR子包下创建一个材质

unity密室逃脱,unity,游戏引擎

首先看一下hdr右侧Inspector属性面板下存放位置,我们看到了在Cubemap下

unity密室逃脱,unity,游戏引擎

 然后我们点击材质点击Shader搜索Cubemap

unity密室逃脱,unity,游戏引擎

这时候我们看到下面的右侧有个槽,我们将hdr点击进去

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

我们运行项目会发现房屋里面出现很多白色,造成这种原因是光线太强了, 我们需要在场景中找到所有光源物体选中后调节至1

unity密室逃脱,unity,游戏引擎

 unity密室逃脱,unity,游戏引擎

接下来Meshs子包下 导入角色资源

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎 将T-Pose拖拽至场景中

unity密室逃脱,unity,游戏引擎

 我门发现房子的墙壁使白色的

unity密室逃脱,unity,游戏引擎

我们在Materials子包下找到墙壁

unity密室逃脱,unity,游戏引擎

 看右侧属性面板

在点击Textures子包下找到墙壁发现有四个贴图

unity密室逃脱,unity,游戏引擎

 将贴图拖拽至右侧属性栏中

unity密室逃脱,unity,游戏引擎

点击渲染灯光

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

搜索添加hdr后场景更改为

unity密室逃脱,unity,游戏引擎 Hierarchy面板下选择Type

unity密室逃脱,unity,游戏引擎

搜索MeshRenderer

unity密室逃脱,unity,游戏引擎

 全选物体添加碰撞器

unity密室逃脱,unity,游戏引擎

 unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

在场景中添加一个组件Light

unity密室逃脱,unity,游戏引擎

修改其属性面板

unity密室逃脱,unity,游戏引擎

 在Character子包下创建Animator Controller动画控制器

unity密室逃脱,unity,游戏引擎

 修改名字为PlayerCotroller并且点击

unity密室逃脱,unity,游戏引擎

将Standing拖拽至动画器中并且改名为Idle

unity密室逃脱,unity,游戏引擎 再将以下三个动画器添加并且依次命名

 unity密室逃脱,unity,游戏引擎

接下来创建连线

unity密室逃脱,unity,游戏引擎

在Parameters下添加bool

unity密室逃脱,unity,游戏引擎

添加以下变量

unity密室逃脱,unity,游戏引擎

 设置连线

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎 给人物配置着色

unity密室逃脱,unity,游戏引擎

接下来对角色完全解压缩

unity密室逃脱,unity,游戏引擎

 将角色拖拽至预制体后删掉,并修改人物名字Player

unity密室逃脱,unity,游戏引擎

 unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

 之后再拖回场景中

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

 取消掉所有动画器连线的 has

将主摄像机放在Player下并归零坐标

unity密室逃脱,unity,游戏引擎

创建脚本

unity密室逃脱,unity,游戏引擎

添加一下代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public static class AnimatorList
{
    public static int IsIdle = Animator.StringToHash("isIdle");
    public static int IsWalk = Animator.StringToHash("isWalk");
    public static int IsRun = Animator.StringToHash("isRun");
    public static int IsDying = Animator.StringToHash("isDying");
}

public class Player : MonoBehaviour
{
    private CharacterController _characterController;
    private Animator _animator;

    public int health = 100;

    public float velocity = 0.5f;

    private void Awake()
    {
        _characterController = GetComponent<CharacterController>();
        _animator = GetComponent<Animator>();
    }

    void Start()
    {
        _animator.SetBool(AnimatorList.IsIdle, true);
    }

    void Update()
    {
        Move();
        MoveByAnimation();
    }

    private void Move()
    {
        var vertical = transform.forward * Input.GetAxis("Vertical") * velocity * Time.deltaTime;
        var horizontal = transform.right * Input.GetAxis("Horizontal") * velocity * Time.deltaTime;

        Vector3 gravity = Vector3.zero;

        if (!_characterController.isGrounded)
            gravity = transform.up * -9.8f * Time.deltaTime;

        _characterController.Move(horizontal + vertical + gravity);
    }

    private void MoveByAnimation()
    {
        if(!_animator.GetBool(AnimatorList.IsWalk) && !_animator.GetBool(AnimatorList.IsRun))
        {
            _animator.SetBool(AnimatorList.IsIdle, true);
        }

        if(Input.GetAxis("Vertical") != 0 && !_animator.GetBool(AnimatorList.IsRun))
        {
            _animator.SetBool(AnimatorList.IsIdle, false);
            _animator.SetBool(AnimatorList.IsWalk, true);
            _animator.SetFloat("velocity", Input.GetAxis("Vertical"));
        }

        if (_animator.GetFloat("velocity") < 0.2f)
        {
            _animator.SetBool(AnimatorList.IsIdle, true);
            _animator.SetBool(AnimatorList.IsWalk, false);
            _animator.SetBool(AnimatorList.IsRun, false);
        }

        if (Input.GetKeyDown(KeyCode.LeftShift))
        {
            _animator.SetBool(AnimatorList.IsIdle, false);
            _animator.SetBool(AnimatorList.IsWalk, false);
            _animator.SetBool(AnimatorList.IsRun, true);
        }

        if (Input.GetKeyUp(KeyCode.LeftShift))
        {
            _animator.SetBool(AnimatorList.IsRun, false);
        }
    }
}
创建脚本

unity密室逃脱,unity,游戏引擎

添加一下代码

using UnityEngine;

namespace InstanceClasses.GamePlay
{
    public class MouseController : MonoBehaviour 
    {
        public Transform playerBody;

        public float mouseSensitivity = 100f;

        public float xRotation;

        private void Start()
        {
            playerBody = transform.parent;
            Cursor.lockState = CursorLockMode.Locked;
        }

        private void FixedUpdate()
        {
            float mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * mouseSensitivity;
            float mouseY = Input.GetAxis("Mouse Y") * Time.deltaTime * mouseSensitivity;

            xRotation -= mouseY;
            xRotation = Mathf.Clamp(xRotation, -90, 90);

            transform.localRotation = Quaternion.Euler(xRotation, 0, 0);
            playerBody.Rotate(Vector3.up, mouseX);

            playerBody.localRotation = Quaternion.Euler(0, transform.rotation.eulerAngles.y, 0);
        }

    }
}

 接下来代码绑定unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

将动画器放至unity密室逃脱,unity,游戏引擎

 unity密室逃脱,unity,游戏引擎

在场景中找到所有光源

调节面板属性

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎  

 目前可以完成通过键盘方向键和鼠标场景移动转换视角

接下来我们为屏幕设计一个UI目标点,为了拾取道具

首先创建一个UI的Canvas

unity密室逃脱,unity,游戏引擎

 再在Canvals下创建一个Panal

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎 点击Game界面

unity密室逃脱,unity,游戏引擎

 修改Pannal名为HUDPannal

 unity密室逃脱,unity,游戏引擎

再在HUDPannal下创建一个Image中心点

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎 将中心方块改成中心点

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎 修改颜色

unity密室逃脱,unity,游戏引擎

 修改大小

unity密室逃脱,unity,游戏引擎

 在HUDPannal下再创建个Pannal

unity密室逃脱,unity,游戏引擎

 修改Pannal为PlayerInformation

 unity密室逃脱,unity,游戏引擎

修改PlayerInformation,点击PlayerInformation,再点击右侧瞄点

unity密室逃脱,unity,游戏引擎

修改属性面板

unity密室逃脱,unity,游戏引擎

点击左侧

unity密室逃脱,unity,游戏引擎

将左上角设置为零点

unity密室逃脱,unity,游戏引擎 再调节x,y的位置让面板在左上角全部显示出来

unity密室逃脱,unity,游戏引擎

再次创建

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

在创建slider作为血条

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎 添加一个水平分化

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎 修改对齐方式

unity密室逃脱,unity,游戏引擎

修改血条长度

unity密室逃脱,unity,游戏引擎 再次创建Image修改Image形状

unity密室逃脱,unity,游戏引擎

修改名称

unity密室逃脱,unity,游戏引擎

给Mask图像添加Mask组件

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎 修改Mask形状即可修改

unity密室逃脱,unity,游戏引擎

修改血条颜色将空白设置为白色或者粉色

unity密室逃脱,unity,游戏引擎 接下来点填充颜色设置为红色

unity密室逃脱,unity,游戏引擎

回到slider就可以调节血量了

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

修改血量最大值

unity密室逃脱,unity,游戏引擎 修改名字

unity密室逃脱,unity,游戏引擎

删除PlayerInformation组件里的Image

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

再删除HUDPannal里的Image

unity密室逃脱,unity,游戏引擎

可以看到Pannal消失了

 接下来我们整理代码文件,

将以下代码存放在新建的GamePlays下 

unity密室逃脱,unity,游戏引擎

 再新建文件夹

unity密室逃脱,unity,游戏引擎

 在UIPannals文件夹下新建脚本文件HUDPanel

将以下代码复制

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HUDPanel : MonoBehaviour
{
    public Image Icon;

    public Slider Health;

    public Player player;

    private void Start()
    {
        var playerObj = GameObject.FindGameObjectWithTag("Player");
        player = playerObj.GetComponent<Player>();

        Icon.sprite = Resources.Load<Sprite>("Textures/UITexture/ActorIcon");
    }

    // Update is called once per frame
    void Update()
    {
        if (Health != null)
            Health.value = player.health;
    }
}
将对象绑定在脚本文件上

最后将Player对象Tag标签设置成Player

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

 创建UITexture文件包存放UI头像

unity密室逃脱,unity,游戏引擎

将头像拖拽至UITexture文件中

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

将图片设置为可变精灵

unity密室逃脱,unity,游戏引擎 拖拽即可完成头像设置

将Textures拖拽至Resources包下并查看路径是否与

HUDPannal代码是否相同

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎unity密室逃脱,unity,游戏引擎

运行即可完成

unity密室逃脱,unity,游戏引擎

将场景中一块物体ctrl + d并且移动至指定地点设置为陷阱

unity密室逃脱,unity,游戏引擎

移除该物体本身碰撞器

unity密室逃脱,unity,游戏引擎 unity密室逃脱,unity,游戏引擎

添加Box Collider

unity密室逃脱,unity,游戏引擎

创建一个脚本文件夹存放陷阱

unity密室逃脱,unity,游戏引擎 在文件夹中创建脚本文件Trap_1

将以下代码复制

using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEngine;

public class Trap : MonoBehaviour
{
    public GameObject arrowPrefab;
    private GameObject[] arrowPoints = new GameObject[6];
    private bool isActive;
    private void Start()
    {
        int sub = 0;
        foreach (var point in transform.Find("Trap/knifePoint").GetComponentsInChildren<Transform>())
        {
            {
                if (transform != point)
                {
                    arrowPoints[sub] = point.gameObject;
                    sub++;
                }
            }
        }


    }
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            Debug.Log("Running");
            for (int i = 0; i < 5; i++)
            {
                Instantiate(arrowPrefab, arrowPoints[i].transform.position + new Vector3(0, 0.5f, 0), Quaternion.identity);
            }
            isActive = true;
        }
    }

}
unity密室逃脱,unity,游戏引擎

注意代码中

unity密室逃脱,unity,游戏引擎 注意:查找只能从子物体开始找 

将XJ_1名改为Trap 

给Trap添加一个空的父物体

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

将Trap的Box Collider去掉

unity密室逃脱,unity,游戏引擎

 挂载到GameObject父物体上

unity密室逃脱,unity,游戏引擎

清零父物体

unity密室逃脱,unity,游戏引擎

设置碰撞器大小

unity密室逃脱,unity,游戏引擎

 创建粒子特效

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

其面板可修改

unity密室逃脱,unity,游戏引擎

在爱给网或者cgmodel.com下载fbx图片粘贴在Meshs下

unity密室逃脱,unity,游戏引擎

将刀拖拽至场景中

并移动位置

unity密室逃脱,unity,游戏引擎

修改刀名字为knife

将knife放进预制体后在场景中删除

unity密室逃脱,unity,游戏引擎 调节刀的属性面板将刀旋转180°修改位置后完全解压缩

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

再创建子物体

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

依次创建

 unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

  给制体添加一个Mesh Collider

unity密室逃脱,unity,游戏引擎

打开触发器的isTrigger

unity密室逃脱,unity,游戏引擎

 取消Trap属性面板的Contribute Globall lll

unity密室逃脱,unity,游戏引擎

运行即可走到触发器附近触发触发器

unity密室逃脱,unity,游戏引擎

接下来用一种简单方式发生粒子碰撞使角色扣血

首先创建一个粒子

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

右侧属性面板开启unity密室逃脱,unity,游戏引擎 

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎  

接着创建一个c#脚本DesPlay

 unity密室逃脱,unity,游戏引擎

 代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DesPlay : MonoBehaviour
{
    public Player player;


    private void OnParticleCollision(GameObject other)
    {
        Debug.Log("粒子发生碰撞");
        if (other.gameObject.tag == "Player")
        {
            Debug.Log("粒子碰撞玩家");
            player.health -= 1f;
        }
       if(player.health == 0)
           Destroy(other.gameObject);
    }
}
 


将代码绑定在粒子上

unity密室逃脱,unity,游戏引擎

将player对象绑定至DesPlayer脚本上

运行

unity密室逃脱,unity,游戏引擎

陷阱制作完成,接下来做取钥匙开门,逃脱 

首先我们再爱给网上下载一个钥匙的fbx资源

unity密室逃脱,unity,游戏引擎

 之后拖进场景摆放该位置

unity密室逃脱,unity,游戏引擎

 完全解压缩

unity密室逃脱,unity,游戏引擎

添加碰撞器

unity密室逃脱,unity,游戏引擎

开启isTrigger

unity密室逃脱,unity,游戏引擎 在创建c#脚本BoxKey

unity密室逃脱,unity,游戏引擎

将以下代码复制

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoxKey : MonoBehaviour
{
    public int id;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
unity密室逃脱,unity,游戏引擎

将BoxKey标签改成Item

unity密室逃脱,unity,游戏引擎

 将Player代码修改成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Scripting.APIUpdating;
public static class AnimatorList
{

    public static int IsIdle = Animator.StringToHash("isIdle");
    public static int IsWalk = Animator.StringToHash("isWalk");
    public static int IsRun = Animator.StringToHash("isRun");
    public static int IsDying = Animator.StringToHash("isDying");
}

public class Player : MonoBehaviour
{
    public GameObject winPanel;

    private CharacterController _characterController;
    private Animator _animator;
    public float velocity = 3f;
    public float health = 100;
    public int package = 0;
    public int condition = 10;

    private void Awake()
    {

        _characterController = GetComponent<CharacterController>();
        _animator = GetComponent<Animator>();
    }


    void Start()
    {
        _animator.SetBool(AnimatorList.IsIdle, true);
    }


    void Update()
    {
        Move();
        MoveByAnimation();
        PickUpItem();
        OpenDoor();
    }
    private void Move()
    {
        var vertical = transform.forward * Input.GetAxis("Vertical") * velocity * Time.deltaTime;
        var horizontal = transform.right * Input.GetAxis("Horizontal") * velocity * Time.deltaTime;
        Vector3 gravity = Vector3.zero;
        if (!_characterController.isGrounded)
            gravity = transform.up * -9.8f;

        _characterController.Move(horizontal + vertical + gravity);
        /*Vector3 moveVector;   
        Vector3 moveVector;
        moveVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
       
        Vector3 gravity = Vector3.zero;
        if (!_characterController.isGrounded)
            gravity = transform.up * 9.8f;
        moveVector += gravity;
        moveVector *= Time.deltaTime;
        _characterController.Move(moveVector);*/
    }
    //计算移动方向
    private void MoveByAnimation()
    {
        if (!_animator.GetBool(AnimatorList.IsWalk) && !_animator.GetBool(AnimatorList.IsRun))
        {
            _animator.SetBool(AnimatorList.IsIdle, true);
        }
        if (Input.GetAxis("Vertical") != 0 && !_animator.GetBool(AnimatorList.IsRun))
        {
            _animator.SetBool(AnimatorList.IsIdle, false);
            _animator.SetBool(AnimatorList.IsWalk, true);
            _animator.SetFloat("velocity", Input.GetAxis("Vertical"));

        }
        if (_animator.GetFloat("velocity") < 0.2f)
        {
            _animator.SetBool(AnimatorList.IsIdle, true);
            _animator.SetBool(AnimatorList.IsWalk, false);
            _animator.SetBool(AnimatorList.IsRun, false);
        }
        if (Input.GetKeyDown(KeyCode.LeftShift))
        {
            _animator.SetBool(AnimatorList.IsIdle, false);
            _animator.SetBool(AnimatorList.IsWalk, false);
            _animator.SetBool(AnimatorList.IsRun, true);
        }
        if (Input.GetKeyDown(KeyCode.LeftShift))
        {

            _animator.SetBool(AnimatorList.IsRun, false);
        }
    }
    public void OpenDoor()
    {
        if (Input.GetKeyUp(KeyCode.E))
        {
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out var hit))
            {
                if (hit.collider.CompareTag("Door"))
                {
                    if (package == condition && package != 0)
                    {


                        winPanel.SetActive(true);
                        //    Time.timeScale = 0.1f;
                        StartCoroutine(OnGameEnd());
                    }
                    //胜利
                }
            }
        }
    }
    public void PickUpItem()
    {
        if (Input.GetKeyUp(KeyCode.E))
        {
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out var hit))
            {
                if (hit.collider.CompareTag("Item"))
                {
                    package += hit.collider.GetComponent<BoxKey>().id;
                    Destroy(hit.collider.gameObject);
                }
            }
        }
    }

    public IEnumerator OnGameEnd()
    {
        yield return new WaitForSeconds(3);
        SceneManager.LoadScene("界面");
    }
}

之后将代码绑定在BoxKey上

unity密室逃脱,unity,游戏引擎

运行即可拾取药匙

unity密室逃脱,unity,游戏引擎

对准箱子,按E后,Package从0 变成 1 ,物品消失 

 药匙制作完成,

接下来我们制作触碰门就显示胜利界面

首先选中门,设置Tag为Door

unity密室逃脱,unity,游戏引擎

接下来我们在Canvas下再创建个Panel

 unity密室逃脱,unity,游戏引擎

起名为WinPanel

unity密室逃脱,unity,游戏引擎

再在Panel面板上创建文字

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

 将WinPanel面板藏起来

unity密室逃脱,unity,游戏引擎

将WinPanel绑定在Player脚本对象上

unity密室逃脱,unity,游戏引擎 运行即可跑通游戏 

 按E拾取宝箱后面向门按E即可胜利unity密室逃脱,unity,游戏引擎

 最后我们添加一个入口场景界面

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

进入入口场景

创建Pannel后,下载界面资源,存到Textures包下

unity密室逃脱,unity,游戏引擎

将图片设置为精灵Sprite

拖拽至Panel下,调节颜色与透明度unity密室逃脱,unity,游戏引擎 在Panel面板下创建一个V L Group,使上下分两个面板水平分布unity密室逃脱,unity,游戏引擎

 unity密室逃脱,unity,游戏引擎

在Panel下再创建两个Panel

unity密室逃脱,unity,游戏引擎

将两个Panel都设置成1920 * 540

unity密室逃脱,unity,游戏引擎

修改三个Panel名字 

 unity密室逃脱,unity,游戏引擎

 在LogoPanel下创建个Image

unity密室逃脱,unity,游戏引擎 在网上下载Logo图片

使用精灵存放在Image中,并且调节Image大小颜色,透明度

unity密室逃脱,unity,游戏引擎

修改居中

unity密室逃脱,unity,游戏引擎 接下来创建一个按钮

unity密室逃脱,unity,游戏引擎

 修改颜色框框改灰色,字体改白色

unity密室逃脱,unity,游戏引擎创建两个shadow

unity密室逃脱,unity,游戏引擎 修改值和颜色

unity密室逃脱,unity,游戏引擎 创建一个c#脚本Button unity密室逃脱,unity,游戏引擎

将以下代码复制

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class Butten : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    public Shadow[] shadows;
    public Vector2[] shadowDrigin;
    public void OnPointerEnter(PointerEventData eventData)
    {
        foreach (var shadow in shadows)
        {
            shadow.effectDistance = new Vector2();
        }
    }
    public void OnPointerExit(PointerEventData eventData)
    {
        int sub = 0;
        foreach (var shadow in shadows)
        {
            shadow.effectDistance = shadowDrigin[sub];
            sub++;
        }
    }
    private void Start()
    {
        shadows = GetComponents<Shadow>();
        shadowDrigin = new Vector2[shadows.Length];
        int sub = 0;
        foreach (Shadow shadow in shadows)
        {
            shadowDrigin[sub] = shadow.effectDistance;
            sub++;
        }
    }

}
将Button代码绑定在Button上

unity密室逃脱,unity,游戏引擎

即可完成运行后阴影效果

unity密室逃脱,unity,游戏引擎

unity密室逃脱,unity,游戏引擎

将Button拽成预制体

unity密室逃脱,unity,游戏引擎

最后将两个Panel下的Image隐藏或者移除组件

unity密室逃脱,unity,游戏引擎

创建一个c#脚本MainMenuPanel

unity密室逃脱,unity,游戏引擎

将以下代码复制

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class MainMenuPanel : MonoBehaviour
{
    private Transform _buttonPanel;

    private Button StartButton;
    private Button ExitButton;

    private void Start()
    {
        _buttonPanel = transform.Find("ButtonPanel");

        StartButton = _buttonPanel.Find("Button").GetComponent<Button>();
        //ExitButton = _buttonPanel.Find("ExitGame_btn").GetComponent<Button>();

        StartButton.onClick.AddListener(() => { SceneManager.LoadScene("SampleScene"); });
        //ExitButton.onClick.AddListener(() => { Application.Quit(); });

    }
}

 将代码绑定在MainMenuPanel

unity密室逃脱,unity,游戏引擎

接下来游戏打包

unity密室逃脱,unity,游戏引擎

按照次序存放两个场景点击buding即可打包游戏文章来源地址https://www.toymoban.com/news/detail-792391.html

到了这里,关于Unity密室逃脱制作 C#的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【unity】快速了解游戏制作流程-制作九宫格简单游戏demo

            hi~大家好呀!欢迎来到我的unity学习笔记系列~,本篇我会简单的记录一下游戏流程并且简单上手一个通过九宫格移动到指定位置的小游戏,话不多说,我们直接开始吧~                  本篇源自我看B站一位up主的视频所做的笔记,感兴趣的可以去看原视频哦

    2023年04月08日
    浏览(54)
  • Unity制作 小球吃金币 游戏

    工程源文件下载地址-百度网盘 1. 新建一个项目 2. 新建一个平面对象 3. 新建一个材质球 为材质球设置颜色 5. 将材质球拖拽赋值给平面 6.  创建立方体对象,拉伸至平面宽度 7. 再复制三个立方体、调整位置、添加材质,用四个调整过的立方体将平面围起来 8. 创建一个球体(

    2024年01月15日
    浏览(46)
  • Unity游戏开始界面制作教学

    第一步: 新建一个Scene 第二步: 在Scene里添加一个Canvas对象(在Hierarchy右键–UI–Canavas) 如何给添加开始按钮: 在Canvas右键–UI–Button 如何给按钮添加文字: Button的子对象Text的Text组件可以修改按钮上的文字 如何给按钮添加事件: Button对象的Button组件最下面有一个“Oncl

    2024年02月02日
    浏览(41)
  • 【unity demo】使用unity制作射击游戏demo (上)

    主要是安装unity对应的版本,并配置相应的ide,目前我用的是unity 2021.3.21。 通过edit-prefreneces面板,external tools选项中配置ide环境,自动使用vs code来打开工程中的代码文档。 即游戏设计文档(Game Design Document, GDD),我们需要预先对待实现的完整demo进行设计,包括5个部分:

    2024年02月08日
    浏览(63)
  • unity——小球酷跑游戏制作

    所有变量与物体名的命名原则都是见名知意 一、创建一个unity项目 二、Create所需3Dobject 1.Player 2.walls 三、添加属性 : 1.添加在Player上 a.添加Rigidbody组件 b.添加new script组件,并命名为PlayMove,代码如下: 2.添加到walls上 a.首先create empty将wall包含 b.在Wall上添加new script组件,代码

    2023年04月24日
    浏览(37)
  • unity制作FPS射击游戏

    角色动作方面包括行走、奔跑、跳跃、武器切换、弹夹更换、武器展示、弹壳抛出效果、射击效果、全自动与半自动射击效果、瞄准效果、后坐力效果、弹痕效果等多种动作。 非玩家角色(NPC)具备多个动画状态,包括固定路径巡逻、行走、奔跑、寻路攻击等多种行为。 太

    2024年02月08日
    浏览(55)
  • Unity学习之坦克游戏制作(1)开始场景的制作

    相当于开始界面,想怎么创建就怎么创建 我最终模拟的效果 这部分不关键,关键的是创建可用来装载脚本的button 这部分感兴趣的可以去看我博客的GUI部分,但建议大家把学GUI的时间拿来学UGUI 导入预设体 Root 创建一格Label组件作为标题 这部分也可以自己创建 同时创建四个按

    2024年01月22日
    浏览(48)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(72)
  • unity制作一款塔防游戏

    关键技术: 寻路系统 生成怪物算法 粒子系统 line renderer制作追踪射线 相机视角移动、放大 炮弹追踪算法 粒子特效 按钮动画制作 设置几个基准点,用于偏移方向 定义一个Move方法 判断当前行数是否超过位置数组的长度,如果是则直接返回 根据当前位置与目标位置计算出移

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包