【问题标题】:How to move an 2D character(with animation) to mouse click position in C#?如何将 2D 角色(带动画)移动到 C# 中的鼠标单击位置?
【发布时间】:2015-05-08 17:15:28
【问题描述】:

我打算开发一个简单的游戏,叫做废物收集。在这个游戏中,如果我点击一个废物,角色需要走到某个废物并收集它。开始时角色位于屏幕的中间位置。当我们点击在角色的左侧,需要播放动画左走。另一方面,当我们单击角色的右侧时,需要播放动画。角色动画到点击的位置

public class mousepos : MonoBehaviour {

private Animator anim;
 public float speed = 1.5f;
 private Vector3 target;

 void Start () {
 anim = GetComponent<Animator>();
     target = transform.position;
 }

 void Update () {
    if (Input.GetMouseButtonDown (0)) {
                    if (**Input.mousePosition.x <= 500**) { //move skeleton on X axis to the left
                            target = Camera.main.ScreenToWorldPoint (Input.mousePosition);
                            target.z = transform.position.z;
                            transform.localScale = new Vector3(1, 1, 1); 
                            anim.SetInteger ("Direction", 1);

                    } else if (Input.mousePosition.x >= 500) {

                            target = Camera.main.ScreenToWorldPoint (Input.mousePosition);
                            target.z = transform.position.z;
                            transform.localScale = new Vector3(-1, 1, 1); 
                            anim.SetInteger ("Direction", 1);
                    }

            }
     transform.position = Vector3.MoveTowards(transform.position,              target, speed * Time.deltaTime);
 }    
 }

【问题讨论】:

  • 你的意思是你的角色直接跳到点击的地方,在动画中不动?
  • 不……我不是说……我想像正常的人类行走一样将我的角色移向光标方向。
  • 不清楚你有什么问题。您是否对角色如何到达目标有问题(例如移动速度等),或者您是否在角色移动时启动/停止动画有问题?
  • 我需要不同的动画(左动画和右动画)。当我单击场景的左侧时,它应该播放左行走动画。点击场景右侧播放右走动画。如何识别这些点击位置。
  • 请尝试用以下术语表达您的问题:(1)您想要实现什么,(2)到目前为止您做了什么,(3)现在发生了什么以及(4)什么是您现在完全感到困惑或不清楚。

标签: c# animation unity3d


【解决方案1】:

不确定您到底要什么,但这样的东西会起作用吗?

if (Input.GetMouseButtonDown (0)) {
    target = Camera.main.ScreenToWorldPoint (Input.mousePosition);
    target.z = transform.position.z;
    if(target.x > transform.position.x) transform.localScale = new Vector3(1, 1, 1); 
    else if(target.x < transform.position.x) transform.localScale = new Vector3(-1, 1, 1);
    anim.SetInteger ("Direction", 1);
 } 
 transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);

【讨论】:

  • 感谢您的回答
【解决方案2】:

我明白了..:)

公共类 mousepos : MonoBehaviour {

    private Animator anim;
    public float speed = 1.5f;
    private Vector3 target;
    private Vector3 MousePosition;
    private Vector3 PlayerPosition;
    void Start () {
    anim = GetComponent<Animator>();


    target = transform.position;

    }
    void Update () {

            if (Input.GetMouseButtonDown (0)) {

            target = Camera.main.ScreenToWorldPoint (Input.mousePosition);
           target.z = transform.position.x;

           Debug.Log ("traaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + target.z);
           if (target.x <= target.z) {


          transform.localScale = new Vector3 (1, 1, 1); 
         anim.SetInteger ("Direction", 1);

    }
   else if (target.x >= target.z) {

                            transform.localScale = new Vector3 (-1, 1, 1); 
                            anim.SetInteger ("Direction", 1);
                    }



            }

      transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime);

    }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    相关资源
    最近更新 更多