【发布时间】:2020-06-20 10:58:06
【问题描述】:
我目前的游戏一直有这个问题。
问题是,当我的玩家(火箭)与小行星(敌人)相撞时,玩家注定要死去并重新开始关卡,但即使我已经将我的玩家放在没有触发器的盒子对撞机上,这也不起作用还有我的带触发器和圆形对撞机的小行星。我也尝试过让小行星带触发器,玩家不带触发器,两者都带触发器,但我的火箭每次都穿过小行星。控制台窗口中没有错误。下面是我为此使用的代码。更新:我使用了每个人的建议并整理了代码回顾我应该看到将“OnTriggerEnter”放在更新方法中是行不通的,但无论如何火箭和小行星都上面有一个“Rigibody”组件,当玩家与小行星碰撞时,他会消失并且不会重新启动,我已经开始编写重生点,但出现的错误是“错误 CS1955:不可调用成员'Transform.position ' 不能像方法一样使用。”这是更新后的代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Movement : MonoBehaviour
{
public float speed = 6.0f;
public GameObject character;
private Animator anim;
private Vector3 Respawnpoint;
private void OnCollisionEnter2D(Collision2D collision)
{
switch (collision.gameObject.tag)
{
case "Enemy":
Destroy(gameObject);
break;
default:
//nothing
break;
}
}
void Start()
{
anim = GetComponent<Animator>();
Respawnpoint = transform.position();
}
void Update()
{
if (Input.anyKey)
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
if (Input.GetKeyDown(KeyCode.D))
{
transform.position += Vector3.right * speed * Time.deltaTime;
anim.SetBool("Isright", true);
}
if (Input.GetKeyDown(KeyCode.A))
{
transform.position += Vector3.left * speed * Time.deltaTime;
anim.SetBool("Isleft", true);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += Vector3.right * speed * Time.deltaTime;
anim.SetBool("Isright", true);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position += Vector3.left * speed * Time.deltaTime;
anim.SetBool("Isleft", true);
}
else
{
}
}
}
【问题讨论】:
-
您的至少一个碰撞对象上是否有
RigidBody?OnTriggerEnter并且排序仅在至少存在一个时才有效。 -
还有。我刚刚阅读了您的代码,我不敢相信没有错误消息。您将两个函数相互嵌套。那肯定行不通!