Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 生活吧没有';在玩家摧毁对撞机后不会改变_Unity3d_Game Development - Fatal编程技术网

Unity3d 生活吧没有';在玩家摧毁对撞机后不会改变

Unity3d 生活吧没有';在玩家摧毁对撞机后不会改变,unity3d,game-development,Unity3d,Game Development,我试图做一个2d游戏,我的物体在碰撞后不会影响玩家的救生艇。玩家的healthbar将获得更长的寿命,但我认为脚本有问题。(同时,需要销毁的对象的碰撞器已选中“是否触发”)。我在对象上加电,在播放器上加上角色脚本和健康栏脚本 字符.cs 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 使用UnityStandardAssets.CrossPlatformInput; 公共阶级特征:单一行为 { 刚体2d rb; 浮动dirX; [序列化字

我试图做一个2d游戏,我的物体在碰撞后不会影响玩家的救生艇。玩家的healthbar将获得更长的寿命,但我认为脚本有问题。(同时,需要销毁的对象的碰撞器已选中“是否触发”)。我在对象上加电,在播放器上加上角色脚本和健康栏脚本

字符.cs

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityStandardAssets.CrossPlatformInput;
公共阶级特征:单一行为
{
刚体2d rb;
浮动dirX;
[序列化字段]
浮动速度=5f,跳跃力=600f,子弹速度=500f;
矢量3局部尺度;
公共交通;
公共刚体2D子弹;
//用于初始化
void Start()
{
localScale=transform.localScale;
rb=GetComponent();
}
//每帧调用一次更新
无效更新()
{
dirX=CrossPlatformInputManager.GetAxis(“水平”);
if(CrossPlatformInputManager.GetButtonDown(“跳转”))
跳跃();
if(CrossPlatformInputManager.GetButtonDown(“Fire1”))
火();
}
void FixedUpdate()
{
rb.velocity=新矢量2(dirX*moveSpeed,rb.velocity.y);
}
无效跳转()
{
if(rb.velocity.y==0)
rb.附加力(矢量2.up*跳跃力);
}
虚火
{
var firedBullet=实例化(bullet、barrel.position、barrel.rotation);
firedBullet.AddForce(枪管上升速度*子弹速度);
}
}
HealthBar.cs

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类健康酒吧:单一行为
{
公共滑块;
公共梯度;
公众形象填充;
公共卫生=100;
public void SetMaxHealth(int-health)
{
slider.maxValue=运行状况;
slider.value=健康;
填充。颜色=渐变。评估(1f);
}
公共健康(内部健康)
{
slider.value=健康;
fill.color=gradient.Evaluate(slider.normalizedValue);
}
}
PowerUp.cs

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类通电:单一行为
{
公共浮动多人游戏=1.4f;
公共游戏对象拾取效应;
专用空对撞机(对撞机其他)
{
如果(其他比较标记(“玩家”))
{
皮卡(其他);
}
}
无效拾取(对撞机播放器)
{
//产生一种很酷的效果
实例化(pickupEffect、transform.position、transform.rotation);
//对玩家施加效果
HealthBar stats=player.GetComponent();
stats.health*=多人游戏;
//消除效应
摧毁(游戏对象);
}
}

您的问题如下:

  • 玩家将获得更大的寿命
  • 还有需要销毁的对象的碰撞器
你可能遇到什么情况

  • 检查您的角色是否被触发,以便它调用“OnTiggerEnter”并检查标记
  • 检查您的通电项目,该项目作为触发器“isTrigger”检查为true
  • 检查“碰撞器”或“命中对象比例”是否很小,它无法与“碰撞器”一起工作
  • 如果您没有上述检查表,那么它应该可以正常工作

首先,正如其他人已经提到的2D游戏,以及(希望)您希望使用的组件

物理和物理2D是两个完全分离的引擎,彼此不认识。3D
OnTriggerCenter
永远不会为碰撞等2D物理事件调用


然后注意

此外,需要销毁的对象的碰撞器“是否触发”已检查

这完全是错误的做法。如果您的对象要跟踪一个
ontriggenter
,那么进入(玩家)的对象应该启用
isTrigger
!在大多数情况下,你不想这样做,因为球员应该(例如)与地板碰撞,而不是从地板上摔下来等等

因此,您需要的是在播放器上添加一个脚本,等待其他触发器对象进入

然后确保逐行或添加其他日志以查看发生了什么:

通电

//把这个放在提货单上
公共类通电:单一行为
{
//把这些保密,没有其他人需要访问这些
//(封装)
[SerializeField]私人浮动多人游戏=1.4f;
[SerializeField]私有游戏对象拾取效果;
公共无效拾取(HealthBar统计)
{
//产生一种很酷的效果
实例化(pickupEffect、transform.position、transform.rotation);
//对玩家施加效果
stats.health*=多人游戏;
//消除效应
摧毁(游戏对象);
}
}
开机检测器(在播放器上)

//装上播放器!
公共类PowerUpDetector:monobhavior
{
//请通过检查员对此进行参考
[序列化字段]私人HealthBar HealthBar;
私人空间
{
如果(!healthBar)healthBar=GetComponent();
}
私有无效OnTiggerEnter2D(碰撞R2D其他)
{
//或者你的电源上的任何标签
如果(!other.CompareTag(“通电”))
{
Debug.LogWarning($“注册了碰撞,但标记错误:{other.tag}”,这是);
返回;
}
var powerup=other.GetComponent();
如果(!通电)
{
LogError($“对象{other.name}被标记为通电,但没有连接通电组件”,这是);
返回;
}