首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >unity模仿mc放方块

unity模仿mc放方块

作者头像
时光潜流
发布于 2022-12-26 11:51:41
发布于 2022-12-26 11:51:41
1K00
代码可运行
举报
文章被收录于专栏:博客专栏博客专栏
运行总次数:0
代码可运行

   今天实现了unity技术模仿mc放方块的功能,由于目前是锁定视角的,所以做起来相对来说比较简单。

   我实现的逻辑主要就以下的几步:

1. 获取左击事件的触发

2. 从相机向空间中该点发射射线发生碰撞,判断是否是基准方块类型(非方块地基无法放置方块)

3. 获取碰撞面,上面、侧面、前后面(方块中心点到空间点击点的向量,求与各面的垂直向量夹角,若夹角<45°,则该面被点中)

4. 创建实体方块并且移动位置。完工!

    代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void Update(){
	if (Input.GetMouseButtonUp(0)){
		Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
		RaycastHit hit;
		if (Physics.Raycast(ray, out hit) && (hit.transform.tag.Equals("box"))){
			Transform hitted = hit.transform;

			GameObject temp = newGOByPath(BOX_PATH);
			temp.transform.position = hitted.position;
			BoxCollider collider = temp.GetComponent<BoxCollider>();
			float realSize = collider.size.x / 2;

			Vector3 c2p = hit.point - hit.transform.position;
			float toRD = smallDegree(Vector3.Angle(c2p, Vector3.right));
			float toFD = smallDegree(Vector3.Angle(c2p, Vector3.forward));
			float toUD = smallDegree(Vector3.Angle(c2p, Vector3.up));

			if (toRD <= 45){
				temp.transform.Translate(realSize * Vector3.right);
				Instantiate(temp);
			} else if (toFD <= 45){
				temp.transform.Translate(realSize * Vector3.back);
				Instantiate(temp);
			}
			else if (toUD <= 45){
				temp.transform.Translate(realSize * Vector3.up);
				Instantiate(temp);
			} else{}
		}
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MMORPG游戏开发实战(一)
新建目录工程 关于工程的文件夹创建 代码注释修改 可以百度,这种代码不需要记忆。一大堆,直接用就可以 using System; using System.Collections; using System.IO; using UnityEngine; using UnityEditor; public class ScriptsCreat : UnityEditor.AssetModificationProcessor { public static void OnWillCreateAss
孙寅
2020/06/02
1K0
MMORPG游戏开发实战(一)
Unity3D-委托使用
C#中与预定义了一个委托类型Action 它默认可以指向一个没有返回值,没有参数的方法。
孙寅
2020/06/02
4480
Unity基础(14)-事件系统
1.Awake:用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如GameObject.FindWithTag()这样的函数搜索它们。每个游戏物体上的Awake以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息Awake总是在Start之前被调用。它不能用来执行协同程序。
孙寅
2020/06/02
1.8K0
Unity 基础 - 射线
Unity 中虚拟射线能够检测所碰撞到物体,使用 Physics 类的 Raycast 方法实现色心啊碰撞检测功能。
hrscy
2018/08/30
1.2K0
【Unity3D】鼠标射线点击,UI出现在鼠标点击的位置
创建一条射线Ray需要指明射线的起点(origin)和射线的方向(direction)。这两个参数也是Ray的成员变量。注意,射线的方向在设置时如果未单位化,Unity 3D会自动进行单位归一化处理。射线Ray的构造函数为 :
恬静的小魔龙
2020/03/10
5.6K0
Unity 如何实现框选游戏战斗单位
•在屏幕坐标系中绘制框选范围;•根据框选范围定位其在世界坐标系中对应的区域;•在该区域内进行物理检测。
CoderZ
2022/12/26
1.3K0
Unity 如何实现框选游戏战斗单位
【Unity】AI-Navigation导航模块
首先将地面及静态物体设置为navigation static(这是后面bake的前提):
DevFrank
2024/07/24
2720
【Unity】AI-Navigation导航模块
unity3d:模型跟随鼠标运动,旋转
立羽
2023/08/24
4941
Unity射线检测
Physics.RayCast方法发射射线,射线碰撞的信息存在RaycastHit中。
祝你万事顺利
2019/05/29
9630
Unity脚本(C#)基础笔记
父子节点是由transform组件表示的,所以关于父子节点的操作都是transform的操作
摸鱼的G
2023/02/22
1.1K0
Unity 基于LineRenderer组件实现连线功能
从一个设备的输出端口连线到另一个设备的输入端口。鼠标点击输出端口时,开始画线,位置随鼠标位置移动,再次点击鼠标,若为输入端口,连线成功。
CoderZ
2022/08/29
2.6K2
Unity 基于LineRenderer组件实现连线功能
Unity基础(22)-Navigation导航系统
同时设置为不阻碍行走-Walkable ,即可以在障碍物上行走。
孙寅
2020/06/02
1.4K0
Unity基础(22)-Navigation导航系统
unity3d 第三人称视角摄像机(线性锁视域)
private const float radian = Mathf.PI / 180.0f; //1弧度的浮点数
用户5875740
2019/07/22
1.4K0
Unity【RaycastHit】- 关于射线投射碰撞信息中normal法线向量的运用
当我们使用射线投射检测到碰撞时,可以从RaycastHit中获取射线投射返回的信息,其中normal变量表示碰撞物体表面的法线向量:
CoderZ
2022/08/29
8290
Unity【RaycastHit】- 关于射线投射碰撞信息中normal法线向量的运用
Unity动画☀️9. 木头自转、扛起木头、OnTriggerEnter
1️⃣ 导入木头Log,找回丢失的贴图,通过Perfab的Model—Scale Factor调节导入比例—0.3
星河造梦坊官方
2024/08/14
1520
Unity动画☀️9. 木头自转、扛起木头、OnTriggerEnter
Unity3D--项目:CS局域网之战(二)
我们除了扔进头部中,还可以扔进骨骼头部,保持相对位置,然后通过弯腰等骨骼动画来达到相机跟随
孙寅
2020/06/02
1.1K0
Unity-BattleStar丨8. 物理引擎Rigidbody组件、Collider组件、Raycast
游戏中物理引擎用于模拟真实世界物理环境效果,要实现游戏对象的物理行为,Rigidbody(刚体)组件是必不可少的,当挂载该组件之后,物体立刻受到重力等物理效果影响。如果对象身上还挂载着Collider(碰撞)组件,那么该对象还受到碰撞物理效果影响,例如游戏中的被车撞飞
星河造梦坊官方
2024/08/14
3140
Unity-BattleStar丨8. 物理引擎Rigidbody组件、Collider组件、Raycast
Unity 从UI中拖拽对象放置并拖动[通俗易懂]
需求:点击UI,在场景中生成3D对象,对象跟随鼠标移动,放置后可再次拖拽对象,改变其位置。做了一个小Demo,如下图所示:
全栈程序员站长
2022/09/10
3K0
Unity 从UI中拖拽对象放置并拖动[通俗易懂]
Unity-BattleStar丨拓展:Unity实现自动寻路划线
将其做成预制体放到Resources文件夹下,删掉层级面板的LineRender
星河造梦坊官方
2024/08/14
1410
Unity-BattleStar丨拓展:Unity实现自动寻路划线
浅谈合约量化系统开发详细流程丨关于量化合约系统开发说明分析
量化合约指的是目标或任务具体明确,可以清晰度量。根据不同情况,表现为数量多少,具体的统计数字,范围衡量,时间长度等等。所谓量化就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示。经过抽样的图像,只是在空间上被离散成为像素(样本)的阵列。而每个样本灰度值还是一个由无穷多个取值的连续变化量,必须将其转化为有限个离散值,赋予不同码字才能真正成为数字图像。这种转化称为量化。
用户V_StPv888
2022/08/03
4920
相关推荐
MMORPG游戏开发实战(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验