Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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

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
C# 我的游戏对象不会相互碰撞_C#_Unity3d_Collision - Fatal编程技术网

C# 我的游戏对象不会相互碰撞

C# 我的游戏对象不会相互碰撞,c#,unity3d,collision,C#,Unity3d,Collision,非常奇怪的问题,我甚至不知道这是为什么或如何发生的,但我有两个游戏对象实际上发生碰撞,因为我有一个发生碰撞的事件(爆炸),但这些对象实际上不再相互碰撞。突然之间,他们打了一拳,却没能阻止对方。如果这听起来很奇怪,我很抱歉,我几乎不知道如何描述我的问题。我将发布代码,不确定这是否会有任何区别,但请问我任何你可能会问的问题“哦,我想这可能是为什么,你的设置是什么…”等等。他们过去经常相互撞击,但现在他们只是像没有物质一样穿过,但他们碰撞,因为这会引发爆炸。(它不会破坏它,所以不,这不是因为游戏对象被

非常奇怪的问题,我甚至不知道这是为什么或如何发生的,但我有两个游戏对象实际上发生碰撞,因为我有一个发生碰撞的事件(爆炸),但这些对象实际上不再相互碰撞。突然之间,他们打了一拳,却没能阻止对方。如果这听起来很奇怪,我很抱歉,我几乎不知道如何描述我的问题。我将发布代码,不确定这是否会有任何区别,但请问我任何你可能会问的问题“哦,我想这可能是为什么,你的设置是什么…”等等。他们过去经常相互撞击,但现在他们只是像没有物质一样穿过,但他们碰撞,因为这会引发爆炸。(它不会破坏它,所以不,这不是因为游戏对象被破坏了)

AIScript

using UnityEngine;
using System.Collections;

public class AIScript : MonoBehaviour {
private PlayerScript GO;
public Transform target;
public Transform myTransform2;
public GameObject Comp;
public GameObject splosion;
public int maxDistance;
public int rotationSpeed;
public int moveSpeed;


// Use this for initialization
void Start () {
    GO = GameObject.Find("Player").GetComponent<PlayerScript>();

    target = GO.transform;
    maxDistance = 2;
}

void Awake() {
    myTransform2 = transform;
}

// Update is called once per frame
void Update () {
    if (GO.colorRed) 
    {
        Debug.DrawLine (target.position, myTransform2.position, Color.red);
    } 
    else 
    {
        Debug.DrawLine (target.position, myTransform2.position, Color.blue);
    }

    //handles rotation of AI
    myTransform2.rotation = Quaternion.Slerp (myTransform2.rotation, Quaternion.LookRotation(target.position - myTransform2.position), rotationSpeed * Time.deltaTime);

    if(Vector3.Distance(target.position, myTransform2.position) > maxDistance && GO.stopAI)
    {
        //Move towards target
        myTransform2.position += myTransform2.forward * moveSpeed * Time.deltaTime;
    }

}

void OnTriggerEnter(Collider other)
{
    if (other.transform.tag == "Player")
    {
        Instantiate (splosion, transform.position, transform.rotation);
    }
}

}
使用UnityEngine;
使用系统集合;
公共类AIScript:MonoBehavior{
私人玩家脚本GO;
公共转型目标;
公共改革2;
公共游戏对象组件;
公开游戏对象展示;
公共距离;
公共内部旋转速度;
公共交通速度;
//用于初始化
无效开始(){
GO=GameObject.Find(“Player”).GetComponent();
目标=GO.transform;
最大距离=2;
}
无效唤醒(){
myTransform2=转换;
}
//每帧调用一次更新
无效更新(){
如果(红色)
{
Debug.DrawLine(target.position,myTransform2.position,Color.red);
} 
其他的
{
Debug.DrawLine(target.position,myTransform2.position,Color.blue);
}
//处理AI的旋转
myTransform2.rotation=Quaternion.Slerp(myTransform2.rotation,Quaternion.LookRotation(target.position-myTransform2.position),rotationSpeed*Time.deltaTime);
if(Vector3.Distance(target.position,myTransform2.position)>maxDistance&&GO.stopAI)
{
//向目标前进
myTransform2.position+=myTransform2.forward*moveSpeed*Time.deltaTime;
}
}
无效对撞机(对撞机其他)
{
if(other.transform.tag==“Player”)
{
实例化(splosion、transform.position、transform.rotation);
}
}
}
PlayerScript

public class PlayerScript : MonoBehaviour {

// globals
private AIScript GO;
public string moveL;
public string moveR;
public string moveU;
public string moveD;
//
public float playerSpeed;
//
public bool colorRed;
public bool stopAI;
//
public GameObject splosion;
// Use this for initialization
void Start () {
    GO = GameObject.Find("Computer").GetComponent<AIScript>();
}

// Update is called once per frame
void Update () {

    stopAI = false;

    if(Input.GetKey (moveL))
    {
        colorRed = true;
        stopAI = true;
        GO.Comp.renderer.material.color = Color.green;
        SetTransformX((transform.position.x) - playerSpeed);
    }
    if(Input.GetKey (moveR))
    {
        colorRed = true;
        stopAI = true;
        GO.Comp.renderer.material.color = Color.red;
        SetTransformX((transform.position.x) + playerSpeed);
    }

    if(Input.GetKey (moveU))
    {
        colorRed = false;
        stopAI = true;
        GO.Comp.renderer.material.color = Color.blue;
        SetTransformY((transform.position.y) + playerSpeed);
    }
    if(Input.GetKey (moveD))
    {
        colorRed = false;
        stopAI = true;
        GO.Comp.renderer.material.color = Color.clear;
        SetTransformY((transform.position.y) - playerSpeed);
    }

    else
    {
        rigidbody.angularVelocity = Vector3.zero;
    }
}

void SetTransformX(float n)
{
    transform.position = new Vector3(n, transform.position.y, transform.position.z);
}

void SetTransformY(float n)
{
    transform.position = new Vector3(transform.position.x, n, transform.position.z);
}
公共类PlayerScript:MonoBehavior{
//全球的
私人AIScript GO;
公共字符串移动;
公共字符串移动器;
公共字符串移动;
移动公共字符串;
//
公众花车运动员速度;
//
公共厕所颜色为红色;
公共图书馆;
//
公开游戏对象展示;
//用于初始化
无效开始(){
GO=GameObject.Find(“计算机”).GetComponent();
}
//每帧调用一次更新
无效更新(){
stopAI=假;
if(Input.GetKey(moveL))
{
彩色=真;
stopAI=真;
GO.Comp.renderer.material.color=color.green;
SetTransformX((transform.position.x)-播放器速度);
}
if(Input.GetKey(移动器))
{
彩色=真;
stopAI=真;
GO.Comp.renderer.material.color=color.red;
SetTransformX((transform.position.x)+播放器速度);
}
if(Input.GetKey(moveU))
{
彩色=假;
stopAI=真;
GO.Comp.renderer.material.color=color.blue;
SetTransformY((transform.position.y)+玩家速度);
}
if(Input.GetKey(已移动))
{
彩色=假;
stopAI=真;
GO.Comp.renderer.material.color=color.clear;
SetTransformY((transform.position.y)-玩家速度);
}
其他的
{
刚体。角速度=矢量3.0;
}
}
void SetTransformX(浮点n)
{
transform.position=新矢量3(n,transform.position.y,transform.position.z);
}
无效设置转换(浮动n)
{
transform.position=新矢量3(transform.position.x,n,transform.position.z);
}

}

需要将OnTriggerCenter更改为OnCollisionCenter,然后使用Collision更改Collider

您是否确保其中一个对象没有意外设置“是触发器”复选框?是否将刚体附加到它们?那么网格碰撞器呢?在其中一个脚本中有一个OnTiggerEnter,所以我假设其中一个是触发器,另一个不是。如果这不是问题的原因,那么这两个对象可能位于不同的层上?是的,我检查了isTrigger,以便它读取我的碰撞。我检查了它,它工作了,但现在我的爆炸没有发生。有办法吗?