传送错误Unity 2d
Teleportation bug Unity 2d
对于一个愚蠢的问题,我很抱歉,因为我是 unity 的新手。
我一直在努力解决一个我找不到答案也不太理解的问题。
这是我记录的问题:https://youtu.be/C7Bfq--56h8
这是我的代码:
蛇形运动:
void Start()
{
}
private void Awake()
{
if(!rigidbody) rigidbody = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update ()
{
if(Input.GetKey(KeyCode.A))
{
angle += Time.deltaTime * rotationSpeed;
}
if(Input.GetKey(KeyCode.D))
{
angle -= Time.deltaTime * rotationSpeed;
}
PositionHistory.Insert(0, transform.position);
int index = 0;
foreach (var body in BodyParts) {
Vector3 point = PositionHistory[Mathf.Min(index * Gap, PositionHistory.Count - 1)];
Vector3 moveDirection = point - body.transform.position;
body.transform.position += moveDirection * BodySpeed * Time.deltaTime;
Quaternion rotation = Quaternion.LookRotation(body.transform.position - transform.position, transform.TransformDirection(Vector3.up));
body.transform.rotation = new Quaternion(0, 0, rotation.z, rotation.w);
index++;
}
}
private void FixedUpdate()
{
rigidbody.MoveRotation(angle);
rigidbody.velocity = rigidbody.GetRelativeVector(Vector3.right).normalized * speed;
}
private void GrowSnake()
{
StartCoroutine(waiter());
}
private void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.layer == 7)
{
GrowSnake();
}
}
IEnumerator waiter()
{
GameObject body = Instantiate(BodyPrefab);
body.SetActive(false);
BodyParts.Add(body);
yield return new WaitForSeconds(0.2f);
body.SetActive(true);
}
}
}
WallTeleportation代码:
private void OnTriggerEnter2D(Collider2D col) {
if (col.gameObject.layer == 6) {
Debug.Log("GameObject1 collided with " + col.transform.position);
col.transform.position = new Vector3(col.transform.position.x, col.transform.position.y * -1, 0);
}
}
我假设问题出在这部分:
int index = 0;
foreach (var body in BodyParts) {
Vector3 point = PositionHistory[Mathf.Min(index * Gap, PositionHistory.Count - 1)];
Vector3 moveDirection = point - body.transform.position;
body.transform.position += moveDirection * BodySpeed * Time.deltaTime;
Quaternion rotation = Quaternion.LookRotation(body.transform.position - transform.position, transform.TransformDirection(Vector3.up));
body.transform.rotation = new Quaternion(0, 0, rotation.z, rotation.w);
index++;
}
在过去的整个晚上和现在几个小时里,我一直在为这个问题而苦苦挣扎。任何建议都会有所帮助。
提前致谢!
P.S。
英语不是我的母语。抱歉错误。
当头部传送并且 body 部件试图移动到头部时,body 部件正在改变头部的方向(更新方向),因此头部确实会发生碰撞再次传送。 PS: 英语也不是我的实际语言。
Teloprtation 错误是由在另一个门户的坐标处转换对象引起的,另一个门户也是如此。因此,头部会不断地从左向右弹跳。
在这一行简单地添加:
col.transform.position = new Vector3((col.transform.position.x * -1) + 1, col.transform.position.y, 0);
+1 或 -1 取决于传送门的一侧
对于一个愚蠢的问题,我很抱歉,因为我是 unity 的新手。
我一直在努力解决一个我找不到答案也不太理解的问题。 这是我记录的问题:https://youtu.be/C7Bfq--56h8
这是我的代码:
蛇形运动:
void Start()
{
}
private void Awake()
{
if(!rigidbody) rigidbody = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update ()
{
if(Input.GetKey(KeyCode.A))
{
angle += Time.deltaTime * rotationSpeed;
}
if(Input.GetKey(KeyCode.D))
{
angle -= Time.deltaTime * rotationSpeed;
}
PositionHistory.Insert(0, transform.position);
int index = 0;
foreach (var body in BodyParts) {
Vector3 point = PositionHistory[Mathf.Min(index * Gap, PositionHistory.Count - 1)];
Vector3 moveDirection = point - body.transform.position;
body.transform.position += moveDirection * BodySpeed * Time.deltaTime;
Quaternion rotation = Quaternion.LookRotation(body.transform.position - transform.position, transform.TransformDirection(Vector3.up));
body.transform.rotation = new Quaternion(0, 0, rotation.z, rotation.w);
index++;
}
}
private void FixedUpdate()
{
rigidbody.MoveRotation(angle);
rigidbody.velocity = rigidbody.GetRelativeVector(Vector3.right).normalized * speed;
}
private void GrowSnake()
{
StartCoroutine(waiter());
}
private void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.layer == 7)
{
GrowSnake();
}
}
IEnumerator waiter()
{
GameObject body = Instantiate(BodyPrefab);
body.SetActive(false);
BodyParts.Add(body);
yield return new WaitForSeconds(0.2f);
body.SetActive(true);
}
}
}
WallTeleportation代码:
private void OnTriggerEnter2D(Collider2D col) {
if (col.gameObject.layer == 6) {
Debug.Log("GameObject1 collided with " + col.transform.position);
col.transform.position = new Vector3(col.transform.position.x, col.transform.position.y * -1, 0);
}
}
我假设问题出在这部分:
int index = 0;
foreach (var body in BodyParts) {
Vector3 point = PositionHistory[Mathf.Min(index * Gap, PositionHistory.Count - 1)];
Vector3 moveDirection = point - body.transform.position;
body.transform.position += moveDirection * BodySpeed * Time.deltaTime;
Quaternion rotation = Quaternion.LookRotation(body.transform.position - transform.position, transform.TransformDirection(Vector3.up));
body.transform.rotation = new Quaternion(0, 0, rotation.z, rotation.w);
index++;
}
在过去的整个晚上和现在几个小时里,我一直在为这个问题而苦苦挣扎。任何建议都会有所帮助。
提前致谢!
P.S。 英语不是我的母语。抱歉错误。
当头部传送并且 body 部件试图移动到头部时,body 部件正在改变头部的方向(更新方向),因此头部确实会发生碰撞再次传送。 PS: 英语也不是我的实际语言。
Teloprtation 错误是由在另一个门户的坐标处转换对象引起的,另一个门户也是如此。因此,头部会不断地从左向右弹跳。
在这一行简单地添加:
col.transform.position = new Vector3((col.transform.position.x * -1) + 1, col.transform.position.y, 0);
+1 或 -1 取决于传送门的一侧