问:我在youtube上遵循了本教程: Unity3D。自上而下的8个方向移动-YouTube [ ^ ]。我花了一段时间,但我几乎已经从箭头的动作转变为鼠标的触摸。但是现在我有了这个问题,当角色停止移动时会出现闪烁。我查看了他发送给我的链接,但该链接无效。有谁知道如何停止角色停止移动时发生的闪烁?这是我的代码:
private Animator anim;
public float speed = 15f;
private Vector3 target;
private bool touched;
void Start () {
target = transform.position;
anim = GetComponent<Animator> ();
}
void Update () {
touched = true;
if (Input.GetMouseButtonDown (0)) {
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = 10; // distance from the camera
target = Camera.main.ScreenToWorldPoint(mousePosition);
target.z = transform.position.z;
}
var movementDirection = (target - transform.position).normalized;
if (movementDirection.x != 0 || movementDirection.y != 0) {
anim.SetBool("walking" , true);
anim.SetFloat("SpeedX" , movementDirection.x);
anim.SetFloat("SpeedY" , movementDirection.y);
Vector2 movement = new Vector2(
speed * movementDirection.x ,
speed * movementDirection.y);
movement *= Time.deltaTime;
transform.Translate(movement);
if (movementDirection.x < 0) {
anim.SetFloat("LastMoveX" , -1f);
}
else if (movementDirection.x > 0) {
anim.SetFloat("LastMoveX" , 1f);
}
else {
anim.SetFloat("LastMoveX" , 0f);
}
if (movementDirection.y > 0) {
anim.SetFloat("LastMoveY" , 1f);
}
else if (movementDirection.y < 0) {
anim.SetFloat("LastMoveY" , -1f);
}
else {
anim.SetFloat("LastMoveY" , 0f);
}
} else {
touched = false;
anim.SetBool("walking" , false);
}
}
答:确保您的代码没有到达终点,因此即使玩家到达目标位置,它也可以将“ walking”参数设置为false。
因此,对于更改,请不要单独检查“ else”部分中的那部分代码。
答: 无效更新(){
感动= true;
如果(Input.GetMouseButtonDown(0)){
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = 10; //与相机的距离
target = Camera.main.ScreenToWorldPoint(mousePosition);
target.z = transform.position.z;
}
var MovementDirection =(target-transform.position).normalized;
如果(movementDirection.x!= 0 || MovementDirection.y!= 0){
anim.SetBool(“ walking”,true);
anim.SetFloat(“ SpeedX”,MovementDirection.x);
anim.SetFloat(“ SpeedY”,MovementDirection.y);
Vector2运动=新Vector2(
速度* MovementDirection.x,
速度* MovementDirection.y);
运动* = Time.deltaTime;
transform.Translate(motion);
如果(movementDirection.x <0){
anim.SetFloat(“ LastMoveX”,-1f);
}
否则(movementDirection.x> 0){
anim.SetFloat(“ LastMoveX”,1f);
}
其他{
anim.SetFloat(“ LastMoveX”,0f);
}
如果(movementDirection.y> 0){
anim.SetFloat(“ LastMoveY”,1f);
}
否则(movementDirection.y <0){
anim.SetFloat(“ LastMoveY”,-1f);
}
其他{
anim.SetFloat(“ LastMoveY”,0f);
}
}
if(movementDirection.x == 0 && MovementDirection.y == 0)//尝试检查这种情况,无论它是否到达目标位置。
{
感动=假;
anim.SetBool(“ walking”,false);
}
}