gpt4 book ai didi

c# - Unity 2D 中翻转 Sprite 的问题

转载 作者:行者123 更新时间:2023-11-30 23:08:11 28 4
gpt4 key购买 nike

我是 unity 的新手,我一直在关注有关编写 2D 平台游戏脚本的 youtube 指南,现在我已经到了这样的地步,当我转向相反的方向时,我正试图向 Sprite 添加一个翻转。

我添加了一个代码,现在它不断地从左向右翻转。如果我理解正确,那可能是因为我在移动时不断应用 > 0.1f 导致函数持续运行,但老实说我迷路了,所以任何帮助将不胜感激。

using UnityEngine;
using System.Collections;

[RequireComponent (typeof (Controller2D))]
public class Player : MonoBehaviour {

public float jumpHeight = 4;
public float timeToJumpApex = .4f;
float accelerationTimeAirbourne = .2f;
float acceleratinTimeGrounded =.1f;
public float moveSpeed = 6;

float jumpVelocity;
float gravity;
Vector3 velocity;
float velocityXSmoothing;

Controller2D controller;

void Start(){
controller = GetComponent<Controller2D>();
gravity = -(2 * jumpHeight) / Mathf.Pow (timeToJumpApex, 2);
jumpVelocity = Mathf.Abs(gravity) * timeToJumpApex;
print ("gravity: " + gravity + " Jump Velocity: " + jumpVelocity);
}

void Update(){

if (controller.collisions.above || controller.collisions.above) {
velocity.y = 0;
}

Vector2 input = new Vector2 (Input.GetAxisRaw ("Horizontal"),
Input.GetAxisRaw ("Vertical"));

if (Input.GetKeyDown (KeyCode.Space) && controller.collisions.below) {
velocity.y = jumpVelocity;
}

float targetVelocityX = input.x * moveSpeed;
velocity.x = Mathf.SmoothDamp(velocity.x, targetVelocityX, ref
velocityXSmoothing, (controller.collisions.below)?
acceleratinTimeGrounded:accelerationTimeAirbourne);
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}

void FixedUpdate(){

if ((Input.GetAxis("Horizontal") > 0.1f && this.transform.localScale.x != 1)
|| (Input.GetAxis("Horizontal") < -0.1f && this.transform.localScale.x !=
-1))
{
flip();
}

}

void flip()
{
this.transform.localScale = new Vector3(this.transform.localScale.x *
-1,
this.transform.localScale.y, this.transform.localScale.z);
}



}

最佳答案

你的错误在这里

void FixedUpdate(){
if ((Input.GetAxis("Horizontal") > 0.1f && this.transform.localScale.x != 1)|| (Input.GetAxis("Horizontal") < -0.1f && this.transform.localScale.x !=
-1)){
flip();
}
}

翻转后,条件仍然计算为真。你将需要一个 bool 值 hasflipped 来检查你是否已经翻转过,如果你没有再次翻转 :)

已修复的更新导致此检查每帧发生一次,因此当您的 Sprite 每帧翻转时您会看到一堆闪烁,除非您指定仅翻转一次

关于c# - Unity 2D 中翻转 Sprite 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46685946/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com