2D 场景 , 正交camera
场景和相机都不旋转
 
人物在init的时候, 通过外部参数设定x的旋转角度330
 
下面代码实现鼠标点击地图, 人物旋转到对应的方向上。
 
 
 
 
 
 
ARPG中人物的鼠标点击旋转_旋转 45using UnityEngine;
ARPG中人物的鼠标点击旋转_旋转 45using System.Collections;
ARPG中人物的鼠标点击旋转_旋转 45
ARPG中人物的鼠标点击旋转_旋转 45public class rotate : MonoBehaviour
ARPG中人物的鼠标点击旋转_旋转 45{
ARPG中人物的鼠标点击旋转_旋转 45  // Use this for initialization
ARPG中人物的鼠标点击旋转_旋转 45  public GameObject gotoSign;
ARPG中人物的鼠标点击旋转_旋转 45  public static GameObject sign_t = null;
ARPG中人物的鼠标点击旋转_旋转 45  private const string mapName = "Map";
ARPG中人物的鼠标点击旋转_旋转 45  private const string mainCharacterName = "character";
ARPG中人物的鼠标点击旋转_旋转 45  private Quaternion mainCharacterRotationInit;
ARPG中人物的鼠标点击旋转_旋转 45  private GameObject mainCharacter;
ARPG中人物的鼠标点击旋转_旋转 45  void Start ()
ARPG中人物的鼠标点击旋转_旋转 45  {
ARPG中人物的鼠标点击旋转_旋转 45    mainCharacter = GameObject.Find (mainCharacterName);
ARPG中人物的鼠标点击旋转_旋转 45    mainCharacterRotationInit = mainCharacter.transform.rotation;
ARPG中人物的鼠标点击旋转_旋转 45  }
ARPG中人物的鼠标点击旋转_旋转 45
ARPG中人物的鼠标点击旋转_旋转 45  void Update ()
ARPG中人物的鼠标点击旋转_旋转 45  {
ARPG中人物的鼠标点击旋转_旋转 45    if (Input.GetMouseButtonDown (0)) {
ARPG中人物的鼠标点击旋转_旋转 45        
ARPG中人物的鼠标点击旋转_旋转 45      Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
ARPG中人物的鼠标点击旋转_旋转 45      RaycastHit hit;
ARPG中人物的鼠标点击旋转_旋转 45      //发出射线
ARPG中人物的鼠标点击旋转_旋转 45      if (Physics.Raycast (ray, out hit, 500)) {
ARPG中人物的鼠标点击旋转_旋转 45        //Debug.DrawLine (ray.origin, hit.point);
ARPG中人物的鼠标点击旋转_旋转 45        //check if kick the map
ARPG中人物的鼠标点击旋转_旋转 45        if (hit.transform.name == mapName) {
ARPG中人物的鼠标点击旋转_旋转 45        
ARPG中人物的鼠标点击旋转_旋转 45          //Debug.Log ("kick:" + Time.time);
ARPG中人物的鼠标点击旋转_旋转 45          //清理标记
ARPG中人物的鼠标点击旋转_旋转 45          if (sign_t) {
ARPG中人物的鼠标点击旋转_旋转 45            Destroy (sign_t, 0);
ARPG中人物的鼠标点击旋转_旋转 45            sign_t = null;
ARPG中人物的鼠标点击旋转_旋转 45          }
ARPG中人物的鼠标点击旋转_旋转 45            
ARPG中人物的鼠标点击旋转_旋转 45          //change screen point to worldPoint    
ARPG中人物的鼠标点击旋转_旋转 45          // can't use chinese
ARPG中人物的鼠标点击旋转_旋转 45          Vector3 p = hit.point;// Camera.main.ScreenToWorldPoint(Input.mousePosition);
ARPG中人物的鼠标点击旋转_旋转 45
ARPG中人物的鼠标点击旋转_旋转 45          // Instantiate new object
ARPG中人物的鼠标点击旋转_旋转 45          sign_t = (GameObject)Instantiate (gotoSign, new Vector3 (p.x, p.y, mainCharacter.transform.position.z), gotoSign.transform.rotation);
ARPG中人物的鼠标点击旋转_旋转 45        
ARPG中人物的鼠标点击旋转_旋转 45
ARPG中人物的鼠标点击旋转_旋转 45          //we use always world up direction to compare with new vector
ARPG中人物的鼠标点击旋转_旋转 45          Vector3 thePosition =    Vector3.up;
ARPG中人物的鼠标点击旋转_旋转 45          //Debug.Log ("thePosition" + thePosition);
ARPG中人物的鼠标点击旋转_旋转 45
ARPG中人物的鼠标点击旋转_旋转 45            
ARPG中人物的鼠标点击旋转_旋转 45          //计算点击的点和主角位置这2点产生的向量,用来跟主角的方向求角度
ARPG中人物的鼠标点击旋转_旋转 45          Vector3 targetDir = sign_t.transform.position - mainCharacter.transform.position;
ARPG中人物的鼠标点击旋转_旋转 45          //Debug.Log ("targetDir" + targetDir);
ARPG中人物的鼠标点击旋转_旋转 45          //Debug.DrawLine (sign_t.transform.position, mainCharacter.transform.position);
ARPG中人物的鼠标点击旋转_旋转 45            
ARPG中人物的鼠标点击旋转_旋转 45          // this is vector 叉乘
ARPG中人物的鼠标点击旋转_旋转 45          Vector3 tempDir = Vector3.Cross (thePosition, targetDir.normalized);
ARPG中人物的鼠标点击旋转_旋转 45          // this is vector 点乘
ARPG中人物的鼠标点击旋转_旋转 45          float dotValue = Vector3.Dot (thePosition, targetDir.normalized);
ARPG中人物的鼠标点击旋转_旋转 45          // 用点乘来计算夹角度
ARPG中人物的鼠标点击旋转_旋转 45          float angle = Mathf.Acos (dotValue) * Mathf.Rad2Deg;
ARPG中人物的鼠标点击旋转_旋转 45
ARPG中人物的鼠标点击旋转_旋转 45          if (tempDir.z>0)    
ARPG中人物的鼠标点击旋转_旋转 45          {
ARPG中人物的鼠标点击旋转_旋转 45            //angle must be 0~360
ARPG中人物的鼠标点击旋转_旋转 45            angle = angle * (-1);
ARPG中人物的鼠标点击旋转_旋转 45            angle += 360;
ARPG中人物的鼠标点击旋转_旋转 45          }
ARPG中人物的鼠标点击旋转_旋转 45          //Debug.Log ("tempDir" + tempDir);
ARPG中人物的鼠标点击旋转_旋转 45          Debug.Log ("angle" + angle);
ARPG中人物的鼠标点击旋转_旋转 45            
ARPG中人物的鼠标点击旋转_旋转 45          // first init to Up
ARPG中人物的鼠标点击旋转_旋转 45          mainCharacter.transform.rotation = mainCharacterRotationInit;
ARPG中人物的鼠标点击旋转_旋转 45          // then rotate with angle
ARPG中人物的鼠标点击旋转_旋转 45          mainCharacter.transform.Rotate(new Vector3(0,angle,0));
ARPG中人物的鼠标点击旋转_旋转 45
ARPG中人物的鼠标点击旋转_旋转 45        }
ARPG中人物的鼠标点击旋转_旋转 45      }
ARPG中人物的鼠标点击旋转_旋转 45    }
ARPG中人物的鼠标点击旋转_旋转 45    
ARPG中人物的鼠标点击旋转_旋转 45    
ARPG中人物的鼠标点击旋转_旋转 45  }
ARPG中人物的鼠标点击旋转_旋转 45}