zjhzhjx 发表于 2013-10-7 22:16

将脚本指定给角色总是出错,郁闷

初学者按照这本书第三章学第3人称射击游戏

按教程做的,然后按教程步骤把脚本指定给角色,总是提示错误

按play运行,提示如下


初学中,无法解决,请大侠们指教!

zjhzhjx 发表于 2013-10-7 22:24

怕自己脚本输入出错 ,又将该书光盘上脚本文件复制到我的脚本了,。。。真是没理解是怎么回事出错了

animatior 发表于 2013-10-8 09:15

贴脚本看看

zjhzhjx 发表于 2013-10-8 09:47

using UnityEngine;
using System.Collections;


public class Player : MonoBehaviour {
public float m_speed =1;
protected Transform m_transform;
       
        // Use this for initialization
        void Start () {
       
                m_transform = this.transform;
        }
       
        // Update is called once per frame
        void Update () {
               
        //纵向移动
        float movev = 0;
               
        //水平移动距离
        float moveh = 0;
               
        //按上键
        if ( Input.GetKey( KeyCode.W ) )
                {
                        movev -= m_speed*Time.deltaTime;
                }
               
        //按下键
        if ( Input.GetKey( KeyCode.S ) )
                {
                        movev += m_speed*Time.deltaTime;
                }
               
        //按左键
        if ( Input.GetKey( KeyCode.A ) )
                {
                        moveh += m_speed*Time.deltaTime;
                }
               
        //按右键
        if ( Input.GetKey( KeyCode.D ) )
                {
                        moveh -= m_speed*Time.deltaTime;
                }
               
        //移动
        this.m_transform.Translate( new Vector3( moveh,0,movev ) );
               
        }
}

zjhzhjx 发表于 2013-10-8 09:51

if ( Input.GetKey( KeyCode.W ) )
是看到别人实例控制移动这么写
原脚本是这部分是这样
if ( Input.GetKey( KeyCode.UpArrow ) )
      {
            movev -= m_speed * Time.deltaTime;
      }

      // 向下移动
      if ( Input.GetKey( KeyCode.DownArrow ) )
      {
            movev += m_speed * Time.deltaTime;
      }

      //向左移动
      if ( Input.GetKey( KeyCode.LeftArrow ) )
      {
            moveh += m_speed * Time.deltaTime;
      }

      // 向右移动
      if ( Input.GetKey( KeyCode.RightArrow ) )
      {
            moveh -= m_speed * Time.deltaTime;

zjhzhjx 发表于 2013-10-8 10:12

sorry,上面贴错了 那是第二章控制飞船移动的 结果是飞船不会动 但没显示说脚本出错,可以指定给角色,但角色不会移动 可以进入play模式。
以下才是fps的脚本 显示是图示的错误,指定给角色时显示有错
using UnityEngine;
using System.Collections;



public class Player : MonoBehaviour {
        //组件
        public Transform m_transform;
    CharacterController m_ch;
       
        //角色移动速度
        float m_movSpeed = 3.0f;
        //重力
        float m_gravity = 2.0f;

        //生命值
        public int m_life = 5;
       
        // Use this for initialization
        void Start () {
        //获取组件
        m_transform = this.transform;
        m_ch = this.GetComponent<CharacterController>();
       
        }
       
        // Update is called once per frame
        void Update () {
       
                // 如果生命值为0,什么也不做
               if (m_life <= 0)
            return;

      Control();
        }
       
        void Control()
        {
               float xm = 0, ym = 0, zm = 0;

               
                //重力运动
                ym -= m_gravity*Time.deltaTime;
               
                //上下左右运动
               if (Input.GetKey("W")){
            zm += m_movSpeed * Time.deltaTime;
      }
      else if (Input.GetKey("S")){
            zm -= m_movSpeed * Time.deltaTime;
      }

      if (Input.GetKey("A")){
            xm -= m_movSpeed * Time.deltaTime;
      }
      else if (Input.GetKey("D")){
            xm += m_movSpeed * Time.deltaTime;
      }
                       
        //移动
       m_ch.Move( m_transform.TransformDirection(new Vector3(xm, ym, zm)) );
               
               
        }
       
        void OnDrawGizmos()
    {
      Gizmos.DrawIcon(this.transform.position, "Spawn.tif");
    }
       
}

我爱智研 发表于 2013-10-8 22:15

这个看不有什么错误,建议你看一下Console窗口里的的错误提示信息

zjhzhjx 发表于 2013-10-8 23:41

错误已经找到了,很是郁闷的错误,居然是在注解上。注解//后面我是用搜狗拼音输入汉字的,我用光盘自带的脚本复制过来,就没有错误,但是他的注解是乱码的,我用搜狗拼音改了下,居然就出错了,我用微软的全拼改回去,居然有对了,郁闷了好几天问题居然是这样的,飞船也可以移动了!!!差点让我放弃继续学习{:soso_e134:}

zjhzhjx 发表于 2013-10-8 23:45

//生命值//生命值有谁碰到过这种情况吗?用两个看去一模一样注解,一个用微软全拼,一个用搜狗拼音,微软的注解可以通过,搜狗的注解居然是出错?

zjhzhjx 发表于 2013-10-8 23:56

还有一个奇怪的现象是,我的unity3d版本,如果脚本指定角色后出错删除掉再重新建个script,一定要按下图上那个图标reset才能有效,否则搞死人
页: [1] 2
查看完整版本: 将脚本指定给角色总是出错,郁闷