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