首页 > 其他分享 >[Kyana]小游戏之Unity推箱子

[Kyana]小游戏之Unity推箱子

时间:2024-03-15 18:56:52浏览次数:22  
标签:direction GetKeyDown Vector2 Unity 小游戏 Input Kyana KeyCode man

00|学到的内容

01|素材引入

02|地图配置

03|脚本编写

Man.cs

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

public class Man : MonoBehaviour
{
    Vector2 man_direction;
    // 自定义只在本脚本临时生效的名字,需要在编辑器选择具体生效层
    public LayerMask Man_Layermask;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow))
        {
            man_direction = Vector2.up;
        }
        if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.DownArrow))
        {
            man_direction = Vector2.down;
        }
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow))
        {
            man_direction = Vector2.left;
        }
        if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow))
        {
            man_direction = Vector2.right;
        }
        if (man_direction != Vector2.zero && IsManMovable(man_direction))
        {
            MoveMan(man_direction);
        }
        man_direction = Vector2.zero;
    }
    public void MoveMan(Vector2 man_direction)
    {
        transform.Translate(man_direction);
    }
    // 如果碰到箱子,箱子能动人才能动
    public bool IsManMovable(Vector2 man_direction)
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, man_direction, 1f, Man_Layermask);
        if (!hit)
        {
            return true;
        }
        else
        {
            // 需要确定到每一个实体
            if (hit.collider.gameObject.GetComponent<Box>() != null)
            {
                // 箱子动了人才能动,是哪个箱子动在MoveBox选择
                return hit.collider.GetComponent<Box>().MoveBox(man_direction);
            }
        }
        return false;
    }
}

Box.cs

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

public class Box : MonoBehaviour
{
    public LayerMask Box_Layermask;

    public bool MoveBox(Vector2 box_direction)
    {
        // 箱子是否撞墙,每个箱子都有这个脚本,transform就是相应箱子的
        RaycastHit2D hit = Physics2D.Raycast(transform.position, box_direction, 1f, Box_Layermask);
        if (!hit)
        {
            transform.Translate(box_direction);
            return true;
        }
        else 
        { 
            return false; 
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("target"))
        {
            this.GetComponent<SpriteRenderer>().color = Color.black;
            ////this.gameObject.SetActive(false);
        }
    }
}

04|出现的问题

标签:direction,GetKeyDown,Vector2,Unity,小游戏,Input,Kyana,KeyCode,man
From: https://www.cnblogs.com/kyana/p/18074479

相关文章

  • C语言小游戏:猜数字
    //猜数字#include<stdio.h>#include<stdlib.h>intmain(){ inta,x,y,n,b=0; printf("请输入范围1~n中n的值:"); scanf("%d",&n); a=rand()%n+1; while(1) { printf("请输入一个整数:"); scanf("%d",&x); if(x&......
  • 【Unity】Transform、Rigidbody、CharacterController移动
    前言在使用Unity开发的时候,移动是最最基础的一个需求,我来给大家简单的讲一下Unity中的几种常见的移动方法。1.Transform移动Transform移动就是修改物体的position①修改位置这里要注意:坐标分为世界坐标和本地坐标//将物体的世界坐标修改为(1,1,1)transform.posit......
  • 后端搞 Cocos 小游戏开发的三点避坑指北
    前言    先说一下我为什么要弄小游戏吧,首先无关工作,也无关兴趣,就只是想在副业里探索一下。没错就是做一个单机的小游戏上架到平台试一下水(薅广告费),不过说实话入局有点晚。    早在2019年的时候,我也折腾过白鹭引擎还弄过小demo,当时上架平台也简单。但是不知道为......
  • Unity3D 基于ECS的AOI设计与实现详解
    EntityComponentSystem(ECS)是Unity3D引擎中的一种编程模式,它将游戏对象分解为实体(Entity)和组件(Component),以提高游戏性能和可维护性。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。在游戏开发中,Are......
  • Unity3D 客户端网络角色的操作与行为分离设计详解
    在网络游戏中,客户端网络角色的操作与行为分离设计是非常重要的,它可以提高游戏的可维护性和扩展性,同时也可以提升游戏的性能和用户体验。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。在本文中,我们......
  • [数字华容道] Html+css+js 实现小游戏
    [数字华容道]Html+css+js实现小游戏效果图代码预览在线预览地址代码示例<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>数字华容道</title> <style> h1{ text-align:center; } .box{ border:......
  • Unity类银河恶魔城学习记录9-5 p93 Major stats and defensive stats源代码
    Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibiliCharacterStats.csusingSystem.Collections;usingSystem.Collections.Generic;using......
  • Unity3D外包团队 北京动点软件:优秀的软件公司 如何与客户建立长期合作关系
    2024年作为优秀的软件公司在确保客户满意方面需要采取一系列措施,以下是一些关键步骤:深入理解客户需求:首要任务是充分理解客户的需求。外包公司应该花时间与客户沟通,详细了解他们的业务目标、项目需求、预期结果以及任何特殊要求。这有助于建立良好的合作关系,并确保提供的......
  • GDPU unity游戏开发 滚动小球
      解锁你的游戏大门,适合小白入门看的,通过简单的实例大概了解unity的一些基本操作。常用快捷键 CtrlC/V/X/Z对应复制/粘贴/剪切/回退很多小白都惟手熟尔了,W物体对象的位置/平移/移动 ,E物体对象旋转,R物体对象缩放,Q/Alt中键用于场景的移动,右键/Alt左键用于场景的旋转,滚......
  • Unity3D 逻辑服的ECS框架设计架构与原理详解
    ECS(Entity-Component-System)是一种游戏开发架构模式,它将游戏对象划分为实体(Entity)、组件(Component)和系统(System),并通过数据驱动的方式来实现游戏逻辑。在Unity3D中,ECS框架的设计架构与原理是非常重要的,本文将详细介绍Unity3D逻辑服的ECS框架设计架构与原理,并给出技术详解以及代码实......