Unity3D开发中角色穿墙问题的解决方案
创作时间:
作者:
@小白创作中心
Unity3D开发中角色穿墙问题的解决方案
引用
CSDN
1.
https://blog.csdn.net/2302_80259386/article/details/146205458
在使用Unity3D开发游戏时,角色穿墙是一个常见的问题。本文将从代码实现、碰撞体设置和层级关系等多个角度,详细分析并解决这一问题。
在使用角色控制器实现角色移动时,如果在场景中创建了Cube作为墙进行测试,但发现角色仍然能穿墙而过,可以参考以下解决方案:
这是代码实现:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerC : MonoBehaviour
{
public float moveSpeed = 1;
public CharacterController cc;
// Start is called before the first frame update
void Start()
{
cc = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
Debug.Log("x:" + x + "y:" + y);
Vector3 dir = new Vector3(x, 0, y);
dir = dir.normalized;
// 修改坐标方式完成角色移动
// this.transform.position += dir * moveSpeed * Time.deltaTime;
// 角色控制器方式完成角色移动
cc.Move(dir * moveSpeed * Time.deltaTime);
}
}
可能的原因及解决方案
- Cube的碰撞体设置问题
- Cube缺少碰撞体:确保Cube上添加了BoxCollider组件。默认情况下,Unity的Cube会自动添加BoxCollider,但如果手动删除了该组件,角色就会直接穿过。
- 碰撞体设置为触发器:如果Cube的BoxCollider的Is Trigger属性被勾选,那么它将不再作为物理碰撞体,而只会触发事件。
解决方法:
确保Cube上有BoxCollider组件,并且Is Trigger属性未被勾选。如果Cube的碰撞体设置正确,但仍然穿墙,可以尝试重新添加BoxCollider。
- 检查物体的层级关系
在Unity中,物体的层级关系会影响碰撞检测。要确保角色和墙所在的层级之间没有被设置为忽略碰撞。
可以通过以下步骤检查和调整:
- 在Unity编辑器中,选择角色和墙,检查它们的Layer属性。
- 在Project Settings中,打开Physics设置,检查Layer Collision Matrix,确保角色和墙所在的层级之间启用了碰撞检测。如果未启用,勾选相应的格子以启用碰撞检测。
假设你的角色和墙都在默认层级(Default,层级0),那么你需要确保Default层级和自身的碰撞检测是启用的。具体来说:找到Layer Collision Matrix中Default层级对应的行和列,确保这两个格子被勾选。
如果角色和墙不在同一个层级,比如角色在Player层级,墙在Wall层级,那么你需要确保Player层级和Wall层级之间的碰撞检测是启用的。具体来说:找到Player层级对应的行和Wall层级对应的列。确保这个格子被勾选。
比如,假设角色在Player层级,墙在Wall层级:
- 在Layer Collision Matrix中,找到Player层级对应的行。
- 找到Wall层级对应的列。
- 确保这个格子被勾选。
移动方法的选择
通过角色控制器的方法实现角色移动可以达到让角色不能穿墙的效果:
// 角色控制器方式完成角色移动
cc.Move(dir * moveSpeed * Time.deltaTime);
而使用更改坐标方式不能实现角色被墙阻隔而不能穿墙的效果:
// 修改坐标方式完成角色移动
this.transform.position += dir * moveSpeed * Time.deltaTime;
另外,在这里,角色控制器的方法若使用“SimpleMove”会更好:
// 1.不用×Time.deltaTime
// 2.有重力
cc.SimpleMove(dir * moveSpeed);
通过以上分析和解决方案,可以有效地解决Unity3D开发中常见的角色穿墙问题。
热门推荐
每天吃一片维生素C的人,最后有啥变化?提醒:安全服用,记住3点
黄金发白的原因及其纯度影响如何?
“我思故我在”:笛卡尔哲学命题的深意与影响
软组织损伤主要表现有哪些
寿喜烧,竟是日本人走向文明开化的第一步
飞机机龄多久最安全?10年的飞机机龄安全吗
金铲铲之战监察小炮阵容攻略:S13赛季最强阵容搭配
电瓶三轮车使用与保养指南
电动三轮车常见故障及电瓶维护指南
高铁能带洗发水和沐浴露吗
嗳气如何中医辨证论治
“无为而治,顺其自然”的道家思想,其实并不推崇自由
正确的泡茶8个步骤 正确的泡茶方法
赶黄草进京“摘牌” 古蔺打造医药健康百亿产业集群
2024中西部地区GDP15强排名:郑州追赶长沙,宜昌排名第12
中国医学科学院/青海大学联合研究:三阴性乳腺癌治疗迎来曙光
《中国晚期三阴性乳腺癌患者生存质量白皮书》正式发布
《火影忍者》中佐助的家庭关系图:揭开宇智波一族的神秘面纱
防弹防盗玻璃:结构、性能与应用全解析
防弹玻璃的原理、应用与价格
C++中RAII的神奇力量:资源管理的终极解决方案
免疫力下降、脱发、食欲减退,你的身体可能缺乏一种重要营养元素
陕西地区唯一的一座藏传格鲁派寺院 西安广仁寺的美深入骨髓
旅行的照片如何分类管理
出差旅行必备!行李箱打不开怎么办?
魔兽世界乌龟服172防战天赋加点推荐
美民众不满白宫加征关税威胁:消费者信心普遍下降 通胀预期大幅上升
光子为什么以光速飞行而且必须以光速飞行?背后到底有什么动力?
怀疑是骨髓瘤,要看血常规哪一项?
提升白酒品质需适当借助科技力量