物体在移动,但它没有改变方向,我不知道为什么。
这是名为'zackenblock'的对象的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class zackenblock_move : MonoBehaviour
{
public static bool col = false;
public float speed = 10f;
// Start is called before the first frame update
void Start()
{
}
void Update()
{
if (zackenblock_col.collosin != col)
{
col = zackenblock_col.collosin;
}
}
// Update is called once per frame
void FixedUpdate()
{
if (col == false){
transform.Translate(Vector3.right * Time.deltaTime * speed);
}
else
{
transform.Translate(Vector3.left * Time.deltaTime * speed);
}
/*if (Input.GetKey(KeyCode.M))
{
col = true;
}*/
}
void OnCollisionEnter(Collision collision){
//Check for a match with the specified name on any GameObject that collides with your GameObject
if (collision.gameObject.name == "Level1_part2")
{
//If the GameObject's name matches the one you suggest, output this message in the console
Debug.Log("Do something here");
col = true;
}
else if (collision.gameObject.name == "Level")
{
//If the GameObject's name matches the one you suggest, output this message in the console
Debug.Log("Do something here");
col = false;
}
}
/*IEnumerator waiter_not_that_waiter_just_waiter(){
yield return new waitforseconds(3f);
//my code here after 3 seconds
transform.Translate(Vector3.right * Time.deltaTime);
yield return new waitforseconds(3f);
transform.Translate(Vector3.left * Time.deltaTime);
}*/
}
这就是Tilemap中的代码
using System.Security.Cryptography;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class zackenblock_col : MonoBehaviour
{
public static bool collosin;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.M))
{
collosin = true;
}
}
void OnCollisionEnter(Collision collision){
//Check for a match with the specified name on any GameObject that collides with your GameObject
if (collision.gameObject.name == "zackenblock")
{
//If the GameObject's name matches the one you suggest, output this message in the console
Debug.Log("Do something here");
collosin = true;
}
/*else if (collision.gameObject.name == "Level")
{
//If the GameObject's name matches the one you suggest, output this message in the console
Debug.Log("Do something here");
collosin = false;
}*/
}
}
以下是一些截图:
Unity和对象的屏幕截图:
Unity和切片图的屏幕截图:
Unity和Tilemap2的屏幕截图:
物体应该向右移动,当它碰撞时,然后向左移动。
它只不停地向右移动。
2条答案
按热度按时间bjp0bcyl1#
您的代码的主要问题是拼写错误。将“collosin”更改为“collision”。并更改:
进入
除此之外,你的代码看起来还不错。
nlejzf6q2#
使用OnCollisionEnter 2D,因为您正在制作2D游戏
如果碰撞倾向于粘滞,还可以检查OnCollisionStay 2D/exit。